J'ai du mal à définir les paramètres max_connections et wait_timeout dans /etc/my.cnf mais MariaDB ne semble pas lire les paramètres du fichier (il lit certains des autres, je n'ai pas tout vérifié).
Mon fichier /etc/my.cnf:
[mysqld]
#skip-grant-tables
datadir=/data/mysql
socket=/data/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# network
connect_timeout = 61
wait_timeout = 86400
max_connections = 100000
max_allowed_packet = 64M
max_connect_errors = 1000
# limits
tmp_table_size = 512M
max_heap_table_size = 256M
table_cache = 512
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[client]
port = 3306
socket= /data/mysql/mysql.sock
Mais quand je vérifie les variables max_connections et wait_timeout dans MariaDB, cela montre la valeur par défaut:
MariaDB [(none)]> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 214 |
+-----------------+-------+
1 row in set (0.00 sec)
MariaDB [(none)]> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
Cependant, d'autres paramètres dans my.cnf sont corrects:
MariaDB [(none)]> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 67108864 |
+--------------------+----------+
1 row in set (0.00 sec)
MariaDB [(none)]> show variables like 'max_connect_errors';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_connect_errors | 1000 |
+--------------------+-------+
1 row in set (0.00 sec)
MariaDB [(none)]> show variables like 'connect_timeout';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| connect_timeout | 61 |
+-----------------+-------+
1 row in set (0.00 sec)
Je peux définir la variable max_connections à partir de la ligne de commande mysql mais elle se réinitialise elle-même lorsque je redémarre le service:
MariaDB [(none)]> set global max_connections := 10000;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 10000 |
+-----------------+-------+
1 row in set (0.00 sec)
Hower, pour wait_timeout cela ne fonctionne pas:
MariaDB [(none)]> set global wait_timeout = 86400; Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show variables like 'wait_timeout'; +---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
le délai d'attente est défini comme une variable de session:
MariaDB [(none)]> SELECT * FROM information_schema.global_variables WHERE variable_name='wait_timeout' UNION SELECT * FROM information_schema.session_variables WHERE variable_name='wait_timeout';
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| WAIT_TIMEOUT | 86400 |
| WAIT_TIMEOUT | 28800 |
+---------------+----------------+
2 rows in set (0.00 sec)
Vérifié tous les fichiers my.cnf, aucun ne remplace les paramètres:
[/] # locate my.cnf
/etc/my.cnf
/etc/my.cnf.d
/etc/my.cnf~
/etc/my.cnf.d/client.cnf
/etc/my.cnf.d/mysql-clients.cnf
/etc/my.cnf.d/server.cnf
/root/.my.cnf
Système d'exploitation: RHEL 7
Version MariaDB: mariadb-server-5.5.47-1.el7_2.x86_64
wait_timeout
est un jeu de vis:
"Au démarrage du thread, la valeur wait_timeout de la session est initialisée à partir de la valeur globale wait_timeout ou de la valeur globale interactive_timeout, selon le type de client (tel que défini par l'option de connexion CLIENT_INTERACTIVE à mysql_real_connect ()). Voir aussi interactive_timeout."
max_connections
prétend avoir une limite supérieure de 100000, mais je dirais que même 10000 est déraisonnablement grande. Est-ce que cela fonctionne pour mettre max_connections=1000
dans my.cnf
?
Vous comprenez que vous devez, après avoir modifié my.cnf,
SHOW GLOBAL
, pas SHOW
, qui est par défaut SHOW SESSION
.L'interaction entre GLOBAL
et SESSION
(pour VARIABLES
et STATUS
) varie en fonction du paramètre. Pour beaucoup de choses, pas toutes , la session est initialisée à globale lorsque vous s'identifier. Et wait_timeout
est probablement le plus original.
Avertissement
Si vous aviez 100 000 connexions exécutant chacune des complexes SELECTs
nécessitant, disons, 3 tables tmp, alors vous pourriez avoir besoin de 100000 * 3 * 256 Mo = 76,8 To de [~ # ~] ram [~ # ~] pour gérer la table tmp! (256 Mo = min (tmp_table_size, max_heap_table_size)). C'est une bonne raison de ne pas mettre toutes ces choses si haut.