SlideShare a Scribd company logo
1 of 43
Обработка дедлоков в MySql ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],Содержание
Что это такое Дедлок - ситуация,  в которой 2 или более процесса ждут друг от друга освобождения занятых ресурсов,  или более двух процессов  ждут ресурсы в циклической порядке (  http://en.wikipedia.org/wiki/Deadlock  )
Что это такое FAIL InnoDB автоматически распознает дедлоки и откатывает одну из транзакций простой пример Транзакция 1 Транзакция 2 select name from events  where  id = 1  for update select name from events where  id = 2  for update select name from events where  id = 2  for update select name from events  where  id = 1  for update
Что это такое Еще более простой пример
Причины дедлоков ,[object Object],[object Object]
Причины дедлоков ,[object Object],[object Object],Неправильная организация доступа к данным Неправильная организация доступа к данным
Неправильная организация доступа к данным
Что это такое FAIL Отсутствие фиксированного порядка доступа В порядке возрастания В порядке убывания Неправильная организация доступа к данным Транзакция 1 Транзакция 2 select name from events  where  id = 1  for update select name from events where  id = 2  for update select name from events where  id = 2  for update select name from events  where  id = 1  for update
Порядок доступа ,[object Object],[object Object],[object Object],Неправильная организация доступа к данным
[object Object],[object Object],Некорректно  спроектированная БД Неправильная организация доступа к данным
Пример (основан на реальных событиях)
Исходная задача ,[object Object],[object Object],(слегка анонимизирована) Пример
Структура данных Индекс по полю locked_at Пример EVENTS id title user_id event_time locked_at ... ... ... ... ...
first_unprocessed, v1 SELECT id AS event_id, ... FROM events  WHERE locked_at IS NULL  OR locked_at < [1.minute.ago] ORDER BY event_time ASC LIMIT 1 FOR UPDATE UPDATE events SET locked_at = [Time.now]  WHERE id = [event_id] Находим первое необработанное событие, “занимаем” его и возвращаем оператору: Пример
touch v1 UPDATE events SET locked_at = [Time.now]  WHERE id = [event_id] Обновляем блокировку, если обработка занимает более одной минуты (event_id получаем от клиента): Пример
DEADLOCK! (Различные пути доступа к данным) Пример first_unprocessed touch index_events_on_locked_at (при выборке  SELECT * ... FOR UPDATE) PRIMARY_KEY (в условии UPDATE) PRIMARY_KEY (при обновлении) index_events_on_locked_at (при обновлении)
touch v2 UPDATE events SET locked_at = [Time.now]  WHERE id = [event_id] Используем результат запроса из first_unprocessed в качестве семафора, после чего обновляем блокировку: SELECT id AS event_id FROM events  WHERE ... FOR UPDATE Пример
Пример
first_unapproved v2 Новое требование:  выбирать события для указанного юзера. В запрос добавляется условие user_id = [user_id] Новая проблема: Для пользователей с малым кол-вом записей MySql использует индекс по user_id (снова различные пути доступа) Решение?  FORCE INDEX index_events_on_locked_at Пример
Проблемы ,[object Object],[object Object],Пример
Решение ,[object Object],[object Object],Изменения в структуре БД Пример EVENT_LOCKS id event_id user_id event_time locked_at ... ... ... ... ...
Summary ,[object Object],[object Object],Дедлоки,  обусловленные неправильной организацией доступа к данным, можно устранить: Неправильная организация доступа к данным
Специфика работы блокировок в MySql
Причины дедлоков ,[object Object],[object Object],[object Object],[object Object],специфика работы блокировок MySql Cпецифика работы блокировок MySql
Блокировки в MySql Cпецифика работы блокировок MySql Row Lock Блокировка записи индекса Next-key Lock Row lock + блокировка “промежутка” записей индекса
Row Lock ,[object Object],[object Object],SELECT name FROM events WHERE id = 3 (id - первичный ключ) Cпецифика работы блокировок MySql
Next-key Lock Next-key Lock =  блокировка записи (Row Lock) + блокировка “промежутка” перед записью Пример Cпецифика работы блокировок MySql (-inf.. 3] (3..5] (5..10] (10..15] (15..+inf)
Next-key Lock используется для предотвращения phantom read Cпецифика работы блокировок MySql Транзакция 1 Транзакция 2 SELECT * FROM events WHERE another_id > 8 FOR UPDATE INSERT INTO events (another_id) VALUES (9) SELECT * FROM events WHERE another_id > 8 FOR UPDATE FAIL 2й запрос возвращает другие данные
Next-key Lock InnoDB блокирует все встреченные записи индекса, используемого в запросе SELECT * FROM events WHERE another_id > 8 FOR UPDATE Cпецифика работы блокировок MySql ... 3 3..5 5..10 10..15 15...
Next-key Lock ,[object Object],[object Object],Если не используется индекс, InnoDB фактически блокирует все таблицу! Next-key lock можно отключить: (возможен phantom read) Cпецифика работы блокировок MySql
MySql 5.1 ,[object Object],[object Object],( подробнее тут -  http://bit.ly/4iF2mu  ) Cпецифика работы блокировок MySql
Проблема Cпецифика работы блокировок MySql Много блокировок + длинная транзакция = много дедлоков
Решение ,[object Object],[object Object],Cпецифика работы блокировок MySql
Пример 1 ,[object Object],[object Object],[object Object],Cпецифика работы блокировок MySql
Пример 2 ,[object Object],[object Object],[object Object],Cпецифика работы блокировок MySql
Что делать ,[object Object],[object Object],[object Object],Cпецифика работы блокировок MySql
Summary ,[object Object],[object Object],[object Object],Cпецифика работы блокировок MySql
Узнаем больше SHOW ENGINE INNODB STATUS
 
Описаны последние 2 транзакции и последние запросы из каждой (не обязательно именно те, которые вызвали дедлок)
Ресурсы ,[object Object],[object Object],[object Object],[object Object]
 

More Related Content

What's hot

hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ RubtsovOntico
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь ЧертенковImprove Group
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхKirill Zotin
 
Лабораторная работа № 3. МАПО - idef0 и dfd диаграммы
Лабораторная работа № 3. МАПО - idef0 и dfd диаграммыЛабораторная работа № 3. МАПО - idef0 и dfd диаграммы
Лабораторная работа № 3. МАПО - idef0 и dfd диаграммыPresentationCreater
 
МАПО Лекция 11 Потоки данных DFD
МАПО Лекция 11 Потоки данных DFDМАПО Лекция 11 Потоки данных DFD
МАПО Лекция 11 Потоки данных DFDОлег Гудаев
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьTanya Denisyuk
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”SQALab
 
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...IT Event
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...Ontico
 
Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)
Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)
Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)Ontico
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Badoo Development
 
Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0akrakovetsky
 
Делаем очередь поверх Кассандры
Делаем очередь поверх КассандрыДелаем очередь поверх Кассандры
Делаем очередь поверх КассандрыDotNetConf
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
лабораторная работа №3 dfd & idef0
лабораторная работа №3 dfd & idef0лабораторная работа №3 dfd & idef0
лабораторная работа №3 dfd & idef0Natasha Lysakova
 
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)Ontico
 

What's hot (19)

hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ Rubtsov
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталях
 
Лабораторная работа № 3. МАПО - idef0 и dfd диаграммы
Лабораторная работа № 3. МАПО - idef0 и dfd диаграммыЛабораторная работа № 3. МАПО - idef0 и dfd диаграммы
Лабораторная работа № 3. МАПО - idef0 и dfd диаграммы
 
Laravel websockets
Laravel websocketsLaravel websockets
Laravel websockets
 
МАПО Лекция 11 Потоки данных DFD
МАПО Лекция 11 Потоки данных DFDМАПО Лекция 11 Потоки данных DFD
МАПО Лекция 11 Потоки данных DFD
 
лабраб 1
лабраб 1лабраб 1
лабраб 1
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
 
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
 
ZooKeeper Java Cloud
ZooKeeper Java CloudZooKeeper Java Cloud
ZooKeeper Java Cloud
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...
 
Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)
Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)
Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 
Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0
 
Делаем очередь поверх Кассандры
Делаем очередь поверх КассандрыДелаем очередь поверх Кассандры
Делаем очередь поверх Кассандры
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
лабораторная работа №3 dfd & idef0
лабораторная работа №3 dfd & idef0лабораторная работа №3 dfd & idef0
лабораторная работа №3 dfd & idef0
 
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
 

Viewers also liked

Обработка дедлоков в MySql
Обработка дедлоков в MySqlОбработка дедлоков в MySql
Обработка дедлоков в MySqlspariev
 
YiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's newYiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's newAlexander Makarov
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Ontico
 

Viewers also liked (6)

Обработка дедлоков в MySql
Обработка дедлоков в MySqlОбработка дедлоков в MySql
Обработка дедлоков в MySql
 
YiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's newYiiConf 2012 - Alexander Makarov - Yii2, what's new
YiiConf 2012 - Alexander Makarov - Yii2, what's new
 
My QR Name Card. Scan it
My QR Name Card. Scan itMy QR Name Card. Scan it
My QR Name Card. Scan it
 
Palestra yii2
Palestra yii2Palestra yii2
Palestra yii2
 
yii framework
yii frameworkyii framework
yii framework
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
 

Similar to Сергей Париев - "обработка дедлоков в MySql"

То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьSergey Xek
 
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется всеОмские ИТ-субботники
 
DFD моделирование - диаграммы потоков данных
DFD моделирование - диаграммы потоков данныхDFD моделирование - диаграммы потоков данных
DFD моделирование - диаграммы потоков данныхTimofei Tatarinov
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовAlex.Kolonitsky
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Mail.ru Group
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandraodnoklassniki.ru
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...Ontico
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Ontico
 
Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)Dmitry Evteev
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusOntico
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьТо, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьphp-user-group-minsk
 
LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)Sergey Skvortsov
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest
 
Fuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с даннымиFuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с даннымиAlexander Byndyu
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderАлександр Брич
 

Similar to Сергей Париев - "обработка дедлоков в MySql" (20)

Дэдлоки
ДэдлокиДэдлоки
Дэдлоки
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
Cassandra design patterns
Cassandra design patternsCassandra design patterns
Cassandra design patterns
 
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
 
DFD моделирование - диаграммы потоков данных
DFD моделирование - диаграммы потоков данныхDFD моделирование - диаграммы потоков данных
DFD моделирование - диаграммы потоков данных
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросов
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
 
Triggers для Mysql
Triggers для MysqlTriggers для Mysql
Triggers для Mysql
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
 
Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 Rus
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьТо, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQLCodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
CodeFest 2013. Аверин С. — MySQL+HandlerSocket=NoSQL
 
Fuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с даннымиFuse8.domain framework - анонс библиотеки для работы с данными
Fuse8.domain framework - анонс библиотеки для работы с данными
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 

Сергей Париев - "обработка дедлоков в MySql"

  • 1.
  • 2.
  • 3. Что это такое Дедлок - ситуация, в которой 2 или более процесса ждут друг от друга освобождения занятых ресурсов, или более двух процессов ждут ресурсы в циклической порядке ( http://en.wikipedia.org/wiki/Deadlock )
  • 4. Что это такое FAIL InnoDB автоматически распознает дедлоки и откатывает одну из транзакций простой пример Транзакция 1 Транзакция 2 select name from events where id = 1 for update select name from events where id = 2 for update select name from events where id = 2 for update select name from events where id = 1 for update
  • 5. Что это такое Еще более простой пример
  • 6.
  • 7.
  • 9. Что это такое FAIL Отсутствие фиксированного порядка доступа В порядке возрастания В порядке убывания Неправильная организация доступа к данным Транзакция 1 Транзакция 2 select name from events where id = 1 for update select name from events where id = 2 for update select name from events where id = 2 for update select name from events where id = 1 for update
  • 10.
  • 11.
  • 12. Пример (основан на реальных событиях)
  • 13.
  • 14. Структура данных Индекс по полю locked_at Пример EVENTS id title user_id event_time locked_at ... ... ... ... ...
  • 15. first_unprocessed, v1 SELECT id AS event_id, ... FROM events WHERE locked_at IS NULL OR locked_at < [1.minute.ago] ORDER BY event_time ASC LIMIT 1 FOR UPDATE UPDATE events SET locked_at = [Time.now] WHERE id = [event_id] Находим первое необработанное событие, “занимаем” его и возвращаем оператору: Пример
  • 16. touch v1 UPDATE events SET locked_at = [Time.now] WHERE id = [event_id] Обновляем блокировку, если обработка занимает более одной минуты (event_id получаем от клиента): Пример
  • 17. DEADLOCK! (Различные пути доступа к данным) Пример first_unprocessed touch index_events_on_locked_at (при выборке SELECT * ... FOR UPDATE) PRIMARY_KEY (в условии UPDATE) PRIMARY_KEY (при обновлении) index_events_on_locked_at (при обновлении)
  • 18. touch v2 UPDATE events SET locked_at = [Time.now] WHERE id = [event_id] Используем результат запроса из first_unprocessed в качестве семафора, после чего обновляем блокировку: SELECT id AS event_id FROM events WHERE ... FOR UPDATE Пример
  • 20. first_unapproved v2 Новое требование: выбирать события для указанного юзера. В запрос добавляется условие user_id = [user_id] Новая проблема: Для пользователей с малым кол-вом записей MySql использует индекс по user_id (снова различные пути доступа) Решение? FORCE INDEX index_events_on_locked_at Пример
  • 21.
  • 22.
  • 23.
  • 25.
  • 26. Блокировки в MySql Cпецифика работы блокировок MySql Row Lock Блокировка записи индекса Next-key Lock Row lock + блокировка “промежутка” записей индекса
  • 27.
  • 28. Next-key Lock Next-key Lock = блокировка записи (Row Lock) + блокировка “промежутка” перед записью Пример Cпецифика работы блокировок MySql (-inf.. 3] (3..5] (5..10] (10..15] (15..+inf)
  • 29. Next-key Lock используется для предотвращения phantom read Cпецифика работы блокировок MySql Транзакция 1 Транзакция 2 SELECT * FROM events WHERE another_id > 8 FOR UPDATE INSERT INTO events (another_id) VALUES (9) SELECT * FROM events WHERE another_id > 8 FOR UPDATE FAIL 2й запрос возвращает другие данные
  • 30. Next-key Lock InnoDB блокирует все встреченные записи индекса, используемого в запросе SELECT * FROM events WHERE another_id > 8 FOR UPDATE Cпецифика работы блокировок MySql ... 3 3..5 5..10 10..15 15...
  • 31.
  • 32.
  • 33. Проблема Cпецифика работы блокировок MySql Много блокировок + длинная транзакция = много дедлоков
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39. Узнаем больше SHOW ENGINE INNODB STATUS
  • 40.  
  • 41. Описаны последние 2 транзакции и последние запросы из каждой (не обязательно именно те, которые вызвали дедлок)
  • 42.
  • 43.