MySQL wait timeout Variable-GLOBAL vs SESSION
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
je suis confus par les résultats. Pourquoi la dernière requête donner le Résultat:28800 ?
3 réponses
le statut de votre session est défini une fois que vous démarrez une session, et par défaut, prenez la valeur globale courante.
si vous avez déconnecté après avoir fait SET @@GLOBAL.wait_timeout=300
, puis reconnecté, vous verriez
SHOW SESSION VARIABLES LIKE "%wait%";
Result: 300
de Même, à tout moment, si vous n'avez
mysql> SET session wait_timeout=300;
Vous avez
mysql> SHOW SESSION VARIABLES LIKE 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 300 |
+---------------+-------+
SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 28800
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 28800
Au premier abord, wait_timeout = 28800 qui est la valeur par défaut. Pour modifier la valeur de session, vous devez définir la variable globale parce que la variable de session est en lecture seule.
SET @@GLOBAL.wait_timeout=300
après avoir défini la variable globale, la variable session saisit automatiquement la valeur.
SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 300
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 300
la prochaine fois que le serveur redémarre, les variables de session seront définies à la valeur par défaut soit 28800.
P. S. je m en utilisant MySQL 5.6.16
tel que noté par Riedsio, les variables de session ne changent pas après la connexion à moins que vous ne les positionniez spécifiquement; le réglage de la variable globale ne modifie que la valeur de la session de votre connexion suivante.
Par exemple, si vous avez 100 connexions et vous réduisez le mondial wait_timeout
alors il n'affectera pas les connexions existantes, seulement les nouvelles après que la variable a été changée.
spécifiquement pour le wait_timeout
variable si, il y a une torsion.
Si vous êtes à l'aide de la mysql
client en mode interactif, ou le connecteur avec CLIENT_INTERACTIVE
définir à l'aide de mysql_real_connect()
alors vous verrez le interactive_timeout
set @@session.wait_timeout
Ici vous pouvez voir une démonstration:
> ./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)
Donc, si vous testez cette utilisation du client, c'est le interactive_timeout
que vous verrez lors de la connexion et pas de la valeur de wait_timeout