너무 많은 MySQL 절전 연결 해결
show processlist 실행;절전 상태에서 많은 수의 연결을 인쇄 한 후,2 ~ 300 개가있을 수 있습니다, 이들은 클라이언트이고
데이터베이스 통신 후 릴리스되지 않음。연결 수가 많으면 시스템이 심각하게 느려집니다.,새로운 MySQL 연결 설정 차단,
심지어 MySQL이 오류를보고하도록합니다., 응답하지 않음。
문제의 근본 원인은 다음과 같습니다.
1.사용 된 영구 연결이 너무 많습니다.
2.프로그램에서,제 시간에 mysql 연결을 닫지 않았습니다.
3.데이터베이스 쿼리가 최적화되지 않았습니다.,과도한 시간 소모
가장 근본적인 방법은 위의 3 가지 상황에서 조사하는 것입니다.
1.프로그램에서,영구 링크를 사용하지 마십시오,즉, pconnect 대신 mysql_connect를 사용하십시오.
2.프로그램이 실행됩니다.,Mysql_close는 명시 적으로 호출해야합니다.
3.시스템의 SQL 쿼리를 단계별로만 분석 할 수 있습니다.,느린 쿼리 로그 활성화,비효율적 인 SQL 문 식별,그런 다음 최적화
연구 개발의 관점에서 본 조사입니다,코드 변경이 편리하지 않은 경우, 문제를 다시 해결하고 싶다,
그런 다음 mysql 자체의 타임 아웃 기능에 의존하여,명령 줄 입력
mysql> 다음과 같은 전역 변수 표시 “%타임 아웃 %”;
+—————————-+———-+
| 변수 _ 이름 | 값 |
+—————————-+———-+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | 떨어져서 |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| wait_timeout | 28800 |
+—————————-+———-+
10 세트의 행 (0.00 비서)
wait_timeout 및 interactive_timeout 28800의 값을 통해 제한 시간이 8 시간임을 알 수 있습니다.
wait_timeout 및 interactive_timeout의 값을 줄일 수 있습니다.,처리 시간 초과 연결 해제,같은
900둘째,15 분
전역 wait_timeout 설정 = 900;
global interactive_timeout = 900 설정;
그러나이 구성은 다시 시작하면 유효하지 않습니다.。
my.cnf 구성 파일에 추가 할 수 있습니다.
[mysqld]
wait_timeout = 900
interactive_timeout = 900
저장 및 종료,적용하려면 MySQL을 다시 시작하십시오.
또 다른 방법은 쉘 스크립트를 작성하여 강제로 절전 연결을 끊는 것입니다.
스크립트는 다음과 같습니다.:
#!/bin / sh
user = 사용자
passwd = passwd
host = 127.0.0.1
동안 :
하다
n =`mysqladmin 프로세스 목록 -u $ user -p $ passwd -h $ host | grep -i 수면 | 화장실 -l`
date =`날짜 + % Y % m % d[%H:%미디엄:%에스]`
에코 $ n
만약 [ “$엔” -gt 50 ]
그때
i의 경우`mysqladmin processlist -u $ user -p $ passwd -h $ host | grep -i 수면 | awk‘{인쇄 $2}’`
mysqladmin -u $ user -p $ passwd -h $ host kill $ i 수행
끝난
에코 “수면이 너무 많다 ,그리고 살해” >> /tmp / sleep.log
에코 “$데이트 : $엔” >> /tmp / sleep.log
그밖에
출구 0
있다
자다 1
끝난
cls_sleep.sh로 저장,결합 된 임무 계획,정기적으로 수면 연결을 해제 할 수 있습니다.。