질문 제목에서 알 수 있듯이 파일 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
후 세 번째 클라이언트를 열려고 하면 root
다음이 반환됩니다.
ERROR 1203 (42000): User root already has more than 'max_user_connections' active connections
하지만 at max_connections
으로 설정하면 루트 사용자를 사용하여 동시에 3개의 mysql 클라이언트를 열 수 있습니다. 네 번째 클라이언트를 루트로 열려고 하면 다음과 같은 메시지가 나타납니다.2
max_user_connections
6
ERROR 1040 (HY000): Too many connections
한 사용자의 세 클라이언트 세션 제한은 my.cnf
다음 제한 사항으로 인해 발생합니다.
max_connections = 2
max_user_connections = 6
thread_cache_size = 2
?
계속해서 MySQL 문서를 읽고 있지만 아직 설명을 찾지 못했습니다. 경험이 많은 분이 좀 더 명확한 설명을 해주시면 감사하겠습니다. 이러한 설정은 연결 수(따라서 스레드 수)에 어떤 영향을 줍니까?