SQL Server knowledge center

everything about SQL Server
See also: Other Geeks@INDC

Query dari 23 jam ke 7 detik lalu ke 2 detik; Ketawa ngakak

Query dari 23 jam ke 7 detik lalu ke 2 detik; Ketawa ngakak

By : Kasim Wirama, MCDBA

 

Saya coba ceritakan sedikit mengenai pengalaman tuning. sebulan lalu saya ditelpon dari salah satu karyawan sebuah perusahaan di Sydney. Sepertinya dia sering baca ke dalam blog-ku, dan meminta bantuan untuk melihat kasus sebuah stored procedure, yang jika dieksekusi akan memakan waktu 23 jam. What the hell!, hatiku berguman. Ngeri juga terima permintaan bantuan dia, saya coba direct dari jauh dengan harapan dia berhasil melakukan. Namun harapanku meleset, terpaksa saya memenuhi undangan dia ke kantornya untuk trouble shoot stored procedure “keramat” tersebut yang didominasi oleh big size table sekitar 10 sampai 40 juta record. Terus terang saya cuma main-main dengan database dengan jumlah record 500 ribuan. Sempat keder juga. Tapi kupikir-pikir cuma 1 stored procedure aja, ladenin aja tantangannya.

 

Karena saya enggan utak-atik querynya karena ada 6 query di dalam stored procedure dan correlated subquery sampai 4 tingkat (#$#&%^#$@#), saya gunakan cara paling mudah dengan jalankan database tuning advisor (DTA), ternyata improvementnya cuma 4 persen bila diapply index dan statistik yang direkomendasikan oleh DTA. Lemas sudah saya, meski AC-nya dingin, namun saya keringat dingin juga, karena reputasi ikut dipertaruhkan juga. Dengan bahasa inggris yang standard Indonesia (sempat kelepasan kata “gua”, orang bulenya pasang tampang bingung), aku minta ijin kalau boleh utak-atik querynya. Dengan anggukan penuh semangat, dia bilang “Sure! you can do it”. Sampai malam jam 8 saya rombak querynya, ternyata usahaku tidak sia-sia, hasil akhir bisa sampai 2 detik dengan hot cache dan 3 detik dengan cool cache, dengan hasil permulaan rewrite query ke 7 detik. Orang bulenya terpana, saya juga ikut terpana. Terima kasih Tuhan akhirnya Engkau membantuku.

 

Malam itu udara Sydney dingin sekali karena masuk musim gugur, sama dinginnya dengan ruangan server. Antara mengigil dengan ketawa ngakak bercampur baur dalam perjalanan pulang ke apartemen. Sudah gilakah saya? Ya saya sudah gila karena merugi tidak ikut kuliah selama 1 hari, terpaksa fotocopy catatan dari sesama mahasiswa. Seminggu kemudian saya mendengarkan seminar performance tuning di SQL monthly meeting di salah sudut gedung pencakar langit sambil senyum-senyum ingat kejadian yang sudah lewat.

Share this post: | | | |

Comments

Ade Aan Wirama said:

Halo saudaraku (hehehehe...nama belakangnya sama),

Keren banget pengalamannya, coba dishare juga dong query apa yang harus diperbaiki, siapa tau saya bisa apply ke stored procedure saya atau customer saya.

Sukses ya mas Kasim.

Ade Aan Wirama

# May 6, 2008 10:11 PM

quarks4.net said:

Kasim, congrats 2 u.

Jaya di ausie..jaya di mana aja.

# May 6, 2008 10:39 PM

Kasim.Wirama said:

sebetulnya saya ketawa terbahak-bahak karena tidak menduga hasilnya begitu drastis.

To quarks4.net

Thanks, anyway itu cuma membantu saja, sekalian meninjau kasus performance yang menambah wawasan saya. Semuanya akan dikembalikan ke diri saya dan komunitas juga.

To Ade Aan Wirama

Hi Kakak Ade :)

Ya aku coba share di sini moga2 berguna, salah satu trik yang saya lakukan adalah mengubah index scan menjadi index seek dengan meminimalkan record-record yang perlu saja dan kurangi record count pada inner record. Untuk kasus jumlah tabel yang besar, performance nested loop kurang begitu memuaskan sehingga saya usahakan ubah nested loop menjadi one to many merge join bila jumlah record yg hendak digabungkan besar. Kecenderungan terjadi error pada cardinality estimate juga mungkin terjadi terutama untuk tabel2 yang tingkat update dalam jumlah besar, untuk itu lakukan update statistics dengan full scan. Dan saya juga implementasikan trik-trik tuning yang sudah pernah saya share di posting-an artikel saya di portal ini.

# May 7, 2008 6:23 AM

cahnom said:

Wow... kereen...

Selama ini SQL performance tuning paling gede yang pernah aku lakukan hanya sebatas dari 40an menit ke 7 menit.

Ini bisa dari 23 jam ke 2 detik. Salut dech!

# May 7, 2008 9:19 AM

hakimrie said:

keren...!

dari 82800 detik menjadi 2 detik

dan 2 detik untuk segitu banyak record

dahsyat pisan!

salut pak!

# May 7, 2008 10:08 AM

Kasim.Wirama said:

To Cahnom dan Hakimrie,

Kalau punya ketertarikan terhadap behaviour relational database engine SQL Server dan ada kasus yang terkait, kesempatan baik untuk menjajal knowledge yang sudah ada, mudah-mudahan Cahnom dan Hakimrie mendapatkan sesuatu yang luar biasa yang mungkin bikin kalian tertawa.

# May 7, 2008 12:14 PM

Andra said:

Wah jadi tertarik.

punya referensi yang bagus untuk belajar sql performance tuning?

*selain blog ini loh.

# May 7, 2008 2:23 PM

diditho said:

keren, thanks for sharing.

# May 7, 2008 3:33 PM

Rangga Praduwiratna said:

Wah keren mas tuningnya.. Kalau bisa dishare juga pengalamannya, apa penyebab lama waktu eksekusi query dan gimana solusinya.. Kalau boleh lhoooo.. Hehehe.. Sukses selalu!

# May 8, 2008 11:39 PM

lieur said:

wow... great job.. excellent..

btw... mas kasim..emank masi kul ??kul S2..

bisa di share lagi gak neh ilmunya.. dasyat bgt.heheh

# May 10, 2008 5:07 PM

Kasim.Wirama said:

thanks atas commentnya. Agar bisa tuning database terutama tuning querynya, seorang DBA perlu tahu bagaimana komponen query processor memproses sebuah query request, dari situ bisa dilihat apakah ada peluang untuk optimasi query lebih lanjut. Silahkan baca artikelku yang terkait dengan SQL Server engine behaviour, dan blog dari SQL team redmond.

Keep stay tune. :)

# May 10, 2008 7:28 PM
Leave a Comment

(required) 

(required) 

(optional)

(required) 
Are you human?:  


Enter the numbers above: