Haruskah saya khawatir tentang proses status tidur mysql di daftar proses

11

Selama operasi situs web, dalam daftar proses mysql, saya melihat beberapa proses dengan kolom "perintah" yang ditandai sebagai "SLEEP".

Haruskah saya khawatir? Bagaimana cara menghentikannya?

Hai
sumber

Jawaban:

17

Bahkan yang paling kuat sekalipun kadang perlu tidur. Tanpa tidur orang menjadi cemas dan susah tidur dapat menyebabkan semua jenis gejala serius.

Lebih serius: kondisi tidur berarti proses MySQL telah selesai dengan permintaannya, tetapi sisi klien belum keluar. Banyak aplikasi web yang tidak membersihkan koneksinya setelah itu, yang menyebabkan proses MySQL menjadi tidak aktif. Jangan khawatir jika hanya ada beberapa di antaranya; MySQL akan membersihkannya setelah periode waktu habis yang dapat dikonfigurasi (wait_timeout).

Atau jika aplikasi web Anda menggunakan koneksi terus-menerus dan pooling koneksi, maka sangat normal untuk memiliki bahkan banyak proses tidur: dalam hal itu aplikasi Anda hanya terbuka misalnya 100 koneksi SQL dan membuatnya tetap terbuka. Itu mengurangi overhead pembukaan / penutupan koneksi. Kecuali jika aplikasi Anda sangat sibuk, itu normal bahwa hampir tidak setiap proses SQL memiliki sesuatu untuk dilakukan, sehingga mereka tidur.

Janne Pikkarainen
sumber
5

Tidak, jangan khawatir tentang mereka kecuali Anda memiliki ribuan. Biasanya mereka menunjukkan koneksi database yang saat ini tidak melakukan apa-apa, tetapi sebaliknya masih hidup.

Banyak situs web dibangun sedemikian rupa sehingga pada awal pemrosesan suatu halaman, koneksi basis data dibuka, kemudian digunakan sepanjang pembuatan halaman dan akhirnya dibuang di bagian akhir. Jika membuang dilakukan dengan benar, koneksi database ditutup dan server kemudian akan mematikan utas yang relevan, yang berarti koneksi ini menghilang dari daftar proses.

Jika koneksi tidak ditutup, mungkin tetap dalam kondisi "TIDUR" sampai habis. Dalam hal ini, Anda mungkin berakhir dengan banyak proses tidur. tetapi kecuali jika Anda mengalami masalah memori pada server db, ini bukan masalah besar juga.

wolfgangsz
sumber
3

Sebelum meningkatkan variabel max_connections, Anda harus memeriksa berapa banyak koneksi non-interaktif yang Anda miliki dengan menjalankan perintah show processlist.

Jika Anda memiliki banyak koneksi sleep, Anda harus mengurangi nilai variabel "wait_timeout" untuk menutup koneksi non-interaktif setelah menunggu beberapa kali.

  • Untuk menampilkan nilai wait_timeout:
TAMPILKAN SESI VARIABEL SEPERTI 'wait_timeout';

+ --------------- + ------- +
| Variable_name | Nilai |
+ --------------- + ------- +
| wait_timeout | 28800 |
+ --------------- + ------- +

nilainya di kedua, itu berarti koneksi non-interaktif masih hingga 8 jam.

  • Untuk mengubah nilai variabel "wait_timeout":
SET sesi wait_timeout = 600;
Kueri OK, 0 baris terpengaruh (0,00 dtk)

Setelah 10 menit jika koneksi sleep masih tertidur mysql atau MariaDB menjatuhkan koneksi itu.

S.Bao
sumber