MySQL InnoDB page_cleaner 설정이 최적이 아닐 수 있습니다


17

mysqld.log에서이 노트를 보라 :

[Note] InnoDB: page_cleaner: 1000ms intended loop took 15888ms. The settings might not be optimal. (flushed=200 and evicted=0, during the time.)

여기에 다음과 같은 언급이있는 것 같습니다 : "SYNC 인덱스 수행 중 MySQL 인스턴스 정지"

내 질문은 : 이 메모가 로그에 표시되면 어떤 조치를 취해야합니까?

MySQL 및 OS 버전 :
mysql-community-server- 5.7.9 -1.el7.x86_64
centos-release-7-1.1503.el7.centos.2.8.x86_64

'innodb %'와 같은 SHOW 변수 실행 ; 제안 된 바와 같이 :

innodb_page_cleaners | 1

답변:


11

MySQL 5.7.8에서 innodb_page_cleaners 기본값이 1에서 4로 변경되었습니다. 페이지 클리너 스레드 수가 버퍼 풀 인스턴스 수를 초과하면 innodb_page_cleaners는 자동으로 innodb_buffer_pool_instances와 동일한 값으로 설정됩니다

다음을 사용하여 innodb_buffer_pool_instances를 확인하십시오.

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_instances'

innodb_page_cleaners최대 높이 만 설정할 수 있습니다 innodb_buffer_pool_instances. 당신이 원한다면 innodb_page_cleaners=4당신도 필요합니다 innodb_buffer_pool_instances=4.


2
잘 나는 innodb_buffer_pool_instances와 innodb_page_cleaners를 8로 설정했으며 때때로 경고가 표시됩니다. 무거운 동안 스트라이프 데스크탑 수준의 회전 디스크의 그것의 단지 한 무리의 I / 최적화 테이블과 비슷한, 내 생각 엔 당신의 디스크가 너무 느리다을 알려주는 자사의 단지 MySQL의의 미묘한 방법 등의 작전 O)
알렉산다르 Ivanisevic

5

여러 클라이언트에서 동일한 문제가 발생했으며 innodb_lru_scan_depth 의 값을 기본값 인 1024에서 128으로 낮게 설정했기 때문에 문제가 발생했습니다. 값을 낮추면 특히 쓰기 바운드 워크로드에서 트랜잭션을 처리하는 데 걸리는 시간이 줄어 듭니다. 값을 너무 낮게 설정하면 버퍼 풀이 일부 버퍼 및 버퍼 풀 더티 페이지를 지울 수 없습니다.

우리의 경우 128에서 256으로 값을 늘려 크게 개선되었지만 일반적으로 올바른 값은 하드웨어 및로드 유형에 따라 다릅니다. 트릭은 위의 메시지 ( "InnoDB : page_cleaner : 1000ms 의도 된 루프) 에서 설명한 것처럼 page_cleaner 가 많은 작업을 수행 할 필요 가 없도록 OLTP 성능 향상과 MySQL이 버퍼 풀을 깨끗하게 유지하는 것 사이의 올바른 값을 찾는 것입니다. 15888ms 걸렸다 " ).

예를 들어 MySQL을 다시 시작하지 않고도 값을 동적으로 변경할 수 있습니다.

SET GLOBAL innodb_lru_scan_depth=256;

1
MySQL을 다시 시작하면 innodb_lru_scan_depth가 1024로 돌아가서 영구적으로 변경하는 방법은 무엇입니까?
카림 사미르

@KarimSamir 로드 경로 innodb_lru_scan_depth = 256어딘가에 추가하십시오 my.cnf.
Quentin Skousen

0

StackOverflow 스레드는 유용 할 수 있습니다 ...

/programming/41134785/how-to-solve-mysql-warning-innodb-page-cleaner-1000ms-intended-loop-took-xxx

이것은 기본적으로 DB에 쓰기가 너무 많아 BufferPool 이 더티 값으로 채워지 는 것을 의미 합니다. 이렇게하면 PageCleaner 가 더티 페이지를 작동하고 지우도록 트리거합니다 . 더티 페이지가 평소보다 너무 많으 므로 PageCleaner 가 버퍼를 지우는 데 시간이 더 걸렸습니다 .

innodb_lru_scan_depth특정 변수는 비우기 위해 수행 할 버퍼 풀 스캔 양을 제어합니다. 값이 크거나 시스템의 쓰기 처리량이 너무 많으면 더티 페이지가 더러워 질 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.