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 ?

45
demandé sur Riedsio 2010-12-14 17:44:14

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   |
+---------------+-------+
58
répondu Riedsio 2010-12-14 21:56:51
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

15
répondu Anish Tangbe 2015-03-17 05:47:45

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

3
répondu Cez 2017-08-26 21:58:01