SlideShare a Scribd company logo
MySqlдедлоков в
, Undev.RuСергей Париев
spariev@gmail.com
• -Дедлок что это такое
• Неправильная организация доступа к
+данным пример
• MySqlСпецифика работы блокировок
• (SHOW ENGINEУзнаем больше
INNODB STATUS)
Содержание
Что это такое
- ,Дедлок ситуация
2в которой или более процесса ждут друг от друга
,освобождения занятых ресурсов
или более двух процессов
ждут ресурсы в циклической порядке
( http://en.wikipedia.org/wiki/Deadlock )
Что это такое
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 updateFAIL
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 updateFAIL
Отсутствие фиксированного порядка доступа
В порядке
возрастания
В порядке
убывания
Неправильная организация доступа к
данным
Порядок доступа
• все манипуляции с данными
лучше проводить в условленном
порядке
• ,например в порядке возрастания
первичного ключа
• это снижает вероятность
дедлоков
Неправильная организация доступа к
данным
• Отсутствие необходимых индексов
• 1Иногда нужно разносить таблицу
,на несколько если она несет
слишком много смысловой нагрузки
Некорректно
спроектированная БД
Неправильная организация доступа к
данным
( )основан на реальных событиях
Исходная задача
• (events)очередь событий
• - ,много операторов клиентов
обрабатывающих события в режиме
FIFO
( )слегка анонимизирована
Пример
Структура данных
EVENTS
id title user_id event_time locked_at
... ... ... ... ...
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
Пример
Проблемы
• снижение скорости работы при
увеличении размеров таблицы
• конфликты с другими частями
, Eventsприложения использующими
Пример
Решение
• Отдельная таблица для
блокировок
• /Записи добавляются удаляются
Event#after_create/update/destroyв
EVENT_LOCKS
id event_id user_id event_time locked_at
... ... ... ... ...
Изменения в структуре БД
Пример
Summary
• Унифицировать порядок обращения
• Разнести конфликтующий
функционал по разным таблицам
,Дедлоки
обусловленные неправильной организацией
, :доступа к данным можно устранить
Неправильная организация доступа к
данным
Специфика работы
MySqlблокировок в
Причины дедлоков
• MySql 5.0
• InnoDB
• InnoDB ,блокирует не строки таблицы а
записи индексов
• ( , InnoDBесли в таблице нет индексов
)создает скрытый
MySqlспецифика работы блокировок
C MySqlпецифика работы блокировок
MySqlБлокировки в
Row Lock Блокировка записи индекса
Next-key Lock
Row lock + блокировка
“ ”промежутка записей индекса
C MySqlпецифика работы блокировок
Row Lock
• Блокируется только одна запись
• Используется только при выборке с
использованием уникального индекса
SELECT name FROM events WHERE id = 3
(id - )первичный ключ
C MySqlпецифика работы блокировок
Next-key Lock
(-inf.. 3] (3..5] (5..10] (10..15]
(15..+inf)
Next-key Lock =
(Row Lock) +блокировка записи
“ ”блокировка промежутка перед записью
Пример
C MySqlпецифика работы блокировок
Next-key Lock
phantom readиспользуется для предотвращения
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й запрос возвращает
другие данные
C MySqlпецифика работы блокировок
Next-key Lock
... 3 3..5 5..10 10..15
15...
InnoDB блокирует все встреченные записи
,индекса используемого в запросе
SELECT * FROM events WHERE another_id > 8
FOR UPDATE
C MySqlпецифика работы блокировок
Next-key Lock
, InnoDBЕсли не используется индекс фактически
!блокирует все таблицу
• READизменить уровень изоляции на
COMMITTED
• включить системную переменную
innodb_locks_unsafe_for_binlog
Next-key lock :можно отключить
( phantom read)возможен
C MySqlпецифика работы блокировок
MySql 5.1
• READ-меньше блокировок в
COMMITTED DML -при операциях
,блокируются только те строки
которые действительно изменяются
• более производительная блокировка
AUTO_INCREMENTдля полей
( -подробнее тут http://bit.ly/4iF2mu )
C MySqlпецифика работы блокировок
Проблема
Много блокировок
+
длинная транзакция
=
много дедлоков
C MySqlпецифика работы блокировок
Решение
• Делаем мало блокировок
( )правильные индексы
• Используем короткие транзакции
C MySqlпецифика работы блокировок
1Пример
• better_nested_set
• не приспособлен к конкурентной
-модификации дерева большие
, updateтранзакции по всей таблице
• has_tree (как альтернатива данные об
иерархии хранятся в отдельной
) http://github.com/dima-таблице
exe/has_tree
C MySqlпецифика работы блокировок
2Пример
• counters has_manyв
• update- ,ы в произвольном порядке
вероятность дедлоков выше при
длинных транзакциях
• -альтернатива вынести счетчики в
,отдельную таблицу уменьшить
размеры транзакций
C MySqlпецифика работы блокировок
Что делать
• deadlock_retry (
http://github.com/rails/deadlock_retry ) -
если дедлоков мало
• LOCK TABLES - блокировки на уровне
(think MyISAM)таблиц
• READ-COMMITTEDИспользовать
( phantom-read)помним о
C MySqlпецифика работы блокировок
Summary
• Используем индексы
• Короткие транзакции
• ,Если дедлоков мало их можно
,игнорировать перезапуская
транзакции
C MySqlпецифика работы блокировок
Узнаем больше
SHOW ENGINE INNODB STATUS
2Описаны последние транзакции
и последние запросы из каждой
( ,не обязательно именно те которые вызвали
)дедлок
Ресурсы• http://dev.mysql.com/doc/refman/5.0/en/innodb-de
• http://www.mysqlperformanceblog.com/ (
http://bit.ly/wchKP , http://bit.ly/1Bz0AY )
• http://www.xaprb.com/blog/ (
http://bit.ly/Ldq2t , http://bit.ly/8nRFn ,
http://bit.ly/8nRFn )
• High Performance MySQL - O’Reilly
Дэдлоки

More Related Content

What's hot

Коротко о React.js
Коротко о React.jsКоротко о React.js
Коротко о React.js
Mad Devs
 
МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4
Dima Dzuba
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
Noveo
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
Yandex
 
2012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture052012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture05Computer Science Club
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Dev2Dev
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
Volha Banadyseva
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
Dev2Dev
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
SQALab
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
Positive Hack Days
 
PHP daemons into social games
PHP daemons into social gamesPHP daemons into social games
PHP daemons into social games
Alexandre Kalendarev
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
odnoklassniki.ru
 
Тестируемая RxJava
Тестируемая RxJavaТестируемая RxJava
Тестируемая RxJava
Rambler Android
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008Ontico
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Ontico
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
Alexey Ivanov
 
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
IT Event
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
Dev2Dev
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest
 

What's hot (20)

Коротко о React.js
Коротко о React.jsКоротко о React.js
Коротко о React.js
 
МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
 
2012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture052012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture05
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
PHP daemons into social games
PHP daemons into social gamesPHP daemons into social games
PHP daemons into social games
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
 
Тестируемая RxJava
Тестируемая RxJavaТестируемая RxJava
Тестируемая RxJava
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"Konstantin Krivlenia - "Continuous integration for frontend"
Konstantin Krivlenia - "Continuous integration for frontend"
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
 

Viewers also liked

Vim or die
Vim or dieVim or die
Resume update 3
Resume  update 3Resume  update 3
Resume update 3
Lawrence Puckett
 
Logo usis
Logo usisLogo usis
Logo usis
UCIS
 
NeoGenomics Company Overview Presentation 2016 03 14
NeoGenomics Company Overview Presentation 2016 03 14 NeoGenomics Company Overview Presentation 2016 03 14
NeoGenomics Company Overview Presentation 2016 03 14
NeoGenomics Laboratory | Cancer Diagnostics
 
Understanding Fear - Intro & Chapter 01 - Bonaro W. Overstreet
Understanding Fear - Intro &  Chapter 01 - Bonaro W. OverstreetUnderstanding Fear - Intro &  Chapter 01 - Bonaro W. Overstreet
Understanding Fear - Intro & Chapter 01 - Bonaro W. Overstreet
ManikantKant
 
Directed evolution of a recombinase that excises the provirus of most HIV-1 p...
Directed evolution of a recombinase that excises the provirus of most HIV-1 p...Directed evolution of a recombinase that excises the provirus of most HIV-1 p...
Directed evolution of a recombinase that excises the provirus of most HIV-1 p...
Carola Schäfer
 
Peter Mara Expert in Wind Energy and Wind Power
Peter Mara Expert in Wind Energy and Wind PowerPeter Mara Expert in Wind Energy and Wind Power
Peter Mara Expert in Wind Energy and Wind Power
Peter Mara
 
Model Weapons Expert Riley's Motorcycle Presentation
Model Weapons Expert Riley's Motorcycle PresentationModel Weapons Expert Riley's Motorcycle Presentation
Model Weapons Expert Riley's Motorcycle Presentation
Benjamin Pope
 
Foro “DESARROLLO DE LAS CIENCIAS DEL ESPACIO PARA LA CONSERVACIÓN DEL MEDIO A...
Foro “DESARROLLO DE LAS CIENCIAS DEL ESPACIO PARA LA CONSERVACIÓN DEL MEDIO A...Foro “DESARROLLO DE LAS CIENCIAS DEL ESPACIO PARA LA CONSERVACIÓN DEL MEDIO A...
Foro “DESARROLLO DE LAS CIENCIAS DEL ESPACIO PARA LA CONSERVACIÓN DEL MEDIO A...
Barthelemy D Ans
 
Biomedical Instrumentation
Biomedical InstrumentationBiomedical Instrumentation
Biomedical Instrumentation
Manipal University Jaipur
 
Introduction to biomedical instrumentation
Introduction to biomedical instrumentationIntroduction to biomedical instrumentation
Introduction to biomedical instrumentation
Sikkim Manipal Institute Of Technology
 
Implicate order & Explicate order
Implicate order & Explicate orderImplicate order & Explicate order
Implicate order & Explicate order
Hitoshi Tsuchiyama
 

Viewers also liked (13)

Vim or die
Vim or dieVim or die
Vim or die
 
Resume update 3
Resume  update 3Resume  update 3
Resume update 3
 
Logo usis
Logo usisLogo usis
Logo usis
 
ISO Certificate
ISO CertificateISO Certificate
ISO Certificate
 
NeoGenomics Company Overview Presentation 2016 03 14
NeoGenomics Company Overview Presentation 2016 03 14 NeoGenomics Company Overview Presentation 2016 03 14
NeoGenomics Company Overview Presentation 2016 03 14
 
Understanding Fear - Intro & Chapter 01 - Bonaro W. Overstreet
Understanding Fear - Intro &  Chapter 01 - Bonaro W. OverstreetUnderstanding Fear - Intro &  Chapter 01 - Bonaro W. Overstreet
Understanding Fear - Intro & Chapter 01 - Bonaro W. Overstreet
 
Directed evolution of a recombinase that excises the provirus of most HIV-1 p...
Directed evolution of a recombinase that excises the provirus of most HIV-1 p...Directed evolution of a recombinase that excises the provirus of most HIV-1 p...
Directed evolution of a recombinase that excises the provirus of most HIV-1 p...
 
Peter Mara Expert in Wind Energy and Wind Power
Peter Mara Expert in Wind Energy and Wind PowerPeter Mara Expert in Wind Energy and Wind Power
Peter Mara Expert in Wind Energy and Wind Power
 
Model Weapons Expert Riley's Motorcycle Presentation
Model Weapons Expert Riley's Motorcycle PresentationModel Weapons Expert Riley's Motorcycle Presentation
Model Weapons Expert Riley's Motorcycle Presentation
 
Foro “DESARROLLO DE LAS CIENCIAS DEL ESPACIO PARA LA CONSERVACIÓN DEL MEDIO A...
Foro “DESARROLLO DE LAS CIENCIAS DEL ESPACIO PARA LA CONSERVACIÓN DEL MEDIO A...Foro “DESARROLLO DE LAS CIENCIAS DEL ESPACIO PARA LA CONSERVACIÓN DEL MEDIO A...
Foro “DESARROLLO DE LAS CIENCIAS DEL ESPACIO PARA LA CONSERVACIÓN DEL MEDIO A...
 
Biomedical Instrumentation
Biomedical InstrumentationBiomedical Instrumentation
Biomedical Instrumentation
 
Introduction to biomedical instrumentation
Introduction to biomedical instrumentationIntroduction to biomedical instrumentation
Introduction to biomedical instrumentation
 
Implicate order & Explicate order
Implicate order & Explicate orderImplicate order & Explicate order
Implicate order & Explicate order
 

Similar to Дэдлоки

WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
Mikhail Shcherbakov
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Badoo Development
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
Mikhail Shcherbakov
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Tanya Denisyuk
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
Waits monitoring in PostgreSQL
Waits monitoring in PostgreSQLWaits monitoring in PostgreSQL
Waits monitoring in PostgreSQL
Ildus Kurbangaliev
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищи
CUSTIS
 
Хватит писать инфраструктурный код
Хватит писать инфраструктурный кодХватит писать инфраструктурный код
Хватит писать инфраструктурный код
Vadim Martynov
 
Laravel websockets
Laravel websocketsLaravel websockets
Laravel websockets
Kirill Latish
 
DFD моделирование - диаграммы потоков данных
DFD моделирование - диаграммы потоков данныхDFD моделирование - диаграммы потоков данных
DFD моделирование - диаграммы потоков данных
Timofei Tatarinov
 
Транзакции и блокировки в MySql. Теория и практика
Транзакции и блокировки в MySql. Теория и практикаТранзакции и блокировки в MySql. Теория и практика
Транзакции и блокировки в MySql. Теория и практикаNikolay Gondin
 
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется всеОмские ИТ-субботники
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Sergey Xek
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
Aleksandr Tarasov
 
Triggers для Mysql
Triggers для MysqlTriggers для Mysql
Triggers для Mysql
Иван mrRico
 
Автоматизация задач с помощью EEM
Автоматизация задач с помощью EEMАвтоматизация задач с помощью EEM
Автоматизация задач с помощью EEM
Cisco Russia
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
Dima Dzuba
 
MySQL Optimization. Russian
MySQL Optimization. RussianMySQL Optimization. Russian
MySQL Optimization. Russian
Rawan Qurmet
 
Новые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практикеНовые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практикеSveta Smirnova
 

Similar to Дэдлоки (20)

WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
Waits monitoring in PostgreSQL
Waits monitoring in PostgreSQLWaits monitoring in PostgreSQL
Waits monitoring in PostgreSQL
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищи
 
Хватит писать инфраструктурный код
Хватит писать инфраструктурный кодХватит писать инфраструктурный код
Хватит писать инфраструктурный код
 
Laravel websockets
Laravel websocketsLaravel websockets
Laravel websockets
 
DDOS mitigation software solutions
DDOS mitigation software solutionsDDOS mitigation software solutions
DDOS mitigation software solutions
 
DFD моделирование - диаграммы потоков данных
DFD моделирование - диаграммы потоков данныхDFD моделирование - диаграммы потоков данных
DFD моделирование - диаграммы потоков данных
 
Транзакции и блокировки в MySql. Теория и практика
Транзакции и блокировки в MySql. Теория и практикаТранзакции и блокировки в MySql. Теория и практика
Транзакции и блокировки в MySql. Теория и практика
 
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
 
Triggers для Mysql
Triggers для MysqlTriggers для Mysql
Triggers для Mysql
 
Автоматизация задач с помощью EEM
Автоматизация задач с помощью EEMАвтоматизация задач с помощью EEM
Автоматизация задач с помощью EEM
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
 
MySQL Optimization. Russian
MySQL Optimization. RussianMySQL Optimization. Russian
MySQL Optimization. Russian
 
Новые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практикеНовые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практике
 

More from Александр Ежов

Кеширование данных в БД
Кеширование данных в БДКеширование данных в БД
Кеширование данных в БД
Александр Ежов
 
Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015
Александр Ежов
 
Rails 5: awesome features and breaking changes
Rails 5: awesome features and breaking changesRails 5: awesome features and breaking changes
Rails 5: awesome features and breaking changes
Александр Ежов
 
Big Data и Ruby
Big Data и RubyBig Data и Ruby
Big Data и Ruby
Александр Ежов
 
Abstract machines for great good
Abstract machines for great goodAbstract machines for great good
Abstract machines for great good
Александр Ежов
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секунду
Александр Ежов
 
Liquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoRLiquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoR
Александр Ежов
 
Capistrano Rails
Capistrano RailsCapistrano Rails
Capistrano Rails
Александр Ежов
 
Умное кэширование в Rails
Умное кэширование в RailsУмное кэширование в Rails
Умное кэширование в Rails
Александр Ежов
 
Sphinx как база данных
Sphinx как база данныхSphinx как база данных
Sphinx как база данных
Александр Ежов
 
Emacs и Rails
Emacs и RailsEmacs и Rails
Антикризисная презентация
Антикризисная презентацияАнтикризисная презентация
Антикризисная презентация
Александр Ежов
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
Александр Ежов
 
Обзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для RailsОбзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для Rails
Александр Ежов
 
Приложения в плагинах
Приложения в плагинахПриложения в плагинах
Приложения в плагинах
Александр Ежов
 
Использования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложенииИспользования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложении
Александр Ежов
 
Масштабирование в Rails
Масштабирование в RailsМасштабирование в Rails
Масштабирование в Rails
Александр Ежов
 
Интернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russianИнтернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russian
Александр Ежов
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
Александр Ежов
 
Проблемы при работе с разными версиями Ruby и разными gem
Проблемы при работе с разными версиями Ruby и разными gemПроблемы при работе с разными версиями Ruby и разными gem
Проблемы при работе с разными версиями Ruby и разными gem
Александр Ежов
 

More from Александр Ежов (20)

Кеширование данных в БД
Кеширование данных в БДКеширование данных в БД
Кеширование данных в БД
 
Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015
 
Rails 5: awesome features and breaking changes
Rails 5: awesome features and breaking changesRails 5: awesome features and breaking changes
Rails 5: awesome features and breaking changes
 
Big Data и Ruby
Big Data и RubyBig Data и Ruby
Big Data и Ruby
 
Abstract machines for great good
Abstract machines for great goodAbstract machines for great good
Abstract machines for great good
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секунду
 
Liquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoRLiquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoR
 
Capistrano Rails
Capistrano RailsCapistrano Rails
Capistrano Rails
 
Умное кэширование в Rails
Умное кэширование в RailsУмное кэширование в Rails
Умное кэширование в Rails
 
Sphinx как база данных
Sphinx как база данныхSphinx как база данных
Sphinx как база данных
 
Emacs и Rails
Emacs и RailsEmacs и Rails
Emacs и Rails
 
Антикризисная презентация
Антикризисная презентацияАнтикризисная презентация
Антикризисная презентация
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
 
Обзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для RailsОбзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для Rails
 
Приложения в плагинах
Приложения в плагинахПриложения в плагинах
Приложения в плагинах
 
Использования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложенииИспользования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложении
 
Масштабирование в Rails
Масштабирование в RailsМасштабирование в Rails
Масштабирование в Rails
 
Интернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russianИнтернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russian
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
 
Проблемы при работе с разными версиями Ruby и разными gem
Проблемы при работе с разными версиями Ruby и разными gemПроблемы при работе с разными версиями Ruby и разными gem
Проблемы при работе с разными версиями Ruby и разными gem
 

Дэдлоки

  • 1. MySqlдедлоков в , Undev.RuСергей Париев spariev@gmail.com
  • 2. • -Дедлок что это такое • Неправильная организация доступа к +данным пример • MySqlСпецифика работы блокировок • (SHOW ENGINEУзнаем больше INNODB STATUS) Содержание
  • 3. Что это такое - ,Дедлок ситуация 2в которой или более процесса ждут друг от друга ,освобождения занятых ресурсов или более двух процессов ждут ресурсы в циклической порядке ( http://en.wikipedia.org/wiki/Deadlock )
  • 4. Что это такое 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 updateFAIL InnoDB автоматически распознает дедлоки и откатывает одну из транзакций простой пример
  • 5. Что это такое Еще более простой пример
  • 6. Причины дедлоков • Неправильная организация доступа к данным • Специфика работы блокировок в БД
  • 7. Причины дедлоков • Отсутствие фиксированного порядка обращения к таблицам и записям • Некорректно спроектированная БД Неправильная организация доступа к данным Неправильная организация доступа к данным
  • 9. Что это такое 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 updateFAIL Отсутствие фиксированного порядка доступа В порядке возрастания В порядке убывания Неправильная организация доступа к данным
  • 10. Порядок доступа • все манипуляции с данными лучше проводить в условленном порядке • ,например в порядке возрастания первичного ключа • это снижает вероятность дедлоков Неправильная организация доступа к данным
  • 11. • Отсутствие необходимых индексов • 1Иногда нужно разносить таблицу ,на несколько если она несет слишком много смысловой нагрузки Некорректно спроектированная БД Неправильная организация доступа к данным
  • 12. ( )основан на реальных событиях
  • 13. Исходная задача • (events)очередь событий • - ,много операторов клиентов обрабатывающих события в режиме FIFO ( )слегка анонимизирована Пример
  • 14. Структура данных EVENTS id title user_id event_time locked_at ... ... ... ... ... 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. Проблемы • снижение скорости работы при увеличении размеров таблицы • конфликты с другими частями , Eventsприложения использующими Пример
  • 22. Решение • Отдельная таблица для блокировок • /Записи добавляются удаляются Event#after_create/update/destroyв EVENT_LOCKS id event_id user_id event_time locked_at ... ... ... ... ... Изменения в структуре БД Пример
  • 23. Summary • Унифицировать порядок обращения • Разнести конфликтующий функционал по разным таблицам ,Дедлоки обусловленные неправильной организацией , :доступа к данным можно устранить Неправильная организация доступа к данным
  • 25. Причины дедлоков • MySql 5.0 • InnoDB • InnoDB ,блокирует не строки таблицы а записи индексов • ( , InnoDBесли в таблице нет индексов )создает скрытый MySqlспецифика работы блокировок C MySqlпецифика работы блокировок
  • 26. MySqlБлокировки в Row Lock Блокировка записи индекса Next-key Lock Row lock + блокировка “ ”промежутка записей индекса C MySqlпецифика работы блокировок
  • 27. Row Lock • Блокируется только одна запись • Используется только при выборке с использованием уникального индекса SELECT name FROM events WHERE id = 3 (id - )первичный ключ C MySqlпецифика работы блокировок
  • 28. Next-key Lock (-inf.. 3] (3..5] (5..10] (10..15] (15..+inf) Next-key Lock = (Row Lock) +блокировка записи “ ”блокировка промежутка перед записью Пример C MySqlпецифика работы блокировок
  • 29. Next-key Lock phantom readиспользуется для предотвращения 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й запрос возвращает другие данные C MySqlпецифика работы блокировок
  • 30. Next-key Lock ... 3 3..5 5..10 10..15 15... InnoDB блокирует все встреченные записи ,индекса используемого в запросе SELECT * FROM events WHERE another_id > 8 FOR UPDATE C MySqlпецифика работы блокировок
  • 31. Next-key Lock , InnoDBЕсли не используется индекс фактически !блокирует все таблицу • READизменить уровень изоляции на COMMITTED • включить системную переменную innodb_locks_unsafe_for_binlog Next-key lock :можно отключить ( phantom read)возможен C MySqlпецифика работы блокировок
  • 32. MySql 5.1 • READ-меньше блокировок в COMMITTED DML -при операциях ,блокируются только те строки которые действительно изменяются • более производительная блокировка AUTO_INCREMENTдля полей ( -подробнее тут http://bit.ly/4iF2mu ) C MySqlпецифика работы блокировок
  • 33. Проблема Много блокировок + длинная транзакция = много дедлоков C MySqlпецифика работы блокировок
  • 34. Решение • Делаем мало блокировок ( )правильные индексы • Используем короткие транзакции C MySqlпецифика работы блокировок
  • 35. 1Пример • better_nested_set • не приспособлен к конкурентной -модификации дерева большие , updateтранзакции по всей таблице • has_tree (как альтернатива данные об иерархии хранятся в отдельной ) http://github.com/dima-таблице exe/has_tree C MySqlпецифика работы блокировок
  • 36. 2Пример • counters has_manyв • update- ,ы в произвольном порядке вероятность дедлоков выше при длинных транзакциях • -альтернатива вынести счетчики в ,отдельную таблицу уменьшить размеры транзакций C MySqlпецифика работы блокировок
  • 37. Что делать • deadlock_retry ( http://github.com/rails/deadlock_retry ) - если дедлоков мало • LOCK TABLES - блокировки на уровне (think MyISAM)таблиц • READ-COMMITTEDИспользовать ( phantom-read)помним о C MySqlпецифика работы блокировок
  • 38. Summary • Используем индексы • Короткие транзакции • ,Если дедлоков мало их можно ,игнорировать перезапуская транзакции C MySqlпецифика работы блокировок
  • 40.
  • 41. 2Описаны последние транзакции и последние запросы из каждой ( ,не обязательно именно те которые вызвали )дедлок
  • 42. Ресурсы• http://dev.mysql.com/doc/refman/5.0/en/innodb-de • http://www.mysqlperformanceblog.com/ ( http://bit.ly/wchKP , http://bit.ly/1Bz0AY ) • http://www.xaprb.com/blog/ ( http://bit.ly/Ldq2t , http://bit.ly/8nRFn , http://bit.ly/8nRFn ) • High Performance MySQL - O’Reilly