mysql - recommended - wait_timeout mariadb
MySQL wait_timeout Variable-GLOBAL vs SESSION (3)
Como señaló Riedsio , las variables de la sesión no cambian después de conectarse a menos que las establezca específicamente; establecer la variable global solo cambia el valor de la sesión de su próxima conexión.
Por ejemplo, si tiene 100 conexiones y baja el wait_timeout
global, entonces no afectará las conexiones existentes, solo las nuevas después de que la variable haya cambiado.
Específicamente para la variable wait_timeout
, hay un giro. Si está utilizando el cliente mysql
en el modo interactivo, o el conector con CLIENT_INTERACTIVE
configurado a través de mysql_real_connect()
entonces verá el juego interactive_timeout
establecido para @@session.wait_timeout
Aquí puedes ver esto demostrado:
> ./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)
Entonces, si está probando esto usando el cliente, es el wait_timeout
que verá al conectarse y no el valor de 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
Estoy confundido por los resultados. ¿Por qué la última consulta da Resultado: 28800?
El estado de su sesión se establece una vez que inicia una sesión y, de forma predeterminada, toma el valor GLOBAL actual.
Si desconectó después de SET @@GLOBAL.wait_timeout=300
, luego volvió a conectar, verá
SHOW SESSION VARIABLES LIKE "%wait%";
Result: 300
Del mismo modo, en cualquier momento, si lo hizo
mysql> SET session wait_timeout=300;
Tendrás
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
Al principio, wait_timeout = 28800, que es el valor predeterminado. Para cambiar el valor de la sesión, debe establecer la variable global porque la variable de sesión es de solo lectura.
SET @@GLOBAL.wait_timeout=300
Después de establecer la variable global, la variable de sesión automáticamente toma el valor.
SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 300
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 300
La próxima vez que se reinicie el servidor, las variables de la sesión se establecerán en el valor predeterminado, es decir, 28800.
PD Estoy usando MySQL 5.6.16