Лекция
Привет, Вы узнаете о том , что такое ошибки в конкурентных запросах, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое ошибки в конкурентных запросах, взаимные блокировки , настоятельно рекомендую прочитать все из категории Методы выявления ошибок в SQL приложении.
В предыдущей части мы рассмотрели каким образом можно найти причину проблемы, если она повторяется всегда. Но бывают случаи, когда проблема возникает только при определенном стечении обстоятельств.
Например, такой простой запрос может выполняться достаточно долго:
mysql> select * from t;
+-----+
| a |
+-----+
| 0 |
| 256 |
+-----+
2 rows in set (3 min 18.71 sec)
Чаще всего вы обнаруживаете неожиданно медленный запрос в slow query log. В данном случае смущает количество строк в результате.
Может быть это какая-то сложная таблица с множеством индексов? Хотя это не должно играть роли в данном случае.
Нет:
mysql> show create table t\G
************** 1. row **************
Table: t
Create Table: CREATE TABLE `t` (
`a` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`a`)
) ENGINE=MyISAM AUTO_INCREMENT=257 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Попробуем тоже самое проделать в консоли:
mysql> select * from t;
+-----+
| a |
+-----+
| 0 |
| 256 |
+-----+
2 rows in set (0.00 sec)
0 секунд!
В чем же дело? Здесь наш главный помощник - команда SHOW PROCESSLIST:
mysql> show processlist\G
******************* 1. Об этом говорит сайт https://intellect.icu . row *******************
Id: 1311
User: root
Host: localhost
db: test
Command: Query
Time: 35
State: Locked
Info: select * from t
******************* 2. row *******************
Id: 1312
User: root
Host: localhost
db: test
Command: Query
Time: 36
State: User sleep
Info: update t set a=sleep(200) where a=0
******************* 3. row ******************
Id: 1314
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: NULL
Info: show processlist
3 rows in set (0.00 sec)
В результате мы сразу видим, что интересующий нас запрос ждет когда будет выполнен другой, требующий большего времени.
Что делать? На уровне приложения разводить запросы по времени: не давать им выполняться одновременно.
Прием №11: используйте SHOW PROCESSLIST чтобы посмотреть список одновременно выполняемых запросов.
Начиная с версии 5.1 INFORMATION_SCHEMA содержит таблицу PROCESSLIST. Вы также можете использовать эту таблицу чтобы посмотреть список запущенных процессов.
mysql> SELECT * FROM PROCESSLIST\G
*************************** 1. row ***************************
ID: 955
USER: root
HOST: localhost
DB: information_schema
COMMAND: Query
TIME: 0
STATE: executing
INFO: SELECT * FROM PROCESSLIST
1 row in set (0.01 sec)
Это особенно удобно, если у вас одновременно выполняется много запросов и вы хотите отсортировать вывод.
Так же вы можете увидеть текущий список транзакций в InnoDB с запросом ниже, если хотите.
SELECT * FROM information_schema.innodb_trx\G
Таблица INNODB_TRX содержит информацию о каждой транзакции (за исключением транзакций только для чтения), которая в настоящее время выполняется внутри InnoDB, в том числе о том, ожидает ли транзакция блокировку, когда транзакция запущена и оператор SQL, который выполняется транзакцией, если таковой имеется.
Прием №12: используйте таблицу INFORMATION_SCHEMA.PROCESSLIST если вам нужен отсортированный по какому-либо параметру список одновременных запросов.
В заключение, эта статья об ошибки в конкурентных запросах подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое ошибки в конкурентных запросах, взаимные блокировки и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Методы выявления ошибок в SQL приложении
Из статьи мы узнали кратко, но содержательно про ошибки в конкурентных запросах
Комментарии
Оставить комментарий
Базы данных - Методы выявления ошибок в SQL приложении
Термины: Базы данных - Методы выявления ошибок в SQL приложении