Pojok Oracle buletin edisi 01 Mei 2006
                
---------------------------------
Do you Yahoo!?
 New and Improved Yahoo! Mail - 1GB free storage!
  ----------

****************************************************************************
Pojok Oracle Buletin                                      Edisi 01 Mei 2006
Redaksi: Erick
[EMAIL PROTECTED]
****************************************************************************

Menggunakan Explain Plan dengan Tree structure

Cara ini digunakan untuk menganalisa query dengan pendekatan parent/child.
Cara adalah sebagai berikut:
1.Contoh query
  explain plan
  set statement_id = ‘SQL2’ for
  select a.cust_last_name, a.cust_first_name, a.cust_mid_init, b.order_desc, 
      b.order_create_dt
  from customer a, order_hrd b
  where cust_phone = :host1
  and b.cust_no = a.cust_no
  and b.order_status = ‘open’;

2.Query untuk membangun tree structure
  select LPAD (‘ ‘, 2*(level-1)) || operation “Operations”, 
  options “Options”, 
  decode(to_char(id),’0’,’Cost= ‘ || nvl(to_char(position),’n/a’),
  object_name) “Object_name”, id || ‘-‘ || nvl(parent_id),0) || ‘-‘ ||
  nvl(position,0) “Order”, substr(optimizer,1,6) “Opt”
  from plan_table
  start with id = 0
  abd statement_id = ‘SQL2’
  connect by prior id = parent_id
  and statement_id = ‘SQL2’;

3.Keterangan:
  ·Kolom Order menunjukkan parent ID, merupakan posisi dari tree 
   structure pada rencana eksekusi (execution plan). ID menunjukkan 
   urutan tahapan pengerjaan, tetapi bukan urutan eksekusi.
  ·OPT menunjukkan mode optimasi yang digunakan (optimizer).

4.Penjelasan
  Untuk mengerti bagaimana oracle memproses query, kita harus 
  mengerti pada puturan (sequence) apa oracle memproses langkah itu dan 
  apa yang dilakukan oracle pada setiap tahap.

  Putaran (sequence) ditentukan oleh hubungan parent/child pada 
  setiap tahap. Umumnya child lebih dulu di proses, paling tidak satu 
  kali dan merupakan input untuk parent. Ketika parent mempunyai 
  beberapa child, proses pengerjaan di urutkan berdasarkan nomor tahapan.

5.Arti dari hasil explain plan
  Query ini mempunyai 5 tahap. Tahap ketiga di eksekusi pertama kali 
  karena berupa pencarian data antara (range scan) yang menghasilkan 0, 1,
  atau banyak ROWID kepada tahap kedua. Untuk setiap ROWID yang dihasilkan, 
  pada tahap kedua data yang dihasilkan dari tahap ketiga akan diurutkan 
  berdasarkan ROWID dan mengembalikan hasilnya kepada tahap pertama. Untuk 
  setiap data yang diterima dari tahap kedua, tahap pertama akan mengirimkan 
  cust_no kepada tahap kelima. Pada tahap kelima semua nomor customer akan 
  digunakan untuk menjalankan proses unique scan untuk mendapatkan ROWID. 
  ROWID yang dihasilka akan dikembalikan kepada tahap ke-empat. Jika tidak 
  ditemukan ROWID yang dicari, maka tahap 4 akan membertahu tahap pertama 
  untuk meng-eliminasi baris data itu. Jika ROWID yang dicari ditemukan, 
  maka tahap empat akan meng-akses tabel berdasarkan ROWID dan mengambil 
  data yang dicari. Ketika data yang dicari ditemukan, dan jika nomor 
  telepon benar, data itu akan diterukan ke tahap pertama.

6.Performance
  Query diatas mengambil setiap order yang ada pada selang waktu tertentu 
  dan dilanjutkan dengan mencocokkannya dengan data customer.

7.Bandingkan dengan query dibawah ini yang merupakan perubahan sintak query 
  di atas.
  Select a.cust_last_name, a.cust_first_name, a.cust_mid_init, b.order_desc,
  b.order_create_dt
  from order_hdr b, customer a
  where cust_phone = :host1
  and b.cust_no = a.cust.no
  and b.order_status = ‘open’;

8.Penjelasan performance query yang telah diubah.
  Query diatas menghasilkan susunan tabel akses yang baik karena tabel 
  customer merupakan setengah dari query yang di eksekusi pertama kali dan 
  kemungkinan besar hanya akan mengembalikan satu baris data ke setengah 
  bagian query order.

  Query diatas bukan merupakan query yang baik dari sisi optimasi “and – 
  Equal”, karena sistem akan mencari 1000 ROWID pada order_status index untuk
  dicocokkan dengan semua ROWID pada index cust_no.

9.Query untuk memperbaiki optimasi “end – equal:
  Select a.cust_last_name, a.cust_first_name, a.cust_mid_init, b.order_desc,
  b.order_create_dt
  from order_hdr b, customer a
  where cust_phone = :host1
  and b.cust_no = a.cust.no
  and b.order_status || ‘’ = ‘open’;

10.Penjelasan query optimasi “end – equal”
   Perubahan pada bagian b.order_status || ‘’ = ‘open’ dilakukan untuk 
   menghentikan oracle menggunakan index order_status.

Catatan
Sebelum menggunakan explain plan perlu dilakukan hal-hal sebagai berikut:
·Menjalankan skrip pada ORACLE_HOME/rdbms/admin/utlxplan.sql.
·Untuk menampilkan hasil explain plan, lakukan query seperti berikut: 
     o  Select operation, options, object_name, id, parent_id 
        from plan_table where statement_id = ‘customer’;


*****************************************************************************






[Non-text portions of this message have been removed]





-- 
www.itcenter.or.id - Komunitas Teknologi Informasi Indonesia 
Info, Gabung, Keluar, Mode Kirim : [EMAIL PROTECTED] 
:: Hapus bagian yang tidak perlu (footer, dst) saat reply! :: 
## Jobs: itcenter.or.id/jobs ## Bursa: itcenter.or.id/bursa ##
$$ Iklan/promosi : www.itcenter.or.id/sponsorship $$

[@@] Jaket ITCENTER tersedia di http://shop.itcenter.or.id 

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/ITCENTER/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Kirim email ke