/etc/my.cnfでmax_connectionsおよびwait_timeoutパラメーターを設定するのに苦労していますが、MariaDBがファイルからパラメーターを読み取っていないようです(他のパラメーターの一部を読み取りますが、すべてチェックしていません)。
私の/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
しかし、MariaDBでmax_connections変数とwait_timeout変数を確認すると、デフォルト値が表示されます。
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)
ただし、my.cnfの他のパラメーターは正しいです。
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)
Mysqlコマンドラインからmax_connections変数を設定できますが、サービスを再起動すると自動的にリセットされます。
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)
しかし、wait_timeoutの場合、これは機能しません。
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)
待機タイムアウトはセッション変数として設定されます。
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)
すべてのmy.cnfファイルを確認しましたが、どれもパラメータを上書きしていません。
[/] # 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
OS:RHEL 7
MariaDBバージョン:mariadb-server-5.5.47-1.el7_2.x86_64
wait_timeout
はねじボールの1つです。
「スレッドの起動時に、セッションのwait_timeout値は、クライアントのタイプ(mysql_real_connect()へのCLIENT_INTERACTIVE接続オプションで定義されている)に応じて、グローバルのwait_timeout値またはグローバルのinteractive_timeout値から初期化されます。interactive_timeoutも参照してください。」
max_connections
は上限が100000であると主張していますが、10000でも不当に大きいと言えます。 max_connections=1000
my.cnf
?
My.cnfを変更した後、
SHOW GLOBAL
、SHOW
ではなく、デフォルトでSHOW SESSION
。GLOBAL
とSESSION
(VARIABLES
とSTATUS
の両方)の相互作用は、設定によって異なります。すべてではない多くの場合、セッションは初期化されたときにグローバルにログインする。そしてwait_timeout
はおそらく最も風変わりです。
警告
たとえば、3つのtmpテーブルを必要とする複雑なSELECTs
を実行する接続ごとに100000の接続がある場合、100000 * 3 * 256M = 76.8TBの[〜#〜] ramが必要になる可能性があります[〜#〜]tmpテーブルを処理します! (256M = min(tmp_table_size、max_heap_table_size))。これは、これらすべてのものを非常に高く設定するではない強力な理由です。