Sleeping接続が確認できるため、cronによって実行されるインデクサーがMySQLでスタックしているように見えることがあります。インデクサーは数時間実行されますが、実際にはまったく実行されていません。これを検索しましたが、関連するものは見つかりませんでした。光を当てることができる誰か?おそらくサーバー構成またはMagentoのバグですか?
Sleeping接続が確認できるため、cronによって実行されるインデクサーがMySQLでスタックしているように見えることがあります。インデクサーは数時間実行されますが、実際にはまったく実行されていません。これを検索しましたが、関連するものは見つかりませんでした。光を当てることができる誰か?おそらくサーバー構成またはMagentoのバグですか?
回答:
永続的な接続を使用していますか?スリープ接続はいくつありますか?DBサーバーが許可するように構成されている接続の最大数はいくつですか?
実行したスリープ接続の数を確認するには:
show full processlist;
max_connectionsを実行するには:
show variables like 'max_connections';
スリープ接続は問題ではないと思います。mysqldは2つの値に基づいてスリープ接続をタイムアウトします。
interactive_timeout wait_timetout
デフォルトはどちらも28800秒(8時間)です。
これらのオプションはmy.cnfで設定できます(このファイルの場所は、OSやDB、percona、mysqlなどによって異なります)
また、データベース管理者からこの回答を参照してください。https://dba.stackexchange.com/a/1559を:あなたが眠っている接続の起源をデバッグする方法の詳細お知りになりたい場合は、この優れた記事チェックします。https:// WWW。 percona.com/blog/2007/02/08/debugging-sleeping-connections-with-mysql/
「接続が永続的である(mysql_pconnectを介して開かれている)場合は、これらの数値を600(10分)または60(1分)などの妥当な値に下げることができます。または、アプリが正常に動作する場合は、デフォルトのままにできます。これはあなた次第。"
コンソールからインデクサーを実行して、エラーが出力されるかどうかを確認します。
php shell/indexer info # this will output the list of indexes then
php shell/indexer --reindex {index_name}
短いタイムアウトを設定してmysql-serverを構成しwait_timeout
、interactive_timeout
mysql>は次のような変数を表示します"%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)
設定:
set global wait_timeout=3;
set global interactive_timeout=3;
(また、サーバーの再起動時のために、構成ファイルで設定します)
しかし、根本的な原因ではなく症状を治療しています-なぜ接続が開いているのですか?PHPスクリプトが終了したら、閉じないでください。Webサーバーが接続プールを使用していないことを確認してください...