> 데이터 베이스 > MySQL 튜토리얼 > MySQL 최적화 연결 최적화 샘플 코드

MySQL 최적화 연결 최적화 샘플 코드

黄舟
풀어 주다: 2017-03-16 14:24:15
원래의
1419명이 탐색했습니다.

MySQL 연결 최적화는 주로 클라이언트 데이터베이스에 연결하고 데이터베이스가 데이터 테이블과 인덱스를 여는 과정에 관련된 매개변수를 말합니다. 클라이언트의 요청에 대한 응답 조정. 위에서 언급한

MySQL 최적화 캐시 최적화에 대해 자세히 논의해 보겠습니다. 즉, 쇼 변수는 시스템이 컴파일되거나 구성되었음을 나타내는 데 사용됩니다. 🎜> 변수 my.cnf의 값. 상태 표시를 status 값이라고 하며, 현재 실행 중인 서비스 인스턴스의 상태 정보를 표시하는 값으로, 동적으로 변경되는 값입니다. 따라서 현재 MySQL이 정상적으로 실행되고 있는지 관찰하는 데 자주 사용됩니다. 정상이 아닌 경우 정적 매개변수를 조정하여 MySQL의 성능을 향상시킵니다. 따라서 이 두 개념의 차이점을 이해하는 것이 후속 튜닝의 기초입니다.

MySQL 연결 최적화

한 번 회사 내에서 MySQL에 연결하려고 했을 때 항상 연결이 되지 않았던 기억이 납니다. DBA를 찾아 원인을 조사한 결과, 현재 MySQL 연결 수가 꽉 찼다는 사실을 발견했고, 조정 후 문제가 해결되었습니다. 너무 많은 연결을 유발하는 오류에는 일반적으로 두 가지 이유가 있습니다. 첫 번째는 실제로 MySQL에 연결하는 사람이 많아 연결 수가 부족하다는 것입니다. 두 번째는 max_connections 값이 너무 작다는 것입니다.

1. 연결 매개변수(변수 표시)


mysql> show variables like '%connect%';
+-----------------------------------------------+-----------------+
| Variable_name                 | Value      |
+-----------------------------------------------+-----------------+
| character_set_connection           | utf8      |
| collation_connection             | utf8_general_ci |
| connect_timeout                | 10       |
| disconnect_on_expired_password        | ON       |
| init_connect                 |         |
| max_connect_errors              | 100       |
| max_connections                | 151       |
| max_user_connections             | 0        |
| performance_schema_session_connect_attrs_size | 512       |
+-----------------------------------------------+-----------------+
로그인 후 복사

는 MySQL 서비스가 제공하는 최대 데이터 수를 나타냅니다. 인스턴스는 동시에 수락할 수 있습니다. MySQL은 실제로 최대 연결 수에 1을 추가하는 알고리즘을 지원하므로 연결 수가 모두 소진된 경우에도 최고 관리자는 관리를 위해 서버와의 연결을 계속 설정할 수 있습니다. max_connections

지정된 계정의 최대 동시 연결 수를 설정합니다. max_user_connections

불법 호스트가 악의적으로 MySQL 서버에 연결하고 발생한 오류가 설정된 값에 도달하면 MySQL은 호스트의 모든 연결을 해결합니다. 하지만 max_connect_errors flush 호스트를 실행한 후에는 지워집니다.

2. 연결 상태(상태 표시)

한 가지 주의할 점은 변수 값(변수 표시)은 소문자로 시작하지만 상태 값( 상태 표시)는 대문자로 시작됩니다. 이러한 구별은 메모리 및 분류에 도움이 됩니다.


mysql> show status like '%connections%';
+-----------------------------------+-------+
| Variable_name           | Value |
+-----------------------------------+-------+
| Connection_errors_max_connections | 0   |
| Connections            | 197  |
| Max_used_connections       | 2   |
+-----------------------------------+-------+
로그인 후 복사

MySQL의 최대 동시성 수가 Connection_errors_max_connections 시스템 변수의 최대 max_connections 수보다 큰 경우 (변수 표시) 동시성 수, 그에 따른 거부 수는 이 변수에 기록됩니다. Connection_error_max_connections 값이 상대적으로 크다면 현재 시스템 동시성이 상대적으로 높다는 의미이므로 max_connections 값을 높이는 것을 고려해야 합니다.

은 MySQL이 시작된 이후 성공적으로 연결된 횟수를 나타냅니다. 이 값은 지속적으로 누적됩니다. Connections

Max_used_connections는 MySQL이 시작된 이후 동시에 최대 동시 연결 수를 나타냅니다. 이 값이 max_connections보다 크면 시스템이 높은 동시성 상태에 있는 경우가 많으므로 최대 동시 연결 수를 늘리는 것을 고려해야 합니다.

3. 연결 스레드 매개변수(스레드 변수 및 상태)


mysql> show variables like 'thread%';
+--------------------+---------------------------+
| Variable_name   | Value           |
+--------------------+---------------------------+
| thread_cache_size | 9             |
| thread_concurrency | 10            |
| thread_handling  | one-thread-per-connection |
| thread_stack    | 262144          |
+--------------------+---------------------------+
로그인 후 복사

연결 스레드 캐시 수를 설정합니다. 이 캐시는 유휴 연결 스레드를 연결 풀에 넣고 즉시 삭제하는 대신 캐시하는 MySQL 스레드 캐시 풀(스레드 캐시 풀)과 동일합니다. 새로운 연결 요청이 있을 때 연결 풀에 유휴 연결이 있으면 바로 사용됩니다. 그렇지 않으면 스레드를 다시 생성해야 합니다. 스레드를 생성하는 것은 상당한 시스템 오버헤드입니다. MySQL의 스레드 처리 중 이 부분은 Nginx의 스레드 처리와 유사하므로 앞으로 Nginx의 스레드 처리를 소개할 때 비교해보도록 하겠습니다. thread_cache_size

기본값은 다음과 같습니다. 연결당 하나의 스레드는 요청이 완료될 때까지 요청을 처리하기 위해 각 연결에 스레드를 제공하거나 생성하는 것을 의미하며, 연결이 삭제되거나 캐시 풀에 저장됩니다. . 값이 no-threads이면 연결을 처리하기 위해 항상 하나의 스레드만 제공된다는 의미이며 일반적으로 단일 시스템에서 테스트하는 데 사용됩니다. thread_handling

은 힙을 의미합니다. 이 블로그에서는 프로세스와 스레드가 고유 ID를 가지고 있다고 알려져 있습니다. 두 번째 스레드의 ID가 결정됩니다. 특정 ID로 스레드 라이브러리 영역 유지 관리 프로세스 또는 스레드가 휴면 상태일 때 프로세스의 컨텍스트 정보를 저장하기 위해 프로세스의 컨텍스트 정보가 메모리에 열려야 프로그램이 빠르게 깨어날 수 있습니다. MySQL의 각 스레드에 대해 설정된 기본 스택 크기는 다음과 같습니다. 262144/1024=256kthread_stack stack

스레드 상태 정보 보기


mysql> show status like 'Thread%';
+-------------------+-------+
| Variable_name   | Value |
+-------------------+-------+
| Threads_cached  | 1   |
| Threads_connected | 1   |
| Threads_created  | 2   |
| Threads_running  | 1   |
+-------------------+-------+
로그인 후 복사

현재 스레드 풀 번호 스레드 수Thread_cached

현재 연결 수Thread_connected

Thread_cached: 当前连接线程创建数, 如果这个值过高,可以调整threadcachesize 也就是调整线程缓存池的大小。

Thred_runnint: 当前活跃的线程数。

连接请求堆栈

MySQL在很短的时间内,突然收到很多的连接请求时,MySQL会将不能来得及处理的连接请求保存在堆栈中,以便MySQL后续处理。back_log参数设置了堆栈的大小,可以通过如下命令查看:


mysql> show variables like 'back_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| back_log   | 80  |
+---------------+-------+
로그인 후 복사

连接异常


mysql> show status like 'Aborted%';
+------------------+-------+
| Variable_name  | Value |
+------------------+-------+
| Aborted_clients | 0   |
| Aborted_connects | 219  |
+------------------+-------+
로그인 후 복사

Aborted_clients MySQL 客户机被异常关闭的次数。

Aborted_connects 试图连接到MySQL服务器而失败的连接次数。

other


mysql> show status like 'Slow%';
+---------------------+-------+
| Variable_name    | Value |
+---------------------+-------+
| Slow_launch_threads | 0   |
| Slow_queries    | 0   |
+---------------------+-------+
로그인 후 복사


mysql> show variables like 'slow_launch_time';
+------------------+-------+
| Variable_name  | Value |
+------------------+-------+
| slow_launch_time | 2   |
+------------------+-------+
로그인 후 복사

Slow_lunch_threads 创建线程的时间过长,超过slow_launch_time的设定值,则会记录。

可以通过使用 Connection_error%来查看连接的错误状态信息:


mysql> show status like 'Connection_error%';
+-----------------------------------+-------+
| Variable_name           | Value |
+-----------------------------------+-------+
| Connection_errors_accept     | 0   |
| Connection_errors_internal    | 0   |
| Connection_errors_max_connections | 0   |
| Connection_errors_peer_address  | 0   |
| Connection_errors_select     | 0   |
| Connection_errors_tcpwrap     | 0   |
+-----------------------------------+-------+
로그인 후 복사

Connection_errors_peer_address 查找MySQL客户机IP地址是发生的错误数。

위 내용은 MySQL 최적화 연결 최적화 샘플 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿