Juni 24

Query untuk mencari kolom berdasarkan value

Malam yang dingin, diiringi kopi hangat, suasana yang sangat cocok untuk berbagi. Hari ini saya mendapatkan sebuah request untuk mencari tahu mengapa permasalahan beberapa data yang diminta oleh client. Namun, saya bukan ingin membahas permasalahan apa yang terjadi, tapi dalam pencarian permasalahan tersebut saya dihadapkan pada sebuah permasalahan lain. Apakah itu? Jreng…jreng…hehe…

Yuph, data yang saya dapat ini berada pada tabel apa sih? Kalaupun dapat tabelnya, di kolom apa? Saya pun berinisiatif untuk membuat sebuah Stored Procedure untuk memecahkan masalah saya itu. Nah, pada tulisan saya kali ini, saya ingin membagikan Stored Procedure yang telah saya buat tersebut. Mungkin bisa jadi teman-teman mengalami permasalahan yang sama. Berikut query full Stored Procedure saya :

Di sini coba saya jelaskan beberapa parameter yang digunakan dalam Stored Procedure tersebut :

  • DatabaseName : Parameter ini sifatnya mandatory. Teman-teman harus mengisi pencarian data tersebut akan dilakukan pada database apa.
  • Value : Parameter ini bersifat optional dengan default value nya string kosong. Parameter ini diisi dengan value yang akan dicari.
  • TableName : Parameter ini bersifat optional dengan default value nya null. Parameter ini diisi dengan nama tabel tempat akan dilakukan pencarian. Bila teman-teman tidak menggunakan parameter ini, maka secara default pencarian dilakukan pada semua tabel yang ada pada database yang teman-teman isi.
  • TableSchemaName : Parameter ini bersifat optional dengan default value nya dbo. Parameter ini diisi dengan nama skema tabel tempat akan dilakukan pencarian.

Untuk contoh cara penggunaannya saya akan membagi dengan beberapa case berikut :

  • Kita ingin mencari data dengan value ‘Pusporenggo’ di database Akademik berada pada kolom dan tabel apa. Pencarian dilakukan pada semua tabel dengan schema default yakni dbo, sehingga kita dapat mengetahui semua table beserta kolomnya yang memiliki value tersebut. Maka perintahnya akan menjadi berikut :

    Dan hasilnya akan seperti berikut :
    Sample 1
    Maka jika kita lakukan perintah SELECT dengan filter pada kolom tersebut di tabel tersebut, maka hasilnya akan seperti berikut :
    Result Sample 1

  • Kita ingin mencari data dengan value ‘Pusporenggo’ di database Akademik berada pada kolom apa. Pencarian dilakukan pada tabel siswa dengan schema default yakni dbo, sehingga kita dapat mengetahui semua kolom yang memiliki value tersebut. Maka perintahnya akan menjadi berikut :

    Dan hasilnya akan seperti berikut :
    Sample 2
    Maka jika kita lakukan perintah SELECT dengan filter pada kolom tersebut di tabel tersebut, maka hasilnya akan seperti berikut :
    Result Sample 2

Bila teman-teman kesulitan untuk menyalin query Stored Procedure saya, teman-teman juga dapat melakukan download querynya pada link berikut :

https://drive.google.com/file/d/1ZydC2zpmp1wSlAyh0ZIfOCuEHCNUJHWo/view?usp=sharing

Akhir kata, semoga tulisan saya dapat bermanfaat khususnya bagi yang mengalami permasalahan yang sama. Terima kasih dan selamat beristirahat…. 😀

 

 

Juni 18

Mencari History Query Yang Memperberat CPU

Di pagi yang cerah ini saya melihat-lihat blog dahulu. Dan ternyata, eh sudah 4 tahun lebih saya tidak membuat artikel, hmmm….

Setelah dpikir-pikir, sepertinya ini bermula saat saya mulai sibuk dalam pencarian rumah. Setelah rumah dapat, Alhamdulillah anak pun diberi/alias istri saya hamil. Namun, karena suatu kondisi penyakit sejak lahir, maka pengobatan panjang dimulai hingga anak saya berusia 1 tahun. Eh, kok malah curcol, hehe…

Oke, kita masuk kembali ke inti permasalahan yang akan saya bahas kali in. Next saya coba bagi pengalaman saya mengenai pengobatan panjang anak saya sejak lahir hingga sembuh. Namun kali ini saya coba sharing sedikit query untuk permasalahan yang saya hadapi dan mungkin juga teman-teman hadapi. Jadi, pada pekan lalu saat saya selesai bekerja, di grup kantor ramai dikarenakan ada sesuatu yang membuat CPU Server DB menjadi high hingga 90%. Nah, kita bingung ini aplikasi mana yang menyebabkan CPU Server DB high. Semua mencari mulai dari scheduler, job SQL, hingga aplikasi-aplikasi yang jalan pada saat jam tersebut. Lalu setelah terbantukan oleh paman Google, akhirnya setidaknya saya menemukan query untuk setidaknya membantu saya dalam proses pencarian query yang menyebabkan CPU high. Berikut query yang saya gunakan :

Pada last_execution_time teman-teman cukup filter query apa saya yang dieksekusi pada jam tersebut. Pada kasus saya (dalam hal ini yang saya eksekusi sekarang tanpa filter waktu eksekusi, dikarenakan saat kejadian saya g sempat untuk capturenya), berikut hasil yang akan tampil :

Query History Execution

Pada hasil di atas, kita dapat melihat query apa yang menyebabkan CPU saya sangat tinggi, yakni query teratas. Dimana di sini saya memakai total_worker_time untuk pengurutan. total_worker_time adalah jumlah waktu yang dihabiskan untuk menjalankan kueri sejak paket dikompilasi, misalnya : jika paket telah dijalankan 100 kali sejak dikompilasi, dan setiap kali dijalankan hingga 10 ms, total_worker_time akan menjadi 1000 ms. total_worker_time ini cocok digunakan untuk pengurutan kejadian terutama kejadian spike yang saya alami terhadap CPU Server DB saya.

Query yang saya gunakan ini disebut DMV (Dynamic Management Views). Kalau teman-teman mau tahu lebih lanjut apa itu DMV, apa saja views yg bisa digunakan, juga bagaimana cara penggunaannya, dan banyak lainnya, teman-teman bisa mengunjungi langsung artikel DMV tersebut di :

https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/execution-related-dynamic-management-views-and-functions-transact-sql?view=sql-server-ver15

Mungkin sekian dulu dari saya. Semoga sedikit tulisan ini bermanfaat buat teman-teman khususnya yang menngalami kejadian yang sama dengan saya.

Terima kasih & selamat bekerja.. 😀