Кількість екземплярів буферного пулу слід збільшити, щоб уникнути суперечок мутексу пулу буфера.
З розміром буферного пулу 8 ГБ, я сумніваюся, ви коли-небудь побачите вміст мутексного буфера пулу.
ОНОВЛЕННЯ 0 :
Я згадую 8Gb буферний пул у відповіді, тоді як в оригінальному питанні загальна пам'ять становила 8 Гб. Звичайно, буферний пул повинен бути менше 8 Гб. 4 Гб звучить як гарний старт, але переконайтесь, що не відбувається жодної заміни
ОНОВЛЕННЯ 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.