Kami mengalami masalah dengan pengguna yang menjalankan kueri / tampilan di Drupal yang terkadang menyebabkan situs kami membeku. Pembekuan terjadi karena permintaan menyebabkan jumlah koneksi basis data naik hingga 400+ dan pada dasarnya kapan saja situs berjalan lebih dari 100 koneksi basis data situs melambat sangat dan hanya tidak merespon.
Kami menjalankan Amazon RDS menggunakan MySQL Red Hat Linux
Kami memiliki EC2 yang cukup besar di server aplikasi ujung depan, dan RDS yang cukup besar.
Cara kami memperbaiki masalah ini sekarang adalah dengan menemukan kueri yang menyinggung, dan membunuhnya. Setelah kueri terbunuh ... koneksi basis data kami turun menjadi sekitar 20 yang merupakan jumlah normal yang Anda lihat saat memantau statistik situs.
Apakah ada cara untuk menghentikan permintaan yang menyinggung dan membunuhnya sebelum berjalan terlalu lama dan menghabiskan koneksi? Saya mencoba untuk mengotomatiskan pembunuhan permintaan buruk sebelum itu terjadi, atau setidaknya menyadari setelah 30 detik itu permintaan yang buruk dan membunuhnya.
sumber
Jawaban:
Berikut adalah Prosedur Tersimpan untuk membunuh SELECT yang sudah berjalan lama
Untuk membunuh SELECT berjalan lebih dari 30 detik, Anda menjalankan ini
Jika Anda ingin melihat koneksi mati, Anda menjalankan ini
Mungkin Anda dapat membuat Acara MySQL untuk memanggil Prosedur Tersimpan ini setiap menit.
Jika Amazon tidak membiarkan Anda memiliki hak istimewa ACARA , Anda harus menulis skrip shell eksternal pada server EC2 untuk terhubung ke DB dan menjalankan Prosedur Tersimpan. Script shell itu bisa dimasukkan ke dalam crontab.
Jika Amazon tidak membiarkan Anda memiliki hak istimewa PROSES dan SUPER , Anda mungkin perlu memindahkan DB dari RDS dan ke mesin EC2 lain yang menjalankan MySQL untuk melakukannya. Anda kemudian dapat membuat Acara MySQL tanpa batasan hosting Amazon.
sumber