2010-12-14 17 views
41
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?MySQL wait_timeout Variable - GLOBAL vs SESSION

Respuesta

56

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 que tú SET @@GLOBAL.wait_timeout=300, se vuelve a conectar posteriormente, verías

SHOW SESSION VARIABLES LIKE "%wait%"; 

Result: 300 

Del mismo modo, en cualquier momento, si lo hizo

mysql> SET session wait_timeout=300; 

Te obtener

mysql> SHOW SESSION VARIABLES LIKE 'wait_timeout'; 

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

Primero, 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 sesión se establecerá en el valor predeterminado es decir, 28800.

P. S. Estoy usando MySQL 5.6.16

+2

Su respuesta contradice directamente al OP y usted no aborda la contradicción. – klaar

1

Según lo observado por Riedsio, las variables de la sesión no cambian después de la conexión 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 global wait_timeout, entonces no afectará las conexiones existentes, solo las nuevas después de que se haya cambiado la variable.

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 establecido a través de mysql_real_connect() A continuación podrá ver la interactive_timeout conjunto de @@session.wait_timeout

Aquí se puede 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) 

Por lo tanto, Si está probando esto usando el cliente, es el interactive_timeout que verá cuando conecte y no el valor de wait_timeout