web-dev-qa-db-ja.com

MySQL wait_timeout変数-グローバルとセッション

SHOW VARIABLES LIKE "%wait%"

Result: 28800

SET @@GLOBAL.wait_timeout=300

SHOW GLOBAL VARIABLES LIKE "%wait%"

Result: 300

SHOW SESSION VARIABLES LIKE "%wait%"

Result:28800

結果に混乱しています。最後のクエリがResult:28800を返すのはなぜですか?

50
Arunjith

セッションを開始するとセッションステータスが設定され、デフォルトでは現在のGLOBAL値を取得します。

SET @@GLOBAL.wait_timeout=300、その後再接続すると、表示されます

SHOW SESSION VARIABLES LIKE "%wait%";

Result: 300

同様に、いつでも

mysql> SET session wait_timeout=300;

あなたが得るだろう

mysql> SHOW SESSION VARIABLES LIKE 'wait_timeout';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 300   |
+---------------+-------+
63
Riedsio
SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 28800
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 28800

最初は、wait_timeout = 28800がデフォルト値です。セッション値を変更するには、セッション変数が読み取り専用であるため、グローバル変数を設定する必要があります。

SET @@GLOBAL.wait_timeout=300

グローバル変数を設定すると、セッション変数が自動的に値を取得します。

SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 300
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 300

次回サーバーが再起動すると、セッション変数はデフォルト値、つまり28800に設定されます。

追伸MySQL 5.6.16を使用しています

17
Anish Tangbe

Riedsio で述べたように、セッション変数は、特に設定しない限り、接続後に変更されません。グローバル変数を設定すると、次の接続のセッション値のみが変更されます。

たとえば、100の接続があり、グローバルwait_timeoutを下げると、既存の接続には影響せず、変数が変更された後の新しい接続のみに影響します。

ただし、wait_timeout変数については、ひねりがあります。インタラクティブモードでmysqlクライアントを使用している場合、またはmysql_real_connect()を介してCLIENT_INTERACTIVEが設定されたコネクタを使用している場合は、interactive_timeout@@session.wait_timeoutに設定されていることがわかります。

ここで、これを実証することができます:

> ./bin/mysql -Bsse 'select @@session.wait_timeout, @@session.interactive_timeout, @@global.wait_timeout, @@global.interactive_timeout' 
70      60      70      60

> ./bin/mysql -Bsse 'select @@wait_timeout'                                                                                                 
70

> ./bin/mysql                                                                                                                               
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.12-5 MySQL Community Server (GPL)

Copyright (c) 2009-2016 Percona LLC and/or its affiliates
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select @@wait_timeout;
+----------------+
| @@wait_timeout |
+----------------+
|             60 |
+----------------+
1 row in set (0.00 sec)

したがって、クライアントを使用してこれをテストしている場合、接続時に表示されるのはinteractive_timeoutであり、wait_timeoutの値ではありません

4
Cez