enterprise_refresh_index Sedang Tidur Koneksi MySQL

8

Ada kalanya pengindeks yang dijalankan oleh cron tampaknya macet di MySQL karena koneksi Sleeping dapat dilihat. Pengindeks berjalan selama beberapa jam dan ini sebenarnya tidak berjalan sama sekali. Saya telah mencari ini tetapi saya tidak dapat menemukan yang terkait. Adakah yang bisa menjelaskan? Kemungkinan konfigurasi server atau bug Magento?

pengguna1240207
sumber

Jawaban:

0

Apakah Anda menggunakan koneksi persisten? Berapa banyak koneksi tidur yang Anda miliki? Berapa jumlah maksimum koneksi yang terkonfigurasi oleh DB Server Anda?

Untuk memeriksa berapa banyak koneksi tidur yang baru saja Anda jalankan:

show full processlist;

Untuk melihat menjalankan max_connections:

show variables like 'max_connections';

Saya pikir koneksi tidur tidak menjadi masalah, mysqld akan memutuskan koneksi tidur berdasarkan 2 nilai:

interactive_timeout wait_timetout

Keduanya secara default 28800 detik (8 jam).

Anda dapat mengatur opsi ini di my.cnf (lokasi file ini berbeda di berbagai OS dan DB, percona, mysql, dll)

Juga lihat jawaban ini dari Administrator Database: https://dba.stackexchange.com/a/1559 dan jika Anda ingin tahu lebih banyak tentang cara men-debug asal koneksi tidur, periksa artikel yang bagus ini: https: // www. percona.com/blog/2007/02/08/debugging-sleeping-connections-with-mysql/

"Jika koneksi Anda persisten (dibuka melalui mysql_pconnect), Anda dapat menurunkan angka-angka ini ke sesuatu yang masuk akal seperti 600 (10 mnt) atau bahkan 60 (1 mnt). Atau, jika aplikasi Anda berfungsi dengan baik, Anda dapat meninggalkan default. Ini adalah terserah kamu."

Cobalah untuk menjalankan pengindeks dari konsol untuk melihat apakah itu menghasilkan beberapa kesalahan:

php shell/indexer info # this will output the list of indexes then
php shell/indexer --reindex {index_name}
lloiacono
sumber
Sayangnya, kami masih mendapatkan masalah ini. Saya menjalankan perintah show full process dan menampilkan pernyataan SQL yang sangat panjang dengan ID entitas terdaftar.
user1240207
0

konfigurasikan mysql-server Anda dengan mengatur batas waktu lebih pendek pada wait_timeoutdaninteractive_timeout

mysql> tampilkan variabel seperti "%timeout%";

+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| connect_timeout          | 5     |
| delayed_insert_timeout   | 300   |
| innodb_lock_wait_timeout | 50    |
| interactive_timeout      | 28800 |
| net_read_timeout         | 30    |
| net_write_timeout        | 60    |
| slave_net_timeout        | 3600  |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+
9 rows in set (0.00 sec)

Setel dengan:

set global wait_timeout=3;
set global interactive_timeout=3;

(dan juga diatur dalam file konfigurasi Anda, ketika server Anda restart)

Tetapi Anda merawat gejalanya alih-alih penyebab yang mendasarinya - mengapa koneksi terbuka? Jika skrip PHP selesai, bukankah harus ditutup? Pastikan server web Anda tidak menggunakan koneksi pooling ...

Charlie
sumber