Cara Kill Mysql / mariDB Proses Query di Linux
Disaat menemukan kejanggalan pada proses mysql cara tercepat adalah kill mysql proses agar tidak memakan banyak sumber daya server. Kasus paling seting terjadi banyaknya tumpukan proses mysql menyebabkan kinerja server melambat dikarenakan sumber daya terpakai semua. Pada akhirnya ketika server load user tidak bisa melakukan interaksi ke database mysql. Dalam keadaan ini perlu menentukan dan kill mysql proses.
Didalam Linux untuk melakukan kill proses list dalam menggunakan perintah
# mysqladmin pr kill 'ThreatID'
atau
# mysqladmin processlist kill 'ThreatID'
Tapi sebelum itu harus diketahui terlebih dahulu ID dari psroses sql yang sedang berjalan. Mari simak langkah berikutnya mendapatkan Thread ID proses sql.
Mendapatkan Thread ID
Untuk mendapatkan Thread ID (TID) dari sebuah proses MySQL, Anda dapat menggunakan beberapa cara berbeda, tergantung pada lingkungan dan tujuan Anda. Berikut adalah beberapa metode yang digunakan di Linux OS.
- Cara pertama melalui tool processlist, contoh penggunaan melalui terminal shell dapat dilihat dibawah ini.
# mysqladmin processlist
atau
# mysqladmin pr
atau melalui msyql
mysql -e "show full processlist;"
kedua cara diatas akan menghasilkan tampilan output yang sama seperti dibawah ini.
2. Cara kedua Meggunakan perintah sql, Perintah ini bisa dijalan setelah masuk ke dala mdatabase mysql atau mariadb terlebih dahulu. Perintah sql berikut menampilkan semua isi table yang ada di INFORMATION_SCHEMA.PROCESSLIST.
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
atau menggunakan opsi -e untuk untuk menjalankannya langsung dari terminal.
# msyql -e "SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST"
Contoh penggunaan untuk menampikan data spesifik, Seperti ingin menampilkan semua proseslist dari user tertentu dengan tabel seperti ID | COMMAND | TIME | MEMORY_USED | INFO. Perintanya sqlny adalah sebagai berikut.
# mysql -e "SELECT ID,COMMAND,TIME,MEMORY_USED,INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'sobit_wp9965'"
Outputnya.
# mysql -e "SELECT ID,COMMAND,TIME,MEMORY_USED,INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'sobit_wp9965'"
+---------+---------+------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ID | COMMAND | TIME | MEMORY_USED | INFO |
+---------+---------+------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 6984367 | Query | 800 | 2287200 | UPDATE wpcm_actionscheduler_actions SET claim_id=780002, last_attempt_gmt='2023-09-14 09:52:35', last_attempt_local='2023-09-14 09:52:35' WHERE claim_id = 0 AND scheduled_date_gmt <= '2023-09-14 09:52:35' AND status='pending' ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC LIMIT 25 |
| 6984355 | Query | 700 | 2287200 | UPDATE wpcm_actionscheduler_actions SET claim_id=780001, last_attempt_gmt='2023-09-14 09:52:34', last_attempt_local='2023-09-14 09:52:34' WHERE claim_id = 0 AND scheduled_date_gmt <= '2023-09-14 09:52:34' AND status='pending' ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC LIMIT 25 |
| 6984354 | Query | 2 | 2186280 | UPDATE wpcm_actionscheduler_actions SET attempts = attempts+1, status='in-progress', last_attempt_gmt = '2023-09-14 09:52:43', last_attempt_local = '2023-09-14 09:52:43' WHERE action_id = 820438 |
+---------+---------+------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Dari hasil output nya ada proses yg memiliki waktu yang sangat panjang seperti id 6984355 dan 6984367.
Kill Mysql ID Proses.
Setelah mendapatkan ID maka lanjutnya untuk kill dengan contoh perintah berikut ini.
# mysqladmin pr kill '6984355'
# mysqladmin pr kill '6984367'
Ketika di cek kembali proses sudah hilang dari proseslist
# mysql -e "SELECT ID,COMMAND,TIME,MEMORY_USED,INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'sobit_wp9965'"
+---------+---------+------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ID | COMMAND | TIME | MEMORY_USED | INFO |
+---------+---------+------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 6984354 | Query | 20 | 2186280 | UPDATE wpcm_actionscheduler_actions SET attempts = attempts+1, status='in-progress', last_attempt_gmt = '2023-09-14 09:52:43', last_attempt_local = '2023-09-14 09:52:43' WHERE action_id = 820438 |
+---------+---------+------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Kill proses mysql/mariaDB sacara masal.
Untuk menghapus ID secara masal jika menggunakan cara diatas akan memakan waktu yang lama karena satu per satu id harus dihapus melalui terminal. Cara terbaik adalah menyimpan hasil ID yang diinginkan kedalam file dan dilakukan
Dalam contoh ini menyimpan id dari database information_schema.PROCESSLIST dimana memiliki time lebih dari 500 dan disimpan ke dalam file process_ids.txt
# mysql -u root -e "SELECT ID FROM information_schema.PROCESSLIST WHERE TIME >= 500" | awk 'NR>1 {print $1}' > process_ids.txt
jika dilihat filenya akan berisi ID
more process_ids.txt
2541
2450
2387
2362
2349
Dan untuk melakukannya bisa menggunaan perulangan while do seperti dibawah dengan input file process_ids.txt.
# while read -r process_id; do mysqladmin -u root processlist kill "$process_id"; done < process_ids.txt
Kesimpulan
Dengan membaca artikel tutorial ini kalian bisa menerapkan untuk memanajemen qurey roses sql yang sedang berjalan untuk di kill jika memang menggangu seperti memakan waktu yang lama dan resource memory yang besar. Hal ini perlu dilakukan jika sql sudah terlanjut dieksekusi agar tidak membebankan server.