Memakai Index Advisor Di TimesTen


Pada query SQL yang mengandung klausa WHERE, database perlu menyaring data yang harus dikembalikan.   Pencarian isi tabel yang dilakukan berdasarkan seluruh data yang ada, baris per baris, disebut sebagai full table scan.   Pada full table scan, semakin banyak baris pada tabel maka semakin lambat eksekusi query tersebut.

Full table scan dapat dihindari bila kolom dalam klausa WHERE sudah di-index sebelumnya.   Index adalah struktur data yang mewakili kolom di tabel yang dirancang untuk mempercepat pencarian.   Sebagai contoh, bila saya mendefinisikan sebuah range index pada kolom NILAI, maka database dapat menentukan dengan cepat baris mana yang memenuhi kondisi SQL WHERE NILAI > 60,  tanpa harus menelusuri seluruh baris yang ada (full table scan).   Walaupun penggunaan index meningkatkan kinerja query,  ia akan mempengaruhi proses seperti INSERT dan UPDATE karena pada saat isi tabel berubah, maka index juga perlu diperbaharui.   Oleh sebab itu, penggunaan index perlu dipertimbangkan secara seksama🙂

Oracle TimesTen memiliki fasilitas index advisor yang dapat memberikan saran kolom mana yang perlu di-index bagi database administrator (atau developer, terutama yang ingat merawat database!).   Index advisor hanya memberikan rekomendasi saja;  database administrator perlu mempertimbangkan lagi apakah index perlu dibuat atau tidak.

Saya akan mencoba memakai index advisor untuk melihat rekomendasi index untuk sebuah aplikasi yang memproses faktur.   Langkah pertama yang saya lakukan adalah memperbaharui statistics untuk tabel.   Di SQL Developer, saya men-klik kanan Tables, lalu memilih Statistics, Update.   Setelah itu, saya men-klik tombol Apply.

Memperbaharui statistik

Memperbaharui statistik

Pada langkah berikutnya, saya memanggil procedure ttIndexAdviceCaptureStart() untuk menjalankan index advisor seperti yang diperlihatkan pada gambar berikut ini:

Memulai proses capture

Memulai proses capture

Agar dapat bekerja dengan baik, index advisor perlu mengamati SQL yang diberikan selama proses capture sebagai bahan pertimbangan dalam merekomendasikan index.

Saya memberikan nilai 1 sebagai nilai parameter pertama, captureLevel, karena SQL sebagai akan dikerjakan oleh aplikasi melalui koneksi yang berbeda.   Bila SQL akan diberikan oleh koneksi yang sama, saya dapat menggunakan nilai 0.

Setelah memulai proses capture, saya kemudian menjalankan aplikasi dan melakukan operasi dari aplikasi seperti layaknya saat dipakai oleh pengguna.   Saya mencoba mensimulasi beberapa aktifitas yang paling sering dilakukan oleh pengguna.   Saya juga mencoba menampilkan laporan, terutama yang membutuhkan waktu lama.

Setelah selesai dengan aplikasi, saya perlu mematikan proses capture dengan memanggil procedure ttIndexAdviceCaptureEnd()seperti yang terlihat pada gambar berikut ini:

Menyelesaikan proses capture

Menyelesaikan proses capture

Untuk melihat apa saja SQL yang berhasil diperoleh oleh index advisor, saya memanggil procedure ttIndexAdviceCaptureInfoGet()seperti pada gambar berikut ini:

Melihat informasi yang di-capture

Melihat informasi yang di-capture

Hasil dari procedure ttIndexAdviceCaptureInfoGet() memperlihatkan bahwa sebuah proses capture secara global (CAPTURELEVEL=1) telah selesai dilakukan (CAPTURESTATE=0).   Proses capture tersebut menampung 25.196 prepared statement dan telah mengerjakan 25.200 perintah SQL.

Sekarang, saya akan melihat apa rekomendasi dari index advisor berdasarkan hasil capture yang diperolehnya dengan memanggil procedure ttIndexAdviceCaptureOutput() seperti yang terlihat pada gambar berikut ini:

Menampilkan hasil capture

Menampilkan hasil capture

Pada hasil di atas, kolom createStmt berisi perintah SQL untuk membuat index, sementara kolom stmtCount menunjukkan jumlah perintah SQL berbeda yang akan diuntungkan oleh index tersebut.   Sebagai contoh, bila saya memberikan index yang berisi kombinasi kolom (DTYPE,TANGGAL) pada tabel FAKTUR,  maka akan ada 33 perintah SQL berbeda (di aplikasi) yang diuntungkan oleh index tersebut.

Saya tidak akan mengerjakan seluruh saran yang diberikan di createStmt karena operasi insert, update, dan delete akan menjadi lambat.  Semakin banyak index yang perlu diperbaharui, maka semakin lambat operasi perubahan data pada sebuah tabel.  Walaupun demikian, index advisor setidaknya sudah memberikan titik terang berupa kandidat kolom yang perlu di-index.

Perihal Solid Snake
I'm nothing...

One Response to Memakai Index Advisor Di TimesTen

  1. Ping-balik: Memakai Full-Text Search Di MySQL Server | Programming Logic And Technology

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: