Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Ситуация такая. Есть простенький сервер Intel Core 2 Duo E4700 с 8Gb памяти и SATA 500Gb WD RE4
В последнее время увеличилась нагрузка на базу. CPU в среднем 50%, в пиках ясно дело все 100%,
заметно подтормаживает, но работает. База 8Gb.
Решили подстраховаться и перенести все на систему помощнее:
dual CPU Intel Xeon E5607, 24Gb RAM, LSI MEGA RAID 10 на SAS дисках.
Настроил репликацию на новый сервер, переключил нагрузку. И что бы вы думали - через минуту сайт в дауне, в процессах mysql висит порядка 100 процессов (против 10 на старом сервере). загрузка дисковой системы до 100%. Такое ощущение что буфер INNODB вообще не работает (хотя Buffer pool hit rate 1000 / 1000).
база 100% innodb, вот выдержка из конфига.
innodb_additional_mem_pool_size=22M
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=11M
innodb_buffer_pool_size=2G
innodb_log_file_size=113M
innodb_thread_concurrency=18
Что мне непонятно:
новый сервер, как минимум должен гарантированно держать текущую нагрузку (а это не происходит)
ну и вообще нет ясности понимания отчего так происходит.
У кого есть подобный опыт, поделитесь мнением.
Куда копать? На что обратить внимание?
Mysql 5.0.77
Отредактированно sda (24.11.2011 12:17:43)
Неактивен
Вот, кажется причину нарыл. Висят потоки и чего-то ждут. Как понять чего они ждут?
OS WAIT ARRAY INFO: reservation count 444148, signal count 85917
--Thread 5216 has waited at .\btr\btr0sea.c line 1158 for 0.00 seconds the semaphore:
S-lock on RW-latch at 000000001A3530E8 created in file .\btr\btr0sea.c line 139
a writer (thread id 3664) has reserved it in mode wait exclusive
number of readers 0, waiters flag 1
Last time read locked in file .\btr\btr0sea.c line 773
Last time write locked in file .\btr\btr0sea.c line 516
--Thread 3368 has waited at .\btr\btr0sea.c line 1158 for 0.00 seconds the semaphore:
S-lock on RW-latch at 000000001A3530E8 created in file .\btr\btr0sea.c line 139
a writer (thread id 3664) has reserved it in mode wait exclusive
number of readers 0, waiters flag 1
Last time read locked in file .\btr\btr0sea.c line 773
Last time write locked in file .\btr\btr0sea.c line 516
...
...
--Thread 6584 has waited at .\btr\btr0sea.c line 1158 for 0.00 seconds the semaphore:
S-lock on RW-latch at 000000001A3530E8 created in file .\btr\btr0sea.c line 139
a writer (thread id 3664) has reserved it in mode wait exclusive
number of readers 0, waiters flag 1
Last time read locked in file .\btr\btr0sea.c line 773
Last time write locked in file .\btr\btr0sea.c line 516
Неактивен
Проблему устранил. полет нормальный.
В processlist обнаружил висящие запросы в состоянии "Copying to tmp table". Путем недолгих разбирательств нашел кривой составной индекс, после перестройки которого все заработало.
Кто-нибудь может дать объяснение следующему факту
Почему старый сервер работал, а новый нет? (будучи при этом в 100500 раз лучше, sandra-вские тесты это показали)
Неактивен
Очень странная ситуация. Я правильно понимаю, что у обоих серверов одинаковые
конфигурации и одинаковые ОС, отличие только в оборудовании?
Also: не знаю, как дело обстоит в виндоус, а в Linux начальные процессоры 56ХХ
ведут себя хуже, чем процессоры 55ХХ (видимо, наличие поддержки в самом ядре
ОС) — поройте в этом направлении, возможно, есть какие-то драйверы, которые
могут дать хороший boost в этом месте.
Неактивен
Да, софт один-в-один (за исключением дров естественно).
Я для себя это объяснил особенностями реализации многопоточной обработки в mysql/windows. На старой системе тяжелые запросы обрабатывались последовательно и проблем не возникало (да, медленно, но работало же!). При многопоточной обработке стали возникать взаимные блокировки, отсюда и подвисания потоков и как следствие отказ всей системы.
Щас CPU стало порядка 10%, так что теперь есть куда рости
Отредактированно sda (05.12.2011 12:06:10)
Неактивен
Страниц: 1