<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>さくらたんどっとびーず &#187; CGI</title>
	<atom:link href="http://sakuratan.biz/archives/category/cgi/feed" rel="self" type="application/rss+xml" />
	<link>http://sakuratan.biz</link>
	<description>モロモロ工事中です</description>
	<lastBuildDate>Sun, 25 Jun 2023 12:51:51 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>MySQL のコネクションタイムアウトと削除されたプロセスのコネクションの残留</title>
		<link>http://sakuratan.biz/archives/1624</link>
		<comments>http://sakuratan.biz/archives/1624#comments</comments>
		<pubDate>Sat, 06 Feb 2010 00:42:45 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[CGI]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=1624</guid>
		<description><![CDATA[だいぶ前にロプローから MySQL データベースのコネクションの生存期間について聞かれてたんですが、返事するの忘れてたので今頃ブログ書いてます。どっちかって言うと忘れてたというよりは、手元の環境で問題が再現できないので放置してた感じですがw まず MySQL コネクションはデフォルト 8 時間でタイムアウトします。 関係しているシステムパラメータは wait_timeout か interacti... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/1624">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>だいぶ前にロプローから MySQL データベースのコネクションの生存期間について聞かれてたんですが、返事するの忘れてたので今頃ブログ書いてます。どっちかって言うと忘れてたというよりは、手元の環境で問題が再現できないので放置してた感じですがw</p>
<p style="margin-top:2em">まず MySQL コネクションはデフォルト 8 時間でタイムアウトします。</p>
<p>関係しているシステムパラメータは wait_timeout か interactive_timeout のいずれかです。CGI の場合は通常 wait_timeout が関係します。詳細は <a href="http://dev.mysql.com/doc/refman/5.1/ja/server-system-variables.html">http://dev.mysql.com/doc/refman/5.1/ja/server-system-variables.html</a> をご覧ください。</p>
<p style="margin-top:2em">システムパラメータの確認は SHOW VARIABLES コマンドで行えます。以下はポックン家のテスト用環境の値です。</p>
<pre>
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)
</pre>
<p>28800 秒なので 8 時間です。</p>
<p style="margin-top:2em">元々聞かれていたのは、「CGI プロセスをkill した際にデータベースコネクションが残ったままになることがあるか？」というような内容だったのですが、以下の手順で似たような現象を確認できます。（MySQL 5.0.67）</p>
<ol>
<li>あるプロセスがテーブルをロックしたままの状態になる</li>
<li>他のプロセスがロックされたテーブルを参照しようとし、1. のロックが解除されるのを待つ状態となる</li>
<li>2 のプロセスを kill -9 するとプロセスは消えるが、データベースコネクションはロック待ちの状態のまま残る</li>
</ol>
<p>ロック待ちのまま残ったコネクションは、1. のテーブルのロックが解除されると切断されます。ロック待ちのコネクションが切断されるまでの間、各コネクションはサーバのコネクションプールを消費します。従って、2. と同じ処理を行うプロセスが増えるとすべてロック待ちとなり、最終的に max_connections を越えるとデータベースに接続できなくなります。</p>
<p>他の原因により同様の事象が発生するかを確認してませんのでもうちょっと調べた方が良いような気もしますが、kill してもコネクションが残る状態自体は発生し得るようでしたのでとりあえずご報告ということで。（テーブルのロックは LOCK TABLE WRITE コマンドで発生させたのですが、MyISAM を使用している場合、テーブルロックを長時間持続させることはレアケースだとと思いますので、もうちょっと一般的な状況で発生させる方法が無いか調べた方が良いという感じです。）</p>
<p style="margin-top:2em">ちなみに MySQL の接続中のコネクションは SHOW PROCESSLIST コマンドで、ロック中のテーブルは SHOW OPEN TABLES コマンドで確認できます。</p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/1624/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
