버퍼 풀 뮤텍스 경합을 피하기 위해 버퍼 풀 인스턴스 수를 늘려야합니다.
버퍼 풀 크기가 8GB이면 버퍼 풀 뮤텍스 경합이 나타날 것입니다.
업데이트 0 :
원래 질문에서 총 메모리는 8GB 였지만 대답에 8Gb 버퍼 풀을 언급했습니다. 버퍼 풀은 8GB보다 작아야합니다. 4GB는 좋은 시작처럼 들리지만 스왑이 발생하지 않도록하십시오.
업데이트 1 :
// Yasufumi의 슬라이드에서 (최근의 MySQL 버전에서는 출력이 약간 다를 수 있음)
버퍼 풀 뮤텍스에 경합이 있는지 확인하려면 SHOW ENGINE INNODB STATUS
피크 시간 동안 수십 개의 샘플을 수집하십시오 .
그런 다음 쉘 스 니펫을 사용하여 집계하십시오.
#!/bin/sh
cat $1.innodb | grep "Mutex at " | cut -d"," -f1 | sort | uniq -c > /tmp/tmp1.txt
cat $1.innodb | grep "lock on " | cut -d"-"
-f2- | sort | uniq -c > /tmp/tmp2.txt
cat /tmp/tmp1.txt /tmp/tmp2.txt | sort -n > $1.contention rm /tmp/tmp1.txt /tmp/tmp2.txt
다음과 같은 출력을 제공합니다.
.....
4 lock on RW-latch at 0x7fb86b2c9138 created in file dict/dict0dict.c line 1356
6 lock on RW-latch at 0x7fb86b2c4138 created in file dict/dict0dict.c line 1356
12 lock on RW-latch at 0x7fb86b2d9538 created in file dict/dict0dict.c line 1356
20 lock on RW-latch at 0x7fb86b2db138 created in file dict/dict0dict.c line 1356
22 Mutex at 0x7fb86b28f0e0 created file btr/btr0sea.c line 139
30 lock on RW-latch at 0x7fb86b2ba938 created in file dict/dict0dict.c line 1356
36 lock on RW-latch at 0x7fb86b2bad38 created in file dict/dict0dict.c line 1356
71 Mutex at 0x7fb86b28ecb8 created file buf/buf0buf.c line 597
164 lock on RW-latch at 0x7fb86b28f0b8 created in file btr/btr0sea.c line 139
버퍼 풀 뮤텍스 대기 수가 많으면 여러 버퍼 풀 인스턴스를 고려해야합니다. ~ 48G보다 작은 버퍼 풀에서는 경합이 발생하지 않습니다.