Belajar Tuning Query di Oracle #1

Postingan kali ini masih tentang database lha yaa 😀 oke kali ini saya mau membahas tentant optimasi a.k.a tuning (bekennya sih gitu). The case is saya mau retrieve data customer id, customer first name, customer gender, customer year of birth, dan the last customer email dari table customer yang saya punya. Jumlah baris yang dimiliki oleh table customer sendiri ada 55500. Jumlah yang menurut saya udah cukup banyak, apalagi komputer saya bisa dimasukkan dalam kondisi komputer standar.

Intel Pentium 4 2.66 GHz with 1.5 GB of RAM

Okay kita langsung saja, pada skenario pertama saya akan coba retriev yang saya butuhkan dengan query yang teramat sederhana

select cust_id,cust_first_name,cust_gender,cust_year_of_birth,cust_email from sh.customers

dan bummmm 😦 55500 row data keluar dengan waktu yang bisa dilihat di screen shoot berikut

Yippie, saya menunggu 6 menit dan 43 detik lebih untuk 55500 row data. Apapun proses yang terjadi didalam query tersebut don’t care ya


Next, skenarionya adalah menggunakan hint. Konon katanya ini adalah query tuning. Ok langsung jajal aja deh. Apa yang mau saya retriev masih sama, namun saya lakukan dengan query yang berbeda

SELECT /*+ FIRST_ROWS(10) */ cust_id,cust_first_name,cust_gender,cust_year_of_birth,cust_email from sh.customers

dan binggoooooo hasilnya adalah sebagai berikut…

Waktu yang saya butuhkan untuk jumlah data yang sama seperti yang sebelumnya adalah hanya 31 detik lebih dikit saja.


FYI saya selalu melakukan set kondisi buffer dikosongkan, begitu juga shared pool untuk parsing query juga saya kosongkan sebelum memulai dengan masing-masing query. So my suggestion is use my query if you want to retrieve so many rows.

See you bye…


Advertisements

Leave a comment »

Mau belajar tentang database lebih dalam?

Hmmm, posting kali ini cuma untuk memberikan link mengenai interview yang berkaitan dengan database. Umumnya dari kita bisa mengoperasikan database management system namun kerap juga tidak mengerti alasan logis dibalik apa yang kita kerjakan tersebut.

http://vyaskn.tripod.com/iq.htm

Misalnya kadang kita lupa apa bedanya unique dan primary key. Sekilas kan sama tuh padahal beda.

Leave a comment »

Tentang Database (lagi)

Ok tulisan kali ini akan membahas mengenai konsep-konsep yang ada di database. Ok langsung saja, secara konseptual database hanya memiliki dua buah file yakni LogFile dan DataFile.

Log File merupakan file yang berisikan rekaman-rekaman transaksi (operasi / aktifitas )  yang dilakukan atau dikerjakan pada database tersebut. Targetnya adalah menjaga konsistensi data yang ada, sehingga semua bisa ditracing melalui isi logfile ini.

DataFile ya jelas lah merupakan file yang berisikan data yang sebenarnya.

Pokoknya database pasti menerapkan dua file tersebut, nantinya perusahaan DBMS akan menyesuaikan dua file tersebut dengan system yang mereka bangun. Misalnya di Oracle, mereka menyiapkan juga control file.

Leave a comment »

Sekelumit mengenai mie instant #1

Namanya mahasiswa kalau bicara makan sebagian besar pasti kacau. Kacau karena budget dan memang malas ngatur. Salah satu kekacauan itu adalah keseringan makan mie instan. Biasanya di sekitar kampus mesti ada aja warung kopi & mie. Mie instan merupakan salah satu solusi makan di era krisis seperti ini ( sejujurnya malah udah gak jadi solusi, karena harga mie koq lama-lama lebih mahal dari harga nasi+telor wkwkwkwkkw ). Konon katanya di mie instan itu terkandung lilin yang konon juga katanya menjaga biar mie ga lengket. Juru bicara salah satu produsen mie instan yang paling berkuasa di negeri ini sudah pernah membantahnya. Ya kalau dipikir sih ya ga mungkin juga produsen mie sebesar itu melakukan kebodohan dengan menyisipkan kandungan lilin pada produk mie instannya. Tema kali ini adalah tetap saja membongkar keburukan konsumsi mie instan berlebihan. Ok mari kita mulai..
1. Mie membuat kita merasa tidak kenyang ketimbangn sesudah makan nasi
2. Kandungan Natrium di mie instan sangatlah besar berasal dari garam dan kerabatnya yg merupakan genre penyedap dan bumbun rasa. Nah natrium ini menjadi berbahaya bagi orang hipertensi ( inget ga kalau orang darah tinggi jgn makan garam banyak-banyak, ya kurang lebih sama lah ) dan juga natrium ini berbahaya buat lambung karena merangsang lambung untuk sekresi asam lambung. Kalau sekresi terus ya bisa luka dinding lambung.Macam-macam mie instan

Leave a comment »

Glossary Data Warehouse #1

Tulisan kali ini akan membahas sedikit mengenai data warehouse. Sekedar gambaran aja di awalnya, topik kali ini adalah antyi klimaks dari teori basis data relasional, sangat-sangat berbedaaaaaaaaa….

Langsung aja, pada teori basis data relasional susunan logis ( ER Diagram ) dan teori normalisasi diarahkan untuk efisiensi insert, pengaksesan data per barisnya, dan konsistensi ( sisanya cari sendiri ). Nah masuk ke data warehouse maka buang jauh-jauh semua itu karena yang akan muncul adalah denormalisasi.

Kembali ke data warehouse sendiri yang akan mengurusi jumlah data yang cukup besar yang nantinya kan dianalisis menjadi suatu laporan maka sejujurnya aturan basis data relasional dan teori normalisasi tidak relevan lagi.  Untuk suatu enterprise di level atas ( top management ) membutuhkan informasi dari data-data yang lintas sektoral dan nantinya sifatnya adalah historical.  Lintas sektoral berarti memungkinkan terjadinya join antar data-data.  Historical berati data-data dari masa lampau juga ada disimpan dan digunakan. Terlalu banyak join tidak masalah jika jumlah data yang menjadi objek join sedikit, nah kalau jumlah data banyak rasanya mustahil. wkwkwkwkkwkw..Coba saja lakukan join dengan schema ‘SH’ pada Oracle dan rasakan saja efeknya..

Karena untuk urusan data warehouse tidak mungkin menggunakan ER Modelling dengan teori normalisasinya maka digunakan modelling lain yakni Star Schema dan Snowflake schema…

Leave a comment »

2 PHASE COMMIT

Judulnya sih keliatan agak berat memang, dan saya juga baru mempelajari hal ini untuk kebutuhan literasi (calon) tugas akhir saya. Beberapa hal dalam hal ini yang belum saya paham adalah apakah ini diterapkan pada distributed database saja, atau juga di single database. Sekiranya siapapun yang baca punya argument lain silakan post di bagian comment, CMIIW. Secara pribadi saya condong ke distributed database saja, hal itu berdasarkan pada beberapa contoh yang umumnya melibatkan beberapa node.

Langsung saja, dengan apa itu 2 phase commit (2PC). Adalah sebuah mekanisme sinkronisasi database yang dalam hal jaminan valid data dalam transaction processing. 2PC setidaknya melibatkan 2 node yaitu satu node sebagai controller ( commandor ) dan satu lagi sebagai node replicant.  How does it work??

Misal saya punya node A sebagai controller, B serta C sebagai replicant. Setiap query yang masuk ke, let say query (x) maka node A sebagai controller akan memberikan message ke node B dan C dengan isi yang juga query (x).  Sementara itu node B dan C menerima message berupa query (x), lalu mereka lakukan eksekusi normal, while query (x) berhasil maka baik node B atau C mengirimkan jawaban atas message tadi yang berupa query (x) berupa jawaban suskes atau failed.  Posisi sekarang adalah transaksi sukses baik di node A,B, dan C namun belum di commit! ketika node A sebagai controller menerima reply dari B dan C berupa ‘sukses’ maka node kembali mengirimkan message ke node B dan C untuk lakukan commit terhadap transaksi tadi. Dan beres masalah. Transaksi selesai dan data valid.

While salah satu node ( entah B atau C ) mengirimkan reply failed maka controller mengrimkan kembali message berupa perintah lakukan rollback terhadap transaksi tadi. Beres masalah, transaksi batal dan data tetap valid.

Masalahnya adalah apa yang terjadi ketika contoller menunggu reply dari node B dan C? Apa yang terjadi pada node dan B dan C ketika menunggu message balik dari controller ketika mereka sudah mereply message dari controller yang pertama?

Jawabannya adalah MENUNGGU dan TERBLOCK.  Node B dan C harus di block ketika menunggu message dari controller baik itu message pertama maupun kedua. Sedangkan controller memblokc node B dan C ketika mereka dikirimi perintah commit / rollback, jika node B dan C down atau kelamaan mereply perintah commit / rollback maka controller tidak ikut down atau terblock tapi bisa memutuskan mau di abort saja atau tetap menunggu. Untuk  mengatur hal itu ada settingan timeoutnya.

CMIIW..Ini masih sekedar teori

Leave a comment »

MySQL bin Java

Akhirnya walaupun ketinggalan zaman,saya bisa melakukan koneksi dari Java ke MySQL as simple as this….

package tubesoot;

//add mysql connector di library pada package anda

import java.sql.*;
import javax.swing.JOptionPane;

/**
*
* @author Dedi Caesar Humaedi
*/

public class koneksi {

//inisialisasi statement pertamanya kosong selalu

private Statement stmt = null;
private Connection con = null;
private ResultSet rs = null;

public koneksi(){
try{
//ini mah wajib harus ada..

Class.forName(“com.mysql.jdbc.Driver”);
}
catch (Exception e){
JOptionPane.showMessageDialog(null,” “+e.getMessage(),”JDBC Driver Error”,JOptionPane.WARNING_MESSAGE);
}
try{

//mulai masuk ke database kitahhh

con = DriverManager.getConnection(“jdbc:mysql://localhost/akademik”,”root”,””);
stmt = con.createStatement();
}
catch (Exception e){
JOptionPane.showMessageDialog(null,” “+e.getMessage(),”JDBC Driver Error”,JOptionPane.WARNING_MESSAGE);
}
}
//yang ini buat nampung data
public ResultSet getData(String SQLString){
try{
rs = stmt.executeQuery(SQLString);
}
catch (Exception e){
JOptionPane.showMessageDialog(null,”Error: “+e.getMessage(),”Communication Error”,JOptionPane.WARNING_MESSAGE);
}
return rs;
}
//yang ini buat eksekusi command a.k.a perintah a.k.a query
public void query(String SQLString){
try{
stmt.executeUpdate(SQLString);
}
catch (Exception e){
JOptionPane.showMessageDialog(null,”Error: “+e.getMessage(),”Communication Error”,JOptionPane.WARNING_MESSAGE);
}
}
}

hahaha..ternyata simple juga..

Leave a comment »