SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.02.2014 13:28:40

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Много висящих "query end" на InnoDB таблицах

В процессе активной чистки некоторых таблиц стали накапливаться запросы со статусом "query end". Вопрос возник потому, что чистится одна таблица, а запросы с "query end" используют другую таблицу, и более того, даже другую БД.

С чем это может быть связано? Сервер Percona 5.5.30, все таблицы InnoDB, данные таблиц в общем файле, innodb_flush_log_at_trx_commit = 0.

ЗЫ Последующие запросы после висящих вполне возможно используют очищаемые таблицы для вставки/обновления, если причина в этом, то вроде как в процессах должны отображаться эти запросы, со статусом "wait for table" или ещё какими-то.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#2 11.02.2014 14:30:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Много висящих "query end" на InnoDB таблицах

Похоже на багу, запрос выполнился но что-то мешает освободить ресурсы. После чистки они отваливаются?

Неактивен

 

#3 11.02.2014 14:42:35

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Много висящих "query end" на InnoDB таблицах

Не отваливаются, выжидают своего часа и успешно отрабатывают smile

Чистка идёт в виде удаления в цикле по Х записей и паузой после каждого запроса удаления. Я ж так понимаю есть какой-то лимит заблокированных строк и со временем он у меня достигается из-за не достаточной паузы, соответственно чтобы обработать новые строки, надо сбрсоить имеющиеся блокировки. Но я всегда был уверен, что этот счётчик работает в пределах одной таблицы, а тут по такому поведению появляются мысли, что счётчик блокировок один на весь СУБД. Правильно ли мыслю?


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#4 11.02.2014 15:10:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Много висящих "query end" на InnoDB таблицах

Это я неудачно выразился насчет "отваливаются".

http://dev.mysql.com/doc/refman/5.6/en/general-thread-states.html написал:

query end

This state occurs after processing a query but before the freeing items state.

Запрос уже выполнился, но что-то мешает ему освободить используемые ресурсы (очистить память, закрыть таблицы и т.д.)
Накапливающиеся запросы они select или меняют данные?

Неактивен

 

#5 11.02.2014 15:25:04

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Много висящих "query end" на InnoDB таблицах

Меняют данные, селектов в это время не наблюдается.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#6 11.02.2014 15:39:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Много висящих "query end" на InnoDB таблицах

Попробуйте режим innodb_file_per_table

Неактивен

 

#7 11.02.2014 15:48:55

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Много висящих "query end" на InnoDB таблицах

Были такие мысли... на сколько с этим параметром ухудшается производительность?


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#8 11.02.2014 15:59:46

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Много висящих "query end" на InnoDB таблицах

А почему она должна ухудшиться?

Неактивен

 

#9 11.02.2014 16:16:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Много висящих "query end" на InnoDB таблицах

Из минусов у вас возрастет количество операций открытия файла.
С другой стороны: если некоторые таблицы часто изменяются это приводит к фрагментации общего хранилища из-за чего может пострадать производительность других таблиц, поэтому рекомендуют innodb_file_per_table
Кроме того в перконе в режиме innodb_file_per_table есть специальные возможности, например, пометить таблицу как испорченная (при этом остальные будут работать).

Неактивен

 

#10 11.02.2014 18:25:27

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3845

Re: Много висящих "query end" на InnoDB таблицах

Может ли быть связано с query cache? Что дает профайлинг на запрос, который подвисает?

http://stackoverflow.com/questions/1231 … y-end-step

Неактивен

 

#11 12.02.2014 10:38:25

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Много висящих "query end" на InnoDB таблицах

А как можно посмотреть профайлинг при выполнении самого запроса? По приведённой ссылке выполняется три шага, это для меня закончится суецидом, ибо сначала надо "положить на лопатки" сервер и мониторить процессы, а уже потом делать профилирование.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#12 12.02.2014 11:06:49

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Много висящих "query end" на InnoDB таблицах

Допишите в скрипт, который генерит запросы в статусе "query end", чтобы сохранял инфу из INFORMATION_SCHEMA.PROFILING куда-нибудь. Потом запустите активную чистку и разгребаqте полученный завал.

Других вариантов, имхо, нет.
К сожалению, в данный момент есть возможность сохранять по ходу выполнения только план запроса (да и только в MariaDB 10.0).

Неактивен

 

#13 12.02.2014 11:32:18

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Много висящих "query end" на InnoDB таблицах

Справился с тремя шагами))

mysql_5 ((none))>set profiling = 1;
Query OK, 0 rows affected (0.00 sec)

mysql_5 ((none))>REPLACE INTO `log`.`files`(`user_id`,`file`,`message`) VALUES (NULL,'ks.dlr','Not found ks_dlr with msg_id \"61302d50-52fb-35dc-bb56-ddef36bbd961\"');
Query OK, 2 rows affected (7.46 sec)

mysql_5 ((none))>show profile for query 1;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000049 |
| checking permissions           | 0.000009 |
| Opening tables                 | 0.000017 |
| exit open_tables()             | 0.000024 |
| System lock                    | 0.000006 |
| mysql_lock_tables(): unlocking | 0.000002 |
| exit mysqld_lock_tables()      | 0.000003 |
| init                           | 0.000014 |
| update                         | 0.000471 |
| end                            | 0.000003 |
| query end                      | 7.457470 |
| innobase_commit_low():trx_comm | 0.000004 |
| query end                      | 0.000002 |
| ha_commit_one_phase(1713779783 | 0.000006 |
| query end                      | 0.000003 |
| closing tables                 | 0.000006 |
| freeing items                  | 0.000014 |
| logging slow query             | 0.000001 |
| logging slow query             | 0.000045 |
| cleaning up                    | 0.000002 |
| sleeping                       | 0.000001 |
+--------------------------------+----------+
21 rows in set (0.00 sec)


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#14 12.02.2014 11:49:50

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3845

Re: Много висящих "query end" на InnoDB таблицах

А отключение query_cache пробовали? Чтобы исключить эту версию http://bugs.mysql.com/bug.php?id=54584

Неактивен

 

#15 12.02.2014 12:02:49

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Много висящих "query end" на InnoDB таблицах

Не пробовали, почитаю и подумаем.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#16 24.07.2014 17:11:14

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Много висящих "query end" на InnoDB таблицах

И снова здрассьте smile У нас без изменений (в поведении и настройках), забИли, в общем.

Чисто случайно обнаружил, что время статуса "query end" соответствует времени выполнения кластерных запросов "committed X" и теперь я более, чем на 99,99% уверен, что причина именно в этом. У нас 3 ноды в XtraDB Cluster, в одну пишем, с трёх читаем.

Может теперь у кого-то есть мысли как избежать этих висюков?


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#17 24.07.2014 17:46:24

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3845

Re: Много висящих "query end" на InnoDB таблицах

Про XtraDB Cluster вы не говорили. Посмотрите обсуждение здесь - это похоже на вашу проблему?
https://bugs.launchpad.net/percona-xtra … ug/1197771

Неактивен

 

#18 24.07.2014 18:12:40

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Много висящих "query end" на InnoDB таблицах

Да, не говорил, не видел зависимостей...
Предложенное обсуждение немного не то, больше подходит вот это: https://bugs.launchpad.net/percona-xtra … ug/1268978 но оно не решено и не активно.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#19 26.07.2014 15:23:29

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6722

Re: Много висящих "query end" на InnoDB таблицах

Про отставание в галере лучше всего написано в районе статьи про flow control:
http://www.mysqlperformanceblog.com/201 … for-mysql/

Ну и понятно, что в синхронном коммите вы будете ждать сеть + самую медленную
машинку из кластера. Это жизнь — или синхронность, или скорость smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson