| |

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.

  1. 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.

processlist for get id to kill mysql

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.

Similar Posts

5 1 vote
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments