이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 33231|회답: 6

[출처] MySQL은 고동시성 상황에서 높은 CPU 사용량을 분석합니다

[링크 복사]
게시됨 2017. 9. 5. 오후 8:23:59 | | | |


최근 여러 이유로 웹사이트 방문 수가 급격히 증가했으며, 수치에서 동시 연결 수가 1,200건을 넘는 것을 알 수 있습니다

서버 구성이 매우 낮고, 1코어에 2G 메모리가 있고, 많은 사람이 있을 때 웹사이트 접근이 매우 느려서


우리는 최고 명령어를 사용해 확인하고, mysql은 CPU와 메모리를 많이 차지하며, 다른 프로세스들은 php-fpm이 CPU와 메모리를 많이 차지하는데, 이는 그리 높지 않습니다

mysql이 정상적으로 실행된다면, PHP의 일부 SQL 문이 문제를 발견하고 루트 사용자가 mysql 관리에 진입하는 것입니다
mysql -u root -p
비밀번호를 입력한 후 다음 명령을 입력하세요




이 명령어를 통해 데이터베이스가 지속적으로 where의 조건에 따라 delete 작업을 수행하고 있음을 알 수 있습니다.



이 테이블은 pre_k_spider 플러그인 설치로 인해 발생한 것으로 추정되는 거미 접근 기록 테이블입니다

pre_k_spider 테이블에는 10만 개가 넘는 레코드가 있고, 쿼리는 33초가 걸립니다



이 테이블을 단호하게 비우고, 관리 백그라운드로 가서 테이블의 관련 플러그인을 닫고 정상으로 복원하세요!









이전의:알리바바 클라우드 클라우드 마켓플레이스 검증 코드 인식 서비스
다음:my.cnf 구성 파일을 보려면 mysql 5.6.21
 집주인| 게시됨 2017. 9. 6. 오전 9:32:56 |


오늘도 웹사이트가 다시 멈춰 섰고, 많은 수면이 발견되었습니다

수면 원인:

1 클라이언트 프로그램은 종료 전에 mysql_close()를 호출하지 않았습니다.

2 클라이언트는 서버에 요청을 보내지 않고 wait_timeout초 또는 interactive_timeout초 이상 잠들어 있었습니다.

3 클라이언트 프로그램이 데이터 전송 도중 갑자기 종료됨

같은 기간 동안 슬립 프로세스 수가 너무 많고, 다른 상태의 총 연결 수가 max_connection 값을 초과하면, MySQL은 루트 사용자 외의 요청을 처리할 수 없거나 어떤 요청으로도 연결을 설정할 수 없거나 직접 멈추게 됩니다

해결책:

1. 먼저 프로그램이 pconnect 메서드를 사용하는지 확인하고, 둘째, mysql_close()가 페이지 실행 전에 호출되었는지 확인하세요. pconnect 방법은 사용하지 말고, 즉 mysql_connect 사용하는 것이 좋습니다. 프로그램이 실행될 때는 mysql_close가 명시적으로 호출되어야 합니다

2. my.cnf에 wait_timeout와 interactive_timeout을 추가하고, 값을 더 작게 설정하세요. 기본값으로 wait_timeout 값은 8시간이고, 1시간이나 30분으로 변경할 수 있습니다. 이렇게 하면 mysql이 더 빨리 죽은 연결도 종료할 수 있습니다. 총 연결 수가 max_connection 값을 초과하지 않도록 하세요.

wait_timeout 너무 크면 MySQL의 SLEEP 프로세스가 제때 많이 해제되어 시스템 성능이 저하되지만, 설정이 너무 작으면 "MySQL이 사라졌다"는 같은 문제가 발생할 수 있습니다.

max_connection 값을 더 높게 설정하세요. 하지만 이는 당연히 적절하지 않습니다. 연결이 많을수록 서버에 더 큰 부담이 가해집니다. 사실 그런 연결은 중복되어 있으며, 가능한 한 빨리 끊는 것이 최선의 방책입니다.

3. 시스템의 SQL 쿼리를 단계별로 분석하고, 너무 느린 SQL을 찾아 최적화합니다



1) interactive_timeout:
매개변수 의미: 서버가 활동을 기다리는 초, 그리고 상호작용 연결을 종료하기 전 그 시간. 인터랙티브 클라이언트는 mysql_real_connect()의 CLIENT_INTERACTIVE 옵션을 사용하는 클라이언트로 정의됩니다.
매개변수 기본값: 28800초 (8시간)

(2)wait_timeout:
매개변수 의미: 서버가 비상호작용 연결을 종료하기 전에 활동이 시작될 때까지 기다리는 초의 시간.
스레드가 시작되면 세션 wait_timeout 값은 클라이언트 유형(mysql_real_connect()의 연결 옵션CLIENT_INTERACTIVE 정의됨)에 따라 글로벌 wait_timeout 또는 글로벌 interactive_timeout 값을 기반으로 초기화됩니다.
매개변수 기본값: 28800초 (8시간)

MySQL 서버가 지원할 수 있는 최대 연결 수에는 상한선이 있는데, 각 연결은 구축되고 메모리를 소모하기 때문에, 클라이언트가 MySQL 서버에 연결한 후 해당 작업을 처리할 수 있도록 분리하고 점유된 메모리를 확보할 것으로 기대합니다. MySQL 서버에 유휴 연결이 많으면 메모리를 낭비할 뿐만 아니라, 연결이 계속 누적되고 열리면 결국 MySQL 서버의 최대 연결에 도달해 '너무 많은 연결' 오류가 발생합니다. wait_timeout의 값 설정은 시스템의 작동 방식에 따라 판단되어야 합니다. 시스템이 일정 시간 실행 중이면 show processlist 명령어를 통해 현재 시스템의 연결 상태를 확인할 수 있습니다. 만약 슬립 상태에서 많은 프로세스가 연결되어 있다면 매개변수 설정이 너무 크다는 뜻이며, 적절히 조정하여 더 작은 조정을 할 수 있습니다.


SQL 명령어:



이 변형 방법은mysql 서비스를 재시작하면 무효가 됩니다따라서 이 두 속성은 MySQL 설정 파일에서 설정하는 것이 가장 좋습니다.

Linux에서 my.cnf 파일을 수정하세요:




게시됨 2017. 9. 6. 오전 11:15:15 |
마스터-슬레이브 서버를 만들어야 합니다
 집주인| 게시됨 2017. 9. 6. 오전 11:15:49 |
브르카리가 2017-9-6 11:15에 게시함
마스터-슬레이브 서버를 만들어야 합니다

서버 구성 이유 구성이 낮습니다   
 집주인| 게시됨 2017. 9. 6. 오후 1:47:56 |
"mysql-bin.000001"이 많은 공간을 차지하는 문제를 해결했습니다
http://www.itsvse.com/thread-2694-1-1.html
(출처: 건축가)

포트가 있는 MySQL을 설치한 후 /var 공간이 부족하다는 것을 알게 되었고, 확인해보니 mysql-bin.000001, mysql-bin.000002 등 파일들이 공간을 차지하고 있었습니다. 그렇다면 이 파일들은 무엇을 위한 것일까요? 이는 데이터베이스의 연산 로그로, 예를 들어 UPDATE a table이나 DELETE 같은 것으로, 문장이 데이터와 일치하지 않더라도 각 명령문과 각 문장의 실행 시간을 포함한 로그 파일에 저장되어 기록됩니다.

이는 주로 다음 두 가지 목적을 위해 수행됩니다:
1: 데이터 복구
데이터베이스에 문제가 있고 백업이 있다면, 로그 파일을 확인해 어떤 명령어가 데이터베이스 문제를 일으켰는지 확인하고 손실을 복구할 방법을 찾을 수 있습니다.
2: 마스터-슬레이브 서버 간 데이터 동기화
주 서버의 모든 작업은 로그에 기록되어 슬레이브 서버가 두 작업이 동기화되었는지 확인할 수 있습니다.

그냥 로그를 닫아요


 집주인| 게시됨 2017. 10. 9. 오후 2:33:30 |
mysqld는 아래에서 Windows를 너무 차지하고 있습니다



해결책: SQL 문장 최적화
게시됨 2021. 12. 30. 오후 11:15:36 |
지지해!!!!!!!!!!!!!!!!
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com