Saya mencari skrip bash yang teruji dengan baik (atau solusi alternatif) untuk melakukannya, untuk menghindari max_connection menjadi habis. Saya tahu itu melawan gejala, tetapi benar-benar membutuhkan skrip seperti solusi jangka pendek.
linux
mysql
query
kill-process
alfish
sumber
sumber
Jawaban:
lihat perintah pt-kill dari perkona toolkit .
dan .. mulailah memonitor sistem Anda - munin , kaktus dengan templat kaktus yang lebih baik untuk mysql , apa pun sehingga Anda mendapatkan ide tentang apa yang terjadi. mencatat permintaan lambat mysql akan menjadi ide yang bagus juga.
sumber
Jika Anda memiliki MySQL 5.1 di mana daftar proses ada di INFORMATION_SCHEMA, Anda dapat melakukan ini untuk menghasilkan perintah KILL QUERY dalam jumlah besar dari dalam klien mysql untuk kueri yang berjalan lebih dari 20 menit (1200 detik):
Anda bisa melakukan klausa WHERE terhadap bidang INFO untuk mencari kueri tertentu, bidang TIME terhadap kueri yang sudah berjalan lama, atau bidang DB terhadap database tertentu.
Jika Anda root @ localhost, Anda harus memiliki hak penuh untuk menjalankan ini sebagai berikut
Anda dapat crontab ini sebagai berikut:
Berikut variasi lainnya:
BTW Anda tidak harus menentukan myDB karena saya secara eksplisit membaca dari information_schema.processlist sebagai nama tab yang sepenuhnya memenuhi syarat.
Ini adalah demonstrasi dari apa yang harus Anda lihat. Untuk contoh ini, saya akan mengulangi perintah KILL dari semua proses yang waktunya> 20000 detik:
Saya telah melakukan teknik ini selama 5 tahun terakhir. Bahkan, saya mengirimkan jawaban ini ke DBA StackExchange tahun lalu dan diterima .
sumber
Saya menemukan potongan kode berikut di sini :
Pembaruan 2013-01-14: Ada petunjuk anonim bahwa ini berpotensi berbahaya dan dapat membunuh proses replikasi juga. Jadi gunakan dengan risiko Anda sendiri:
sumber
MySQL 5.7 dan seterusnya Anda dapat menggunakan variabel max_execution_time untuk menyelesaikan ini secara otomatis untuk semua permintaan baca "SELECT".
sumber
Saya tidak akan mencoba solusi bash jika Anda suka waktu aktif!
Jika Anda memiliki akses ke kode Anda sebenarnya dapat mengatur waktu eksekusi maksimum pada pernyataan SELECT menggunakan metode yang diuraikan di sini :
Jika tidak, di server:
/programming/415905/how-to-set-a-maximum-execution-time-for-a-mysql-query
Pasang pt-kill:
Ambil snapshot dari daftar proses Anda:
Uji pt-kill pada snapshot:
Pastikan aturan kecocokan cocok dengan kasus Anda. Ini di atas akan membunuh semua pernyataan Jalankan lebih dari 45 detik. Setelah Anda yakin maka modifikasi dan jalankan perintah ini untuk menjalankan pernyataan pada interval 10 detik:
sumber