Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Ошибки в конкурентных запросах 6. Взаимные блокировки. кратко

Лекция



Привет, Вы узнаете о том , что такое ошибки в конкурентных запросах, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое ошибки в конкурентных запросах, взаимные блокировки , настоятельно рекомендую прочитать все из категории Методы выявления ошибок в 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)

Это особенно удобно, если у вас одновременно выполняется много запросов и вы хотите отсортировать вывод.

Ошибки в конкурентных запросах  6. Взаимные блокировки.

Ошибки в конкурентных запросах  6. Взаимные блокировки.

Так же вы можете увидеть текущий список транзакций в InnoDB с запросом ниже, если хотите.

SELECT * FROM information_schema.innodb_trx\G

Таблица INNODB_TRX содержит информацию о каждой транзакции (за исключением транзакций только для чтения), которая в настоящее время выполняется внутри InnoDB, в том числе о том, ожидает ли транзакция блокировку, когда транзакция запущена и оператор SQL, который выполняется транзакцией, если таковой имеется.

Ошибки в конкурентных запросах  6. Взаимные блокировки.

Прием №12: используйте таблицу INFORMATION_SCHEMA.PROCESSLIST если вам нужен отсортированный по какому-либо параметру список одновременных запросов.

В заключение, эта статья об ошибки в конкурентных запросах подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое ошибки в конкурентных запросах, взаимные блокировки и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Методы выявления ошибок в SQL приложении

Из статьи мы узнали кратко, но содержательно про ошибки в конкурентных запросах
создано: 2016-03-02
обновлено: 2022-02-14
100



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Базы данных - Методы выявления ошибок в SQL приложении

Термины: Базы данных - Методы выявления ошибок в SQL приложении