Выберите запрос блокировки в таблице innodb - PullRequest
1 голос
/ 23 декабря 2011

Я делаю очень простой выбор из таблицы, например

SELECT column FROM table WHERE id=5;

id - это первичный ключ, и все таблицы используют innodb.

Когда я включаю профилирование в phpmyadmin и запускаэтот запрос я вижу это:

Status                           Time
starting                         0.000025
checking query cache for query   0.000034
checking permissions             0.000004
Opening tables                   0.000022
System lock                      0.000004
Table lock                       0.000022
init                             0.000016
optimizing                       0.000008
statistics                       0.000030
preparing                        0.000022
executing                        0.000003
Sending data                     0.000009
end                              0.000002
query end                        0.000003
freeing items                    0.000061
storing result in query cache    0.000005
logging slow query               0.000002
cleaning up                      0.000002

Второй раз, когда я запускаю тот же запрос, я получаю это, так как запрос кэшируется:

Status                           Time
starting                         0.000022
checking query cache for query   0.000005
checking privileges on cached    0.000003
checking permissions             0.000020
sending cached result to clien   0.000055
logging slow query               0.000002
cleaning up                      0.000002

Почему простой запрос выбора, как эта блокировкастол?

1 Ответ

0 голосов
/ 23 декабря 2011

Имейте в виду, что первичный ключ - это кластеризованный индекс (называемый gen_clust_index ).Существует вероятность того, что общая блокировка индекса попадет на страницу индекса, где находится id = 5.

Эксклюзивные блокировки индекса и общие блокировки индекса пытаются сосуществовать в InnoDB каккак можно лучше приспособить

Попробуйте запустить SHOW ENGINE INNODB STATUS\G и поищите такие блокировки .

...