web-dev-qa-db-fra.com

Mysql - wait_timeout variable

J'essaie de résoudre un problème que je pense peut être aidé en modifiant la variable Wait_timeOUT dans MySQL (5.1.67) sur ma machine Centos.

Donc, j'ai mis à jour /etc/my.cnf avec la valeur que je veux (180) et redémarrer MySQL, mais maintenant je suis surpris de constater que je reçois des valeurs différentes pour WAIT_TIMEOUT en fonction de la façon dont je l'affiche (voir ci-dessous) :

mysql> show global variables like "%wait%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 180   |
+--------------------------+-------+
3 rows in set (0.00 sec)

mysql> show variables like "%wait%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+
3 rows in set (0.00 sec)

Je suppose que la deuxième requête montre des variables de session, par opposition à des variables mondiales, mais je ne comprends pas pourquoi ils seraient différents, après avoir quitté ma session MySQL, redémarré MySQL, puis connecté. Comment se fait-il qu'ils ne sont pas les mêmes? Et, je suppose, comment je m'assurer que la même valeur (180) est cohérente à travers tout?

Toute suggestion/aide appréciée. Merci.

3
Cheddar

Le documentation états

Sur le démarrage du fil, la valeur de session wait_timeout est initialisée à partir de la valeur globale wait_timeout ou de la valeur globale interactive_timeout, en fonction du type de client (défini par l'option Client_interactive Connect à MySQL_REAL_Connect ()). Voir aussi interactive_timeout.

Puisque vous vous connectez via la ligne de commande, plutôt qu'un script, il est logique que le client_interactive est utilisé comme option de connexion automatiquement. En tant que tel, le interactive_timeout La valeur est utilisée, qui correspond à 28800.

Faire la session wait_timeout valeur soit 180, mettez à jour le interactive_timeout valeur à 180.

Quant à ce que c'est le cas, je ne peux que spéculer. Cependant, en tant que programmeur, je sais qu'il est plus utile de ne pas avoir à rechercher une valeur lorsque vous vérifiez pour effectuer une certaine action, plutôt que d'avoir à vérifier plusieurs valeurs et que je vérifie toujours toutes ces valeurs chaque fois que je vouloir vérifier quelque chose.

Plus explicitement, dans ce cas, chaque fois que le wait_timeout La valeur est nécessaire, il est préférable de simplement vérifier cela, plutôt que les deux wait_timeout et interactive_timeout. Il aide à garder le code maintenu en ayant la session wait_timeout être automatiquement initialisé avec la valeur appropriée, puis de vérifier qu'une seule valeur. Pour faire autrement, invitez les erreurs, en défaillant potentiellement de vérifier les deux valeurs à chaque fois que quelque chose doit être fait qui implique ce délai d'attente.

4
Willem Renzema