Mysql Низкая производительность MySQL на мощном железе

Сергей Тарасов

Профессор
Добрый день, коллеги!

Имеем мощное железо:

2 x INTEL Xeon E5-2690v2 3ГГц
8 x 16Gb PC3-12800 1600MHz DDR3 ECC
RAID RS2VB080:

2 x SSD INTEL S3700, 100Гб - тут ОС
2 x SSD INTEL S3700, 400Гб - тут /var/www
2 x SSD INTEL S3700, 400Гб - тут база
1 x SSD INTEL 520, 240ГБ - своп
1 x SSD INTEL 520, 240ГБ - кеш, темп и т.п.

ОС Debian 7 x64, MySQL 5.5

Имеем крайне (!) низкую производительность. Базовый тест:

Код:
sysbench --num-threads=10 --test=oltp --mysql-host=127.0.0.1 --mysql-user=sbtest --oltp-table-size=500000 --mysql-table-engine=myisam run
выдает:

Код:
OLTP test statistics:
    queries performed:
        read:                            140000
        write:                          50000
        other:                          20000
        total:                          210000
    transactions:                        10000  (97.53 per sec.)
    deadlocks:                          0      (0.00 per sec.)
    read/write requests:                190000 (1853.10 per sec.)
    other operations:                    20000  (195.06 per sec.)

Test execution summary:
    total time:                          102.5307s
    total number of events:              10000
    total time taken by event execution: 1024.6992
    per-request statistics:
        min:                                11.92ms
        avg:                                102.47ms
        max:                                150.88ms
        approx.  95 percentile:            110.42ms

При этом нет ни нагрузки на процессор, ни на диск!!!

Код:
16:00:34    CPU    %usr  %nice    %sys %iowait    %irq  %soft  %steal  %guest  %idle
16:00:35    all    0,12    0,00    0,07    0,03    0,00    0,00    0,00    0,00  99,78
16:00:35      0    0,99    0,00    0,99    0,00    0,00    0,99    0,00    0,00  97,03
16:00:35      1    0,00    0,00    0,00    0,00    0,00    0,00    0,00    0,00  100,00
16:00:35      2    0,00    0,00    0,00    0,00    0,00    0,00    0,00    0,00  100,00
16:00:35      3    0,00    0,00    0,00    0,00    0,00    0,00    0,00    0,00  100,00
16:00:35      4    0,00    0,00    0,00    0,00    0,00    0,00    0,00    0,00  100,00
Конфиг MySQL:
Код:
tmpdir          = /mnt/cache/mysqltmp
log_error      = /var/log/mysql/error.log

character_set_server = utf8
collation-server = utf8_unicode_ci

thread_cache_size      = 64
max_connections        = 50
thread_concurrency      = 2

query_cache_limit      = 16M
query_cache_size        = 128M

tmp_table_size = 500M
max_heap_table_size = 500M

table_open_cache = 500000
open_files_limit = 1000410

key_buffer_size  = 128M
join_buffer_size = 128M
sort_buffer_size = 64M
read_buffer_size = 128K
read_rnd_buffer_size = 64K
binlog_cache_size = 32K

innodb_flush_method = O_DIRECT
transaction-isolation = READ-COMMITTED

innodb_buffer_pool_size=16G
innodb_additional_mem_pool_size=1G
innodb_file_io_threads=4
innodb_lock_wait_timeout=50
innodb_log_file_size=32M
innodb_log_buffer_size=1M
innodb_flush_log_at_trx_commit=2
В чем может быть затык? И такие жесткие тормоза??? Аналогичный тест на VPS (!) выдает результаты в 2 раза лучше.

Заранее спасибо за советы. С конкретными предложениями - в личку! :)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Готов поспорить, что то же самое, но для innodb выдаст в разы лучше цифры, верно?
 

Сергей Тарасов

Профессор
Сейчас вопрос не про InnoDB и MyISAM, в БД реально используется InnoDB, вопрос в том, что MySQL по непонятным причинам тупит адски вообще. Тест просто на MyISAM провели. Сейчас ради интереса сделаю на InnoDB. :)
 

rukhem

Новичок
innodb_buffer_pool_size=80G # 50-80% of memory
innodb_file_io_threads= колво ядер
и тд

это как минмум.
вам тюнить и тюнить...
 

Сергей Тарасов

Профессор
InnoDB

Код:
OLTP test statistics:
    queries performed:
        read:                            140014
        write:                          50005
        other:                          20002
        total:                          210021
    transactions:                        10001  (1538.34 per sec.)
    deadlocks:                          0      (0.00 per sec.)
    read/write requests:                190019 (29228.37 per sec.)
    other operations:                    20002  (3076.67 per sec.)

Test execution summary:
    total time:                          6.5012s
    total number of events:              10001
    total time taken by event execution: 64.8862
    per-request statistics:
        min:                                  3.01ms
        avg:                                  6.49ms
        max:                                35.12ms
        approx.  95 percentile:              9.95ms

Threads fairness:
    events (avg/stddev):          1000.1000/100.46
    execution time (avg/stddev):  6.4886/0.00
 

rukhem

Новичок
2 x SSD INTEL S3700, 100Гб - тут ОС
2 x SSD INTEL S3700, 400Гб - тут /var/www
2 x SSD INTEL S3700, 400Гб - тут база
1 x SSD INTEL 520, 240ГБ - своп
1 x SSD INTEL 520, 240ГБ - кеш, темп и т.п.
когда памяти 128G, swap Не нужен

2 x SSD INTEL S3700, 400Гб - тут /var/www
2 x SSD INTEL S3700, 400Гб - тут база

Сделайте /opt (raid10)
 

rukhem

Новичок
Test execution summary:
total time: 102.5307s
total number of events: 10000
total time taken by event execution: 1024.6992
per-request statistics:
min: 11.92ms
avg: 102.47ms
max: 150.88ms
approx. 95 percentile: 110.42ms


Test execution summary:
total time: 6.5012s
total number of events: 10001
total time taken by event execution: 64.8862
per-request statistics:
min: 3.01ms
avg: 6.49ms
max: 35.12ms
approx. 95 percentile: 9.95ms

Стало лучше ?
 

Сергей Тарасов

Профессор
Спасибо за отклик!!!

innodb_buffer_pool_size=80G # 50-80% of memory
Зачем столько??? База в 1-2Гб влезет в буфер несколько раз! :)

innodb_file_io_threads= колво ядер
По моим измерениям innodb_file_io_threads, равно как и thread_concurrency, как ни странно ничего вообще не меняют. :)

Так а вот что тд ? :)
 

Сергей Тарасов

Профессор
когда памяти 128G, swap Не нужен
Не согласен. Это боевой сервер, и неожиданно закончившаяся память может доставить много лишних хлопот. Пусть уж на SSD вылезает.

2 x SSD INTEL S3700, 400Гб - тут /var/www
2 x SSD INTEL S3700, 400Гб - тут база

Сделайте /opt (raid10)
RAID10 на SSD работает медленнее, чем отдельный диск, как это не парадоксально. Да и вообще лишен смысла. RAID 1 сделан на случай выхода одного диска из строя.

Еще раз повторюсь - диск по iostat молчит.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Вопрос в том, почему на MyISAM ацкие тормоза, да и на InnoDB результаты хотелось бы улучшить.
потому что InnoDB и MyISAM - де факто разные бд - у каждой свои настройки, свое поведение, свои особенности. Я бы советовал вообще про myisam по-возможности забыть. Опять таки, никто подробностей не знает же. Реальных проблем может быть куча - ulimit внезапно, или еще что нибудь. Из простых первых действий я бы попробовал mysqltuner.pl запустить и посмотреть, что он скажет.
Дальше тюнить от нагрузки.
 

Сергей Тарасов

Профессор
Да подробностей пока нет, равно как и про нагрузку пока речь не идет. Гоняем голый тест. mysqltuner.pl ничего нового не говорит (интересного). Меня смущает, что на MyISAM тесте не задействованы ни процессор, ни диск, а СУБД "ожидает" чего-то третьего...
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Меня смущает, что на MyISAM тесте не задействованы ни процессор, ни диск, а СУБД "ожидает" чего-то третьего...
MyISAM очень плохо пареллелится по разным процам/ядрам, т.к. из блокировок у него только табличные. Это by design он такой.
 

Сергей Тарасов

Профессор
MyISAM очень плохо пареллелится по разным процам/ядрам, т.к. из блокировок у него только табличные. Это by design он такой.
Это понятно, хотя как ни странно, нагружаются по чуть чуть все ядра, правда процессы и висят в sleep... :) Но тут вопрос в том, что у хостера на VPS результаты в 2 раза лучше. Железо хуже, параметры my.cnf примерно такие же. В чем подвох? :)
 

rukhem

Новичок
Вы определитесь сначала у вас сервер DB web или все сразу. Потом посчитайте нагрузку транзакции iops и тд
а потом уже надо думать куда что писать.
А начитать форумов как парвильно делать, купить железо и не понимать почемуже mysql тормозит............
 
Сверху