Hari ini situs web macet lagi, dan banyak tidur ditemukan
Penyebab tidur:
1 Program klien tidak memanggil mysql_close() sebelum keluar.
2 Klien telah tidur lebih dari wait_timeout atau interactive_timeout detik tanpa mengeluarkan permintaan apa pun ke server.
3 Program klien berakhir tiba-tiba di tengah transfer data
Jika jumlah proses tidur dalam periode yang sama terlalu tinggi, dan jumlah total koneksi di status lain melebihi nilai max_connection, maka MySQL tidak dapat lagi memproses permintaan apa pun kecuali pengguna root, tidak dapat membuat koneksi dengan permintaan apa pun, atau langsung hang
Solusi:
1. Pertama, periksa apakah program Anda menggunakan metode pconnect, dan kedua, periksa apakah mysql_close() dipanggil tepat waktu sebelum halaman dieksekusi. Cobalah untuk tidak menggunakan metode pconnect, yaitu menggunakan mysql_connect. Saat program dijalankan, mysql_close harus dipanggil secara eksplisit
2. Tambahkan wait_timeout dan interactive_timeout ke my.cnf, atur nilainya lebih kecil, secara default nilai wait_timeout adalah 8 jam, Anda dapat mengubahnya menjadi 1 jam, atau setengah jam. Dengan cara ini mysql akan mematikan koneksi mati lebih cepat. Cegah jumlah total koneksi melebihi nilai max_connection.
wait_timeout terlalu besar akan menyebabkan sejumlah besar proses SLEEP di MySQL dirilis tepat waktu, menyeret kinerja sistem, tetapi jika pengaturannya terlalu kecil, Anda mungkin mengalami masalah seperti "MySQL telah hilang"
Tetapkan nilai max_connection ke nilai yang lebih tinggi, tetapi ini jelas tidak sesuai, semakin banyak koneksi yang Anda miliki, semakin banyak tekanan yang ditimbulkannya pada server Anda. Faktanya, koneksi itu berlebihan, dan membunuhnya sesegera mungkin adalah kebijakan terbaik.
3. Analisis kueri SQL sistem langkah demi langkah, temukan SQL yang terlalu lambat, dan optimalkan
1) interactive_timeout: Arti parameter: Jumlah detik server menunggu aktivitas sebelum mematikan koneksi interaktif. Klien interaktif didefinisikan sebagai klien yang menggunakan opsi CLIENT_INTERACTIVE di mysql_real_connect(). Parameter default: 28800 detik (8 jam)
(2)wait_timeout: Arti parameter: Jumlah detik server menunggu aktivitas sebelum menutup koneksi non-interaktif. Saat utas dimulai, nilai wait_timeout sesi diinisialisasi berdasarkan nilai wait_timeout global atau interactive_timeout global, tergantung pada jenis klien (ditentukan CLIENT_INTERACTIVE opsi koneksi mysql_real_connect()). Parameter default: 28800 detik (8 jam)
Ada batas atas jumlah maksimum koneksi yang dapat didukung MySQL Server, karena setiap koneksi dibuat dan menghabiskan memori, jadi kami mengharapkan klien untuk memutuskan dan mengosongkan memori yang ditempati setelah terhubung ke MySQL Server untuk menangani operasi yang sesuai. Jika Server MySQL Anda memiliki sejumlah besar koneksi idle, tidak hanya akan menghabiskan memori dengan-, tetapi jika koneksi terus terakumulasi dan terbuka, mereka pada akhirnya akan mencapai jumlah maksimum koneksi di MySQL Server, yang akan melaporkan kesalahan 'terlalu banyak koneksi'. Pengaturan nilai wait_timeout harus dinilai sesuai dengan pengoperasian sistem. Setelah sistem berjalan untuk jangka waktu tertentu, Anda dapat memeriksa status koneksi sistem saat ini melalui perintah show processlist, jika Anda menemukan sejumlah besar proses yang terhubung dalam keadaan tidur, itu berarti pengaturan parameter terlalu besar, dan Anda dapat melakukan penyesuaian yang sesuai untuk membuat penyesuaian yang lebih kecil.
Perintah SQL:
Metode modifikasi ini ada diSetelah memulai ulang layanan mysql, itu akan menjadi tidak valid, jadi yang terbaik adalah mengonfigurasi kedua properti ini dalam file konfigurasi MySQL.
Ubah file my.cnf di bawah Linux:
|