너무 많은 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로 저장,결합 된 임무 계획,정기적으로 수면 연결을 해제 할 수 있습니다.。

답장을 남겨주세요