さんまがおいしい季節だねー(´・ω・`)

MySQL のコネクションタイムアウトと削除されたプロセスのコネクションの残留

CGI — タグ: — さくら @ 2010/02/06 9:42

だいぶ前にロプローから MySQL データベースのコネクションの生存期間について聞かれてたんですが、返事するの忘れてたので今頃ブログ書いてます。どっちかって言うと忘れてたというよりは、手元の環境で問題が再現できないので放置してた感じですがw

まず MySQL コネクションはデフォルト 8 時間でタイムアウトします。

関係しているシステムパラメータは wait_timeout か interactive_timeout のいずれかです。CGI の場合は通常 wait_timeout が関係します。詳細は http://dev.mysql.com/doc/refman/5.1/ja/server-system-variables.html をご覧ください。

システムパラメータの確認は SHOW VARIABLES コマンドで行えます。以下はポックン家のテスト用環境の値です。

mysql> SHOW VARIABLES LIKE '%_timeout';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 10    |
| delayed_insert_timeout     | 300   |
| innodb_lock_wait_timeout   | 50    |
| innodb_rollback_on_timeout | OFF   |
| interactive_timeout        | 28800 |
| net_read_timeout           | 30    |
| net_write_timeout          | 60    |
| slave_net_timeout          | 3600  |
| table_lock_wait_timeout    | 50    |
| wait_timeout               | 28800 |
+----------------------------+-------+
10 rows in set (0.00 sec)

28800 秒なので 8 時間です。

元々聞かれていたのは、「CGI プロセスをkill した際にデータベースコネクションが残ったままになることがあるか?」というような内容だったのですが、以下の手順で似たような現象を確認できます。(MySQL 5.0.67)

  1. あるプロセスがテーブルをロックしたままの状態になる
  2. 他のプロセスがロックされたテーブルを参照しようとし、1. のロックが解除されるのを待つ状態となる
  3. 2 のプロセスを kill -9 するとプロセスは消えるが、データベースコネクションはロック待ちの状態のまま残る

ロック待ちのまま残ったコネクションは、1. のテーブルのロックが解除されると切断されます。ロック待ちのコネクションが切断されるまでの間、各コネクションはサーバのコネクションプールを消費します。従って、2. と同じ処理を行うプロセスが増えるとすべてロック待ちとなり、最終的に max_connections を越えるとデータベースに接続できなくなります。

他の原因により同様の事象が発生するかを確認してませんのでもうちょっと調べた方が良いような気もしますが、kill してもコネクションが残る状態自体は発生し得るようでしたのでとりあえずご報告ということで。(テーブルのロックは LOCK TABLE WRITE コマンドで発生させたのですが、MyISAM を使用している場合、テーブルロックを長時間持続させることはレアケースだとと思いますので、もうちょっと一般的な状況で発生させる方法が無いか調べた方が良いという感じです。)

ちなみに MySQL の接続中のコネクションは SHOW PROCESSLIST コマンドで、ロック中のテーブルは SHOW OPEN TABLES コマンドで確認できます。

2件のコメント »

  1. cNiGHKwrtzoZCzgANC 4268

    コメント by BGFllhHhdhQYWTv — 2014 年 10 月 5 日 @ 17:40
  2. どうも。
    大人の男性のための恋愛や
    えっちのテクニックや熟練度をつけるめっちゃ最適な情報商材が特集されているサイト見つけたよ!

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2017 さくらたんどっとびーず | powered by WordPress with Barecity