Bbrp hal yg mesti Anda perhatikan ketika melakukan
testing:

1. tool explain plan / autotrace tidak selalu benar
didalam melaporkan execution-plan. Yg paling benar
dapat dibaca dari v$sql_plan, atau lewat tracing dan
tkprof.

2. cara Anda menggunakan bind variable di sqlplus
tidak tepat. Seperti dibawah ini, bind variable :b
tidak mendapatkan nilainya dari DEFINE yg diatas.
Buktikan sendiri dengan mengganti nilai literal 'b1'
dengan 'bx','bt','b3' tanpa ada error walaupun tidak
Anda define di atasnya. 
Coba jalankan querynya secara langsung tanpa 'explain
plan'.

SQL> define b='OK';
SQL> explain plan for select * from sh.hist$ 
     where status=:b;

Seharusnya cara yg benar adalah:

MSQL> var b varchar2(10)
MSQL> exec :b := 'OK';

MSQL> select /*+ TEST1 */ * from sh.hist$ 
      where status=:b;

utk melihat sqlplan yg sebenarnya, bisa 2 tahap
seperti ini (ada cara lain sih dengan memakai
v$mystat):
- select sql_id from v$sql 
  where sql_text like '%TEST1%';
- select * from v$sql_plan
  where sql_id = '&input_dari_atas';

nb: sql_id adalah kolom baru di 10g, utk 9i bisa pakai
kolom sql_hash_value.

3. Walaupun Anda sudah menghapus info statistik, tapi
parameter init.ora OPTIMIZER_DYNAMIC_SAMPLING pasti
masih bernilai 2 (default). Efeknya adalah: kalau
tidak ada statistik pada table, otomatis Oracle akan
melakukan sampling pada waktu sql. Jadi efeknya akan
seperti ada statistik (cuma samplingnya bisa tidak
akurat, tergantung distribusi kolom di table tsb).
Jadi kalau mau melihat efek buruk dari tidak adanya
statistik, set dulu OPTIMIZER_DYNAMIC_SAMPLING = 1.


Saya pribadi sudah melakukan beberapa testing, dan
sofar masih berperilaku seperti yg saya harapkan. Anda
bisa melakukan testing kembali dengan mengikuti cara
yg saya sebut di atas..Selamat mencoba.


regards,
tomi


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Kirim email ke