Переменная MySQL wait_timeout - GLOBAL vs SESSION - PullRequest
50 голосов
/ 14 декабря 2010
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

Я смущен результатами. Почему последний запрос дает Результат: 28800?

Ответы [ 3 ]

63 голосов
/ 15 декабря 2010

Ваш статус сеанса устанавливается, как только вы начинаете сеанс, и по умолчанию принимайте текущее значение 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   |
+---------------+-------+
17 голосов
/ 17 марта 2015
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.

P.S. Я использую MySQL 5.6.16

4 голосов
/ 21 июня 2016

Как отмечает Riedsio , переменные сеанса не изменяются после подключения, если вы не установили их отдельно;установка глобальной переменной только изменяет значение сеанса вашего следующего соединения.

Например, если у вас есть 100 подключений, и вы опускаете глобальное wait_timeout, это не повлияет на существующие подключения, только на новые после изменения переменной.

Специально для *Переменная 1008 *, хотя, есть поворот.Если вы используете mysql клиент в интерактивном режиме или разъем с CLIENT_INTERACTIVE, установленным через mysql_real_connect(), тогда вы увидите 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...