質問のタイトルが示すように、ファイルmax_connections = 2
に設定しましたが、my.cnf
mysqlデーモンを有効にすると、スレッド数は37です。オンラインで検索していますが、私の期待が間違っているという兆候が見つかりませんでした。私はmax_connections
この指示を正しく理解していますか?これがスレッド数を制限しない理由を提案できる人はいますか?
解決策を試してください
- mysql CLI クライアントを介して mysql グローバル変数を照会します。
| Variable_name | Value |
+----------------------------+----------------------+
| max_allowed_packet | 67108864 |
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 1073741824 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
| max_connect_errors | 100 |
| max_connections | 2 |
| max_delayed_threads | 20 |
| max_digest_length | 1024 |
| max_error_count | 1024 |
| max_execution_time | 0 |
| max_heap_table_size | 16777216 |
| max_insert_delayed_threads | 20 |
| max_join_size | 18446744073709551615 |
| max_length_for_sort_data | 4096 |
| max_points_in_geometry | 65536 |
| max_prepared_stmt_count | 16382 |
| max_relay_log_size | 0 |
| max_seeks_for_key | 18446744073709551615 |
| max_sort_length | 1024 |
| max_sp_recursion_depth | 0 |
| max_user_connections | 2 |
| max_write_lock_count | 18446744073709551615 |
これは変数が実際に2に設定されているため、ファイルmy.cnf
が正しくロードされたことを確認します。max_connections
2)(1)の出力からわかるように、max_user_connections
変数を制限しようとしましたが、やはり運がありませんでした。 3)mysqlデーモン(httpd、php-fpm)を照会することが疑われる他のサーバープロセスを終了しましたが、これによりスレッド数が減りませんでした。
システム仕様
私のMySQLバージョンは8.3.0で、最小インストールです。
mysql-8.3.0-linux-glibc2.17-x86_64-minimal
修正する
クエリを実行すると、SHOW PROCESSLIST
次のものが返されます。
*************************** 1. row ***************************
Id: 5
User: event_scheduler
Host: localhost
db: NULL
Command: Daemon
Time: 146457
State: Waiting on empty queue
Info: NULL
*************************** 2. row ***************************
Id: 11
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: init
Info: SHOW PROCESSLIST
2 rows in set, 1 warning (0.00 sec)
私は実行がより役に立つと思います。SELECT * FROM performance_schema_threads\G
これはmysqldが実行する多くの操作に関する情報を返します。私はこのタスクリストがスレッド数と実行数に対応すると思います。
SELECT COUNT(*) FROM performance_schema.threads\G
返品:
38
これはスレッド数とよく一致します。追加操作が基本プロセスに対応すると考えられます。ターミナルから:
pstree | grep sql
|-mysqld---37*[{mysqld}
返されたジョブ名を読み取ることでこのスレッドの名前が似ているperformance_schema.threads
ため、MySQLを実行するためにこれらのスレッドが必要であることがわかりました。io_read_thread
io_write_thread
log_writer_thread
設定はmax_connections
期待どおりに機能します。設定max_user_connections=2
後に3番目のクライアントを開こうとすると、root
次のものが返されます。
ERROR 1203 (42000): User root already has more than 'max_user_connections' active connections
しかし、atmax_connections
に設定すると、rootユーザーを使用して3つのmysqlクライアントを同時に開くことができます。 4番目のクライアントをrootとして開こうとすると、次のメッセージが表示されます。2
max_user_connections
6
ERROR 1040 (HY000): Too many connections
1人のユーザーの3つのクライアントセッションの制限は、my.cnf
次の制限によって発生します。
max_connections = 2
max_user_connections = 6
thread_cache_size = 2
?
私はまだMySQLドキュメントを読んでいますが、まだ説明が見つかりませんでした。経験豊富な方が、より明確な説明をしていただければ幸いです。これらの設定は接続数(したがってスレッド数)にどのような影響を与えますか?