Mysql Жуткие тормоза при INSERT и UPDATE на InnoDB

sage

Новичок
Здравствуйте.

При множественном UPDATE или INSERT на InnoDB получаю вот такую картину:

http://imageshack.com/a/img540/3539/GklJ5C.png

В my.cnf

innodb_buffer_pool_size = 5G
innodb_buffer_pool_instances = 16
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 0
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_thread_concurrency = 0
innodb_flush_method = O_DIRECT

max_connections = 60
max_heap_table_size = 256M

join_buffer_size = 4M

tmp_table_size = 256M

interactive_timeout = 60
wait_timeout = 60

Почему такое происходит и как решить эту проблему?

Спасибо.
 

sage

Новичок
И ладно бы там была высоконагруженная система, а то там таблицы смешные по размеру. Несколько тысяч записей всего. Как вообще работать с InnoDB? Там, где Aria (стоит MariaDB) из коробки летает, InnoDB висит. Как так вообще? Как работают с InnoDB на высоконагруженных системах?
 

damner2

Новичок
Там, где Aria (стоит MariaDB) из коробки летает, InnoDB висит. Как так вообще?
Ты имеешь в виду, что ты на этом же проекте и на этом же сервере у тебя стоял MariaDB и всё летало? или ты рассказываешь тут свои фантазии, чтоб казаться более убедительным?
 

sage

Новичок
я имею в виду, что InnoDB и Aria используется на одном сервере с MariaDB. На похожих проектах. С похожими БД, с похожими запросами. Вот только на InnoDB висит, на Aria - летает.
 

sage

Новичок
И как по ней определить, что проблема в записи на диск?
 

Активист

Активист
Команда форума
дк смотрите, какая что делает - пишет или читает, насколько много. еще в обычном top есть процент wa (wait fot i/o) - ожидание ввода вывода. Если wa большое - то проблема с чтением/записью.
 

Активист

Активист
Команда форума
кстати, тормоза могут быть из-за select count(*), в innodb его юзать низя
 

AnrDaemon

Продвинутый новичок
Можно, но осторожно.
К тому же у товарища тормоза на вставке, а не на выборке. Мало вероятно, что он вставляет count(*)…
Вангую бессмысленное использование индексов.
 

Активист

Активист
Команда форума
Можно, но осторожно.
К тому же у товарища тормоза на вставке, а не на выборке. Мало вероятно, что он вставляет count(*)…
Вангую бессмысленное использование индексов.
Ну мало ли)
Код:
select count(*) as count from `tb` where `blabla` = 1;
if (! $count) {
insert into ...
}
 

sage

Новичок
кстати, тормоза могут быть из-за select count(*), в innodb его юзать низя
хм. в гугле написано про тормоза без where. явно не мой вариант)

Вангую бессмысленное использование индексов.
поподробнее, пожалуйста :)
 
Последнее редактирование:

Активист

Активист
Команда форума
хм. в гугле написано про тормоза без where. явно не мой вариант)


поподробнее, пожалуйста :)
когда тормозит выполните в консоле mysql (от рута MySQL) show processlist ; , вывод покажите сюда. А тормозить count(*) может и с where
 

sage

Новичок
Наконец-то поймал:

+---------+----------+-----------+----------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+---------+----------+-----------+----------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+----------+
| 4192266 | postfix | localhost | postfix | Sleep | 3 | | NULL | 0.000 |
| 4196323 | ... | localhost | ... | Query | 9 | Copying to tmp table | SELECT t1.SupplierID, t1.SupplierOutputName, t1.SupplierURL, COUNT(DISTINCT t4.ProductID) AS product | 0.000 |
| 4196421 | root | localhost | NULL | Query | 0 | init | show processlist | 0.000 |
+---------+----------+-----------+----------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+----------+
3 rows in set (0.00 sec)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Copying to tmp table - запись на диск, запросы не оптимизированы и грузят I/O

выполни explain этого select-а, там будет filesort, use temporary table, оптимизируй,
включи slow query log, оптимизируй все подобные запросы
 
Сверху