почему при ожидании блокировки строки событие 'wait / io / table / sql / handler'? - PullRequest
0 голосов
/ 24 апреля 2020

Я сделал сеанс B ожиданием удержания блокировки строки сеансом A, однако я увидел ожидание 'wait / io / table / sql / handler' вместо ожидаемой блокировки строки, такой как 'wait / lock ..... ', ниже приведены шаги по дублированию проблемы.

MySQL версия «5.7.18-debug»;

шаг 1), включите схему производительности

UPDATE performance_schema.setup_instruments
       SET ENABLED = 'YES', TIMED = 'YES'
UPDATE performance_schema.setup_consumers
       SET ENABLED = 'YES'

шаг 2, создайте таблицу и вставьте строку.

CREATE TABLE t (i INT) ENGINE = InnoDB;
INSERT INTO t (i) VALUES(1);

шаг 3, начните новый сеанс A Удерживайте блокировку строки и не снимайте ее.

 SELECT connection_id() ;
 START TRANSACTION;
 DELETE FROM t WHERE i = 1;

шаг 4, начните новый сеанс B и попытайтесь получить блокировку строки, однако заблокирован сеансом A

 SELECT connection_id() ;
 START TRANSACTION;
 SELECT * FROM t  WHERE i = 1 LOCK IN SHARE MODE;

шаг 5, а затем запросите схему производительности ниже, однако из таблиц PS, которые я видел 'wait / io / table / sql / handler' для сеанса B из таблицы events_waits_current, что означает ожидание операции ввода-вывода, разве не следует ожидать блокировки строки?

SELECT * FROM performance_schema.events_waits_current;
SELECT * FROM performance_schema.events_stages_current;
SELECT * FROM performance_schema.events_statements_current;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...