SlideShare a Scribd company logo
Top-­‐10	
  	
  популярных	
  вопросов	
  
администраторам	
  баз	
  данных	
  или	
  
почему	
  я	
  против	
  свободного	
  оборота	
  
короткоствола.
Илья	
  Космодемьянский
ik@postgresql-­‐consul@ng.com
"— Военный, а нам оружие дадут?
— Триста тридцать пять…"
(c)ДМБ

2
“Можно ли откатить commit? а в git’е можно”
• Часто	
  транзакции	
  воспринимаются	
  разработчиками	
  как	
  некое	
  
расширение	
  синтаксиса	
  SQL
• Транзакции	
  -­‐	
  основа	
  базы	
  данных	
  а	
  не	
  дополнительная	
  фича
• Буква	
  D	
  в	
  аббревиатуре	
  ACID
• Страничная	
  модель	
  шедуллинга	
  транзакций,	
  причины	
  успеха
• Транзакции	
  не	
  замедляют	
  обработку	
  данных	
  при	
  высоком	
  
concurrency	
  degree,	
  а	
  наоборот	
  ускоряют	
  
“SQL это медленно и архаично, давайте будем
читать напрямую из таблицы?”
• Что	
  значит	
  напрямую?
• NoSQL	
  хорошо	
  бы	
  называть	
  NoACID	
  
• Почему	
  любители	
  почитать	
  напрямую	
  не	
  любят	
  BerkeleyDB?
• Упражнение:	
  перепишите	
  на	
  свой	
  любимый	
  язык	
  SQL	
  запрос	
  c	
  	
  
join,	
  order	
  by,	
  group	
  by.
• Удобно?	
  Изящно?	
  Производительно?	
  Создатели	
  HQL,	
  HSQL,	
  
OfoQL,	
  YQL	
  и	
  десятка	
  других	
  что	
  подобное	
  тоже	
  подозревают.
Зачем нам нужно делать бэкап, у нас же есть слэйв.
• Backup/recovery	
  vs.	
  High	
  availability	
  
• Задача	
  backup’а	
  -­‐	
  корректное	
  восстановление	
  на	
  момент	
  
последней	
  перед	
  аварией	
  успешной	
  транзакции
• Талант	
  и	
  рвение:	
  кто-­‐то	
  сказал	
  DROP	
  TABLE	
  ...	
  CASCADE.
"Нам нужно выводить 20 очень важных count(*)
на главной странице..."
• Почему	
  это	
  плохо?
• Чего	
  именно	
  мы	
  хотим?
• Нагрузка	
  на	
  базе	
  -­‐	
  10К	
  пишущих	
  транзакций	
  в	
  секунду,	
  какую	
  смысловую	
  
нагрузку	
  несет	
  count(event_id)	
  	
  равный	
  1298734297002?
“Ну может все-таки можно?..”
• SELECT	
  reltuples	
  FROM	
  pg_class	
  WHERE	
  oid	
  =	
  'my_schema.tbl'::regclass;
• денормализуем	
  счетчик
Мы создали индекс, почему он не используется?
• Включен-­‐ли	
  сбор	
  статистики?
• Что	
  эффективней	
  -­‐	
  index	
  scan	
  или	
  seq	
  scan?
• <...>	
  where	
  posi•on-­‐1	
  <	
  10	
  	
  -­‐	
  почему	
  оптимизатор	
  не	
  может	
  выполнить	
  
такое	
  просто	
  действие?	
  А	
  дифур	
  решить?	
  А	
  интеграл	
  взять?	
  При	
  
Джобсе	
  такого	
  не	
  было!	
  
Можно-ли использовать join’ы?
• Нужно
• Альтарнативы:	
  in(...),	
  подзапрос,	
  join	
  в	
  приложении
◦ Откуда	
  оптимизатору	
  знать	
  что	
  попадет	
  в	
  in(...)?
◦ В	
  in(...)	
  внезапно	
  оказалось	
  200К	
  id
◦ Сколько	
  раз	
  надо	
  сходить	
  в	
  базу	
  за	
  данными,	
  чтобы	
  с’join’ить	
  5	
  таблиц?
◦ Алгоритмы	
  join’ов	
  имеют	
  разную	
  эффективность.	
  Реализуем	
  в	
  
приложении	
  все?	
  Будем	
  выбирать?	
  Напишем	
  внешний	
  оптимизатор?
• Когда	
  join	
  не	
  эффективен
◦ Для	
  hash	
  join	
  не	
  хватает	
  памяти,	
  для	
  nested	
  loop	
  -­‐	
  не	
  хватает	
  индексов
◦ Давайте	
  с’join’ним	
  255	
  таблиц...	
  и	
  запросто	
  может	
  быть	
  озадачен	
  
выбором	
  255!	
  путей	
  join
"Мне говорили что innodb можно так настроить,
что будет быстрее чем Oracle..."
-

Почему	
  вы	
  так	
  думаете?
Ну	
  оракл	
  он	
  для	
  более	
  серьезных	
  задач...
В	
  смысле!?	
  
Нуу...	
  он	
  тяжелый	
  и	
  неповоротливый,	
  у	
  него	
  дистрибутив	
  весит	
  
2.6Gb...
"Мне говорили что innodb можно так настроить,
что будет быстрее чем Oracle..."
• Смешно?
• У	
  многих	
  сравнений	
  баз	
  данных	
  уровень	
  аргументации	
  примерно	
  
такой	
  же
• Бессмысленно	
  сравнивать	
  коробочные	
  версии
• Не	
  сравнивайте	
  очевидные	
  вещи:	
  если	
  база	
  умеет	
  своими	
  
средствами	
  параллельно,	
  асинхронно	
  утилизовать	
  16ти-­‐
канальный	
  SAN,	
  синтетические	
  тесты	
  I/O	
  против	
  базы,	
  которая	
  
этого	
  не	
  умеет,	
  вырожденны	
  изначально
“Давайте сделаем schemaless (или EAV), это
позволит нам уйти от проблемы добавления
колонок?”
• В	
  наше	
  хранилище	
  ведь	
  всегда	
  будет	
  ходить	
  только	
  одно	
  
приложение
• Ну	
  появится	
  второе,	
  будем	
  выносить	
  в	
  конфиг	
  что	
  откуда	
  доставать	
  
-­‐	
  хардкод	
  это	
  плохо!
• А	
  если	
  приложения	
  будут	
  конфиг	
  слишком	
  интенсивно	
  
использовать,	
  мы	
  на	
  него	
  мьютекс	
  повесим!
• EAV	
  это	
  универсально,	
  дизайн	
  схемы	
  не	
  нужен.	
  Внезапно	
  
появляется	
  аттрибут	
  нового	
  хитрого	
  типа...
• Если	
  EAV	
  будет	
  тормозить,	
  мы	
  передем	
  на	
  новую,	
  прекрасную	
  и	
  
светлую	
  базу	
  данных!
• Или	
  назовем	
  EAV	
  ядром	
  и	
  будем	
  денормализовывать!
Нам нужно реализовать Мультимастер репликацию
• Чего	
  мы	
  хотим?	
  Катастрофоустойчивости?	
  Масштабирования	
  на	
  
запись?
• Mul•site	
  запись	
  это	
  2	
  Phase	
  Commit.	
  Вы	
  этого	
  действительно	
  
хотите?
• Различайте	
  bidirec•onal	
  репликацию	
  и	
  мультимастер	
  репликацию!	
  
Почти	
  честную	
  мультимастер	
  репликацию	
  умеет	
  только	
  Oracle.
• Катастрофоустойчивый	
  мультимастер	
  -­‐	
  дорого	
  и	
  сложно
• Падение	
  одной	
  ноды	
  все	
  равно	
  ведет	
  к	
  проблемам
• Master/Slave	
  +	
  грамотный	
  failover

More Related Content

What's hot

My talk on administering PostgreSQL
My talk on administering PostgreSQLMy talk on administering PostgreSQL
My talk on administering PostgreSQL
Alex Chistyakov
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
Ontico
 
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
Ontico
 
Remote Highload
Remote HighloadRemote Highload
Remote Highload
Andrey Smirnov
 
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ontico
 
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страницFrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
FrontDays
 
Диагностика postgresql для системного администратора
Диагностика postgresql для системного администратораДиагностика postgresql для системного администратора
Диагностика postgresql для системного администратора
Nikolay Sivko
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Колёса Крыша Маркет
 
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Mad Devs
 
Екатерина Войденко "Горизонтальное масштабирование MySQL"
Екатерина Войденко "Горизонтальное масштабирование MySQL"Екатерина Войденко "Горизонтальное масштабирование MySQL"
Екатерина Войденко "Горизонтальное масштабирование MySQL"
Yandex
 
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Ontico
 
Ryazan
RyazanRyazan
Юрий Цыганенко
Юрий ЦыганенкоЮрий Цыганенко
Юрий Цыганенко
SQALab
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
Daniel Podolsky
 
Tk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosqlTk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosql
Daniel Podolsky
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
Nikolay Sivko
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Ontico
 
Node JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решенияNode JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решения
Alexander Kucherenko
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Andrew Mayorov
 

What's hot (20)

My talk on administering PostgreSQL
My talk on administering PostgreSQLMy talk on administering PostgreSQL
My talk on administering PostgreSQL
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
 
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
 
Remote Highload
Remote HighloadRemote Highload
Remote Highload
 
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
 
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страницFrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Диагностика postgresql для системного администратора
Диагностика postgresql для системного администратораДиагностика postgresql для системного администратора
Диагностика postgresql для системного администратора
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
 
Екатерина Войденко "Горизонтальное масштабирование MySQL"
Екатерина Войденко "Горизонтальное масштабирование MySQL"Екатерина Войденко "Горизонтальное масштабирование MySQL"
Екатерина Войденко "Горизонтальное масштабирование MySQL"
 
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
 
Ryazan
RyazanRyazan
Ryazan
 
Юрий Цыганенко
Юрий ЦыганенкоЮрий Цыганенко
Юрий Цыганенко
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
 
Tk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosqlTk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosql
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
 
Node JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решенияNode JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решения
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.
 

Similar to Top-10 популярных вопросов администраторам баз данных или почему я против свободного оборота короткоствола. Highload++ 2013

2 bdw.key
2 bdw.key2 bdw.key
2 bdw.key
antishmanti
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
Slach
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Ontico
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
HappyDev
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
Alexey Zinoviev
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
IT-Portfolio
 
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Dev2Dev
 
Zabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discoveryZabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discovery
Badoo Development
 
С++ Optimization Techniques
С++ Optimization TechniquesС++ Optimization Techniques
С++ Optimization Techniques
GlobalLogic Ukraine
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Oleg Tsarev
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
etyumentcev
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
Alexander Syrotenko
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON
 

Similar to Top-10 популярных вопросов администраторам баз данных или почему я против свободного оборота короткоствола. Highload++ 2013 (20)

2 bdw.key
2 bdw.key2 bdw.key
2 bdw.key
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
 
Zabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discoveryZabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discovery
 
С++ Optimization Techniques
С++ Optimization TechniquesС++ Optimization Techniques
С++ Optimization Techniques
 
Pgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemianskyPgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemiansky
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 

Top-10 популярных вопросов администраторам баз данных или почему я против свободного оборота короткоствола. Highload++ 2013

  • 1. Top-­‐10    популярных  вопросов   администраторам  баз  данных  или   почему  я  против  свободного  оборота   короткоствола. Илья  Космодемьянский ik@postgresql-­‐consul@ng.com
  • 2. "— Военный, а нам оружие дадут? — Триста тридцать пять…" (c)ДМБ 2
  • 3. “Можно ли откатить commit? а в git’е можно” • Часто  транзакции  воспринимаются  разработчиками  как  некое   расширение  синтаксиса  SQL • Транзакции  -­‐  основа  базы  данных  а  не  дополнительная  фича • Буква  D  в  аббревиатуре  ACID • Страничная  модель  шедуллинга  транзакций,  причины  успеха • Транзакции  не  замедляют  обработку  данных  при  высоком   concurrency  degree,  а  наоборот  ускоряют  
  • 4. “SQL это медленно и архаично, давайте будем читать напрямую из таблицы?” • Что  значит  напрямую? • NoSQL  хорошо  бы  называть  NoACID   • Почему  любители  почитать  напрямую  не  любят  BerkeleyDB? • Упражнение:  перепишите  на  свой  любимый  язык  SQL  запрос  c     join,  order  by,  group  by. • Удобно?  Изящно?  Производительно?  Создатели  HQL,  HSQL,   OfoQL,  YQL  и  десятка  других  что  подобное  тоже  подозревают.
  • 5. Зачем нам нужно делать бэкап, у нас же есть слэйв. • Backup/recovery  vs.  High  availability   • Задача  backup’а  -­‐  корректное  восстановление  на  момент   последней  перед  аварией  успешной  транзакции • Талант  и  рвение:  кто-­‐то  сказал  DROP  TABLE  ...  CASCADE.
  • 6. "Нам нужно выводить 20 очень важных count(*) на главной странице..." • Почему  это  плохо? • Чего  именно  мы  хотим? • Нагрузка  на  базе  -­‐  10К  пишущих  транзакций  в  секунду,  какую  смысловую   нагрузку  несет  count(event_id)    равный  1298734297002?
  • 7. “Ну может все-таки можно?..” • SELECT  reltuples  FROM  pg_class  WHERE  oid  =  'my_schema.tbl'::regclass; • денормализуем  счетчик
  • 8. Мы создали индекс, почему он не используется? • Включен-­‐ли  сбор  статистики? • Что  эффективней  -­‐  index  scan  или  seq  scan? • <...>  where  posi•on-­‐1  <  10    -­‐  почему  оптимизатор  не  может  выполнить   такое  просто  действие?  А  дифур  решить?  А  интеграл  взять?  При   Джобсе  такого  не  было!  
  • 9. Можно-ли использовать join’ы? • Нужно • Альтарнативы:  in(...),  подзапрос,  join  в  приложении ◦ Откуда  оптимизатору  знать  что  попадет  в  in(...)? ◦ В  in(...)  внезапно  оказалось  200К  id ◦ Сколько  раз  надо  сходить  в  базу  за  данными,  чтобы  с’join’ить  5  таблиц? ◦ Алгоритмы  join’ов  имеют  разную  эффективность.  Реализуем  в   приложении  все?  Будем  выбирать?  Напишем  внешний  оптимизатор? • Когда  join  не  эффективен ◦ Для  hash  join  не  хватает  памяти,  для  nested  loop  -­‐  не  хватает  индексов ◦ Давайте  с’join’ним  255  таблиц...  и  запросто  может  быть  озадачен   выбором  255!  путей  join
  • 10. "Мне говорили что innodb можно так настроить, что будет быстрее чем Oracle..." - Почему  вы  так  думаете? Ну  оракл  он  для  более  серьезных  задач... В  смысле!?   Нуу...  он  тяжелый  и  неповоротливый,  у  него  дистрибутив  весит   2.6Gb...
  • 11. "Мне говорили что innodb можно так настроить, что будет быстрее чем Oracle..." • Смешно? • У  многих  сравнений  баз  данных  уровень  аргументации  примерно   такой  же • Бессмысленно  сравнивать  коробочные  версии • Не  сравнивайте  очевидные  вещи:  если  база  умеет  своими   средствами  параллельно,  асинхронно  утилизовать  16ти-­‐ канальный  SAN,  синтетические  тесты  I/O  против  базы,  которая   этого  не  умеет,  вырожденны  изначально
  • 12. “Давайте сделаем schemaless (или EAV), это позволит нам уйти от проблемы добавления колонок?” • В  наше  хранилище  ведь  всегда  будет  ходить  только  одно   приложение • Ну  появится  второе,  будем  выносить  в  конфиг  что  откуда  доставать   -­‐  хардкод  это  плохо! • А  если  приложения  будут  конфиг  слишком  интенсивно   использовать,  мы  на  него  мьютекс  повесим! • EAV  это  универсально,  дизайн  схемы  не  нужен.  Внезапно   появляется  аттрибут  нового  хитрого  типа... • Если  EAV  будет  тормозить,  мы  передем  на  новую,  прекрасную  и   светлую  базу  данных! • Или  назовем  EAV  ядром  и  будем  денормализовывать!
  • 13. Нам нужно реализовать Мультимастер репликацию • Чего  мы  хотим?  Катастрофоустойчивости?  Масштабирования  на   запись? • Mul•site  запись  это  2  Phase  Commit.  Вы  этого  действительно   хотите? • Различайте  bidirec•onal  репликацию  и  мультимастер  репликацию!   Почти  честную  мультимастер  репликацию  умеет  только  Oracle. • Катастрофоустойчивый  мультимастер  -­‐  дорого  и  сложно • Падение  одной  ноды  все  равно  ведет  к  проблемам • Master/Slave  +  грамотный  failover