DataBase MySQL

MySQLのwait_timeout

投稿日:2012年12月7日 更新日:

データベースやWebサーバーは、実際に稼働してから問題が多発します。
データ量が増えてきたり、アクセスが増えてきたらまずレスポンスの問題が発生するでしょう。

経験のあるエンジニアがいれば、十分なテストを行ってから稼働するわけですが、なかなかそうもいきません。

今回のテーマはMySQLのwait_timeoutの設定です。
なぜハマってしまうかというと、グローバル変数のwait_timeoutがそのまま個々のセッションのwait_timeoutになるとは限らないからです。

結論からいいますと、

プロセス生成時にグローバル変数のinteractive_timeoutかwait_timeout
が、セッション変数のwait_timeout に反映されます。
そして、どちらが反映されるかは、mysqlのAPI呼出し時に対話型クライアントの定義かどうかできまります。

MySQLサーバーと、サーバ接続を開始するAPI、mysql_real_connect() を呼び出す際、
CLIENT_INTERACTIVE オプションを指定したものが対話型でinteractive_timeout を使用します。
それ以外はwait_timeout がそのままセッション変数のwait_timeoutとなります。

つまり、MySQLと接続するアプリケーションの実装方法によるわけです。
いくらMySQL QueryBrowserのwait_timeoutを確認しても、
問題となっているアプリは別の実装をしてinteractive_timeoutを使用している可能性があります。

結果として、セッション変数のwait_timeout はそのままアイドル状態で破棄されるまでの時間になりますが、
セッション変数のinteractive_timeoutは、実際には使用されません。

注意①
SET GLOBAL で設定したときは、
my.confの設定に追加するのを忘れないようにして下さい。
データベースを再起動すると、デフォルト値に戻ってしまいます。

注意②
容易に想像ができると思いますが、
set global session wait_timeout=5;
でグローバル変数を変更しても、そのセッション変数は変更されないので注意が必要です。
グローバル変数を変更して変更されるのは、その後の新いセッションに対してです。

注意③
あまりwait_timeouを短くしてしまうと、バッチ処理ではタイムアウトが発生する可能性があります。
逆に、APIサーバー等で一瞬の処理を行うにも関わらず、セッションが残ってしまうとtoo many connection
のエラーが発生します。

注意④
デフォルトのinteractive_timeoutとwait_timeoutは同じ値が設定されています。
要するに、この設定の使い方を知らなければ2つ設定がある意味はありません・・・。

MySQLの設定は、あんまり多くありませんし、Webで資料もたくさん見つかります。
が、実際に問題に直面しないとなかなか注意が行き届かないんですよね・・・。

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL

執筆者:

関連記事

mysql

utilitiesのmysqlfailoverを使う(2)

前回の utilitiesのmysqlfailoverを使う(1)で設定・起動は完了しています。 私の目的は2台のMySQLサーバーを定期的に入れ替えてメンテナンスすることです。 今回はマスターがダウ …

mysql

MySQLで相関サブクエリを実行する

相関サブクエリとは、SQLの実行結果の行と行を比較することです。 ある行とある行の時間差を求めることで何秒間隔でデータが登録されているかがわかったり、 ある行とある行の売上差を求めることで、売上の上が …

mysql

MySQLのデータ構造

MySQLのインストールは簡単ですが、 ディレクトリ構造を知っておくことは障害対応にも必要ですのでまとめです。 MYSQLのデータ構成 /etc/my.cnfでメインディレクトリやソケット(mysql …

sqlserver

「.NET」と「ASP.NET」からのSQL Serverへのコネクションを確認する(2)

「.NET」と「ASP.NET」からの接続には大きな違いがあります。 それは普通の?(exe形式の)アプリケーションか、Webアプリケーションかです。 この違いはアプリの終了というタイミングに大きく影 …

sqlserver

SQL Server 構成マネージャーを起動する

SQL Server 構成マネージャーがない。 何故か、コンピューターの管理の中に入っていた。 また検索窓からは以下のように検索できる。 ・SQL Server 2014 の場合   SQLServe …