Rabu, 30 Januari 2013

Melihat Query yang sedang berjalan di PostgreSQL


Setiap hari saya menyempatkan diri untuk memonitor kondisi database PostgreSQL.  Salah satu rutinitasnya adalah  memonitor Query apa saja yang sedang berjalan di database. Apakah ada query yang prosesnya lama dan di luar kebiasaan ? jikalau ada, maka query tersebut harus diperiksa untuk melihat apa yang menyebabkannya menjadi berjalan lambat. Saya memakai script kecil untuk melihat proses query apa saja yang sedang berjalan di postgresql. Berikut scriptnya :

watch -n 0.5 "psql -h 127.0.0.1 -U postgres -p 5433 -d my_db -c 'SELECT datname,procpid,current_query FROM pg_stat_activity;' | grep -v IDLE | grep -v 'SELECT datname,procpid,current_query FROM pg_stat_activity;' | grep -v ^\( | grep -v 'datname | procpid ' | grep -v -- '-----------+---------+-' "

Script ini saya letakkan di server database di linux, dan saya jalankan setiap kali ingin melakukan monitoring. Untuk keluar cukup pakai Ctrl-X atau Ctrl-Z. Hasilnya kira kira akan seperti ini :

----------+---------+-------------------------------------------------------------                              my_db | 9162 | select * from my_bigtable where ... 
Bagaimana cara saya memonitornya ? Saya cukup menjalankan script ini dan memperhatikan pergerakan perintah query. Script ini akan refresh setiap 0.5 detik, cukup untuk melihat pergerakan query yang muncul dan menghilang. Apabila saya melihat ada query yang tidak segera menghilang setelah sekian lama maka itulah saat untuk melakukan tuning.

Berdasarkan contoh diatas, saya query terhadap salah satu tabel yang memiliki jumlah record yang sangat banyak. ID Process di linux yang terlihat adalah 9162 sebelum kemudian menghilang. Terlihat bahwasannya querynya terpotong atau terlalu panjang untuk muncul di layar. Bagaimana cara untuk mendapatkan querynya ? anda harus melihat id process di linux, kemudian cek di postgresql untuk melihat perintah query lengkapnya, dengan memakai perintah sebagai berikut :
SELECT datname,usename,procpid,client_addr,waiting,query_start,current_query FROM pg_stat_activity where procpid = 9162; 
Setelah dapat querynya, silahkan melakukan tuning terhadap query tersebut. Bagaimana dengan anda ? apakah ada cara yang lain ? mohon infonya.


Sumber : nareswara.com

0 komentar:

Posting Komentar