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 ...

(more…)

Реклама

24.11.2009

Проблема с множественным соединением по индексу в Mysql 5.0.51a

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

В Mysql 5.0.51a наблюдается забавная проблема, связанная с многократным (конкурентным?) использованием одного и того же индекса при множественном соединении таблиц (внутренняя таблица iblock_property содержит всего 45 строк)

SELECT COUNT(DISTINCT BE.ID) as C FROM iblock B
...
INNER JOIN iblock_property FP0 ON FP0.IBLOCK_ID = B.ID AND FP0.CODE='NEW_ATTR_METALL'
INNER JOIN iblock_property FP1 ON FP1.IBLOCK_ID = B.ID AND FP1.CODE='NEW_ATTR_VSTAVKA'
INNER JOIN iblock_property FP2 ON FP2.IBLOCK_ID = B.ID AND FP2.CODE='NEW_NO_DOUBLE'
... (more...)

28.07.2009

MySQL: использование временных таблиц на диске для таблиц с TEXT/BLOB столбцами

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

В документации MySQL указаны случаи, когда temporary tables не могут быть перенесены в память (Memory (HEAP) Storage Engine) и MySQL использует для временных таблиц MyISAM, первый из которых:

  • Присутствие TEXT или BLOB столбца в таблице

Не совсем понятно, где должен присутствовать LOB столбец- в списке SELECT, условиях WHERE, конструкциях ORDER BY, GROUP BY?

Интересно, в каких случаях MySQL будет создавать для временных данных таблицы на диске, что фиксируется статистикой Created_tmp_disk_tables для запросов к таблицам с TEXT или BLOB столбцами.

(more…)

08.07.2009

Сложные запросы в MySQL: state STATISTICS и optimizer_search_depth

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

Проблема: громоздкий и очень медленный запрос MySQL, пример вывода монитора innotop:

CXN   When  Load  QPS    Slow QCacheHit KCacheHit BpsIn   BpsOut
local Now   0.00  286.87   0   68.14%    99.20%   279.27k  1.14M
local Total 0.00  259.85   3   71.51%    99.08%   219.76k  1.44M
CXN  Cmd   ID  User   Host        DB     Time     Query
local Query 13 bitrix 192.168.0.1 bitrix 01:01:07 SELECT DISTINCT
local Query 15 bitrix 192.168.0.1 bitrix    12:37 SELECT DISTINCT

Сервер БД (MySQL 5.0.32, Innodb) достаточно загружен: 200-300 запросов в секунду, обмен данными > 1МБ/сек (BpsOut). Запрос ужасающей длительности (более часа!) находится в статусе statistics:

mysql> show full processlist;
| 13 | bitrix | 192.168.0.1:45057 | bitrix | Query | 3612 | statistics | SELECT ...

(more…)

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