Oracle mechanics

02.05.2010

Mysql: команда EXPLAIN в статусе Copying to tmp table

Filed under: MySQL,optimizer — Игорь Усольцев @ 13:42
Tags: , ,

Mysql 5.0.51a: тяжёлый запрос с множеством внутренних и внешних соединений таблиц долго не завершается (зависает), находясь в статусе Copying to tmp table

mysql> show full processlist;
| 1662 | user | 192.168.0.1:45057 | user | Query | 361 | Copying to tmp table | SELECT ...

В этом нет ничего удивительного, кроме того, что, судя по оценке ввода-вывода и данных по системной нагрузке, в выводе команды show processlist статус процесса Copying to tmp table перепутан со статусом Copying to tmp table on diskобычное дело

Гораздо интереснее наблюдать, как «безобидная» команда EXPLAIN зависает в том же статусе Copying to tmp table

mysql> show full processlist;
| 2678 | user | 192.168.0.1:45022 | user | Query | 452 | Copying to tmp table | EXPLAIN ...


Проблема была успешно решена стандартным способом — увеличением параметров MySQL tmp_table_size и max_heap_table_size — размер свободной оператиной памяти позволял

Но для чего команда MySQL EXPLAIN использует сортировки реальных данных таблиц ?

В докладе Sergey Petrunya Understanding and control of MySQL Query Optimizer описываются стадии оптимизации запроса сервером MySQL, в частности шаг range analysis, который выполняется для каждой таблицы, для которой в запросе есть условия (predicates), с использованием различных методов доступа — от индексного (index range scan, index merge,.., full index scan) до  full table scan. Очевидно, на этом этапе для оценки (estimates) избирательности условий при сортировке результатов оценочных запросов MySQL использует временные таблицы, размер которых может быть значительным при соединении большого количества крупных таблиц. Похоже на механизм dynamic sampling, используемый в Oracle, только без возможностей управления :(

debug log — как я понимаю, на сегодня единственный способ проследить операции range analysis

Добавить комментарий »

Комментариев нет.

RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Создайте бесплатный сайт или блог на WordPress.com.

%d такие блоггеры, как: