14
Top$10 популярных вопросов администраторам баз данных или почему я против свободного оборота короткоствола. Илья Космодемьянский ik@postgresql<consul@ng.com

Илья Космодемьянский, PostgreSQL-Consulting.com

  • Upload
    ontico

  • View
    962

  • Download
    5

Embed Size (px)

DESCRIPTION

HighLoad++ 2013

Citation preview

Page 1: Илья Космодемьянский, PostgreSQL-Consulting.com

Top$10''популярных'вопросовадминистраторам'баз'данных'или

почему'я'против'свободного'оборотакороткоствола.

Илья%Космодемьянскийik@postgresql<[email protected]

Page 2: Илья Космодемьянский, PostgreSQL-Consulting.com

2

"— Военный, а нам оружие дадут?— Триста тридцать пять…"

(c)ДМБ

Page 3: Илья Космодемьянский, PostgreSQL-Consulting.com

“Можно ли откатить commit? а в git’е можно”

Часто&транзакции&воспринимаются&разработчиками&как&некоерасширение&синтаксиса&SQL

Транзакции&:&основа&базы&данных&а&не&дополнительная&фича

Буква&D&в&аббревиатуре&ACID

Страничная&модель&шедуллинга&транзакций,&причины&успеха

Транзакции&не&замедляют&обработку&данных&при&высокомconcurrency&degree,&а&наоборот&ускоряют

•••

Page 4: Илья Космодемьянский, PostgreSQL-Consulting.com

“SQL это медленно и архаично, давайте будемчитать напрямую из таблицы?”

Что$значит$напрямую?NoSQL$хорошо$бы$называть$NoACID$Почему$любители$почитать$напрямую$не$любят$BerkeleyDB?Упражнение:$перепишите$на$свой$любимый$язык$SQL$запрос$c$join,$order$by,$group$by.Удобно?$Изящно?$Производительно?$Создатели$HQL,$HSQL,O`oQL,$YQL$и$десятка$других$что$подобное$тоже$подозревают.

••••

Page 5: Илья Космодемьянский, PostgreSQL-Consulting.com

Зачем нам нужно делать бэкап, у нас же есть слэйв.Backup/recovery-vs.-High-availability-Задача-backup’а-<-корректное-восстановление-на-моментпоследней-перед-аварией-успешной.транзакцииТалант-и-рвение:-кто<то-сказал-DROP-TABLE-...-CASCADE.

••

Page 6: Илья Космодемьянский, PostgreSQL-Consulting.com

"Нам нужно выводить 20 очень важных count(*) на главной странице..."

Почему'это'плохо?Чего'именно'мы'хотим?Нагрузка'на'базе'9'10К'пишущих'транзакций'в'секунду,'какую'смысловуюнагрузку'несет'count(event_id)''равный'1298734297002?

•••

Page 7: Илья Космодемьянский, PostgreSQL-Consulting.com

“Ну может все-таки можно?..”

SELECT&reltuples&FROM&pg_class&WHERE&oid&=&'my_schema.tbl'::regclass;денормализуем&счетчик•

Page 8: Илья Космодемьянский, PostgreSQL-Consulting.com

Мы создали индекс, почему он не используется?Включен-ли сбор статистики?

Что эффективней - index scan или seq scan?

<...> where position-1 < 10 - почему оптимизатор не может выполнить такое просто действие? А дифур решить? А интеграл взять? При Джобсе такогоне было!

•••

Page 9: Илья Космодемьянский, PostgreSQL-Consulting.com

Можно-ли использовать join’ы?Нужно

Альтарнативы: in(...), подзапрос, join в приложении

Откуда'оптимизатору'знать'что'попадет'в'in(...)?В'in(...)'внезапно'оказалось'200К'idСколько'раз'надо'сходить'в'базу'за'данными,'чтобы'с’join’ить'5'таблиц?Алгоритмы'join’ов'имеют'разную'эффективность.'Реализуем'вприложении'все?'Будем'выбирать?'Напишем'внешний'оптимизатор?

Когда join не эффективен

Для'hash'join'не'хватает'памяти,'для'nested'loop'^'не'хватает'индексовДавайте'с’join’ним'255'таблиц...'и'запросто'может'быть'озадаченвыбором'255!'путей'join

◦◦◦◦

◦◦

Page 10: Илья Космодемьянский, PostgreSQL-Consulting.com

“Можно ли откатить commit? а в git’е можно”

Часто&транзакции&воспринимаются&разработчиками&как&некоерасширение&синтаксиса&SQL

Транзакции&:&основа&базы&данных&а&не&дополнительная&фича

Буква&D&в&аббревиатуре&ACID

Страничная&модель&шедуллинга&траназкций,&причины&успеха

Транзакции&не&замедляют&обработку&данных&при&высокомconcurrency&degree,&а&наоборот&ускоряют

•••

Page 11: Илья Космодемьянский, PostgreSQL-Consulting.com

"Мне говорили что innodb можно так настроить,что будет быстрее чем Oracle..."

Почему'вы'так'думаете?Ну'оракл'он'для'более'серьезных'задач...В'смысле!?'Нуу...'он'тяжелый'и'неповоротливый,'у'него'дистрибутив'весит2.6Gb...

----

Page 12: Илья Космодемьянский, PostgreSQL-Consulting.com

Смешно?У)многих)сравнений)баз)данных)уровень)аргументации)примернотакой)жеБессмысленно)сравнивать)коробочные)версииНе)сравнивайте)очевидные)вещи:)если)база)умеет)своимисредствами)параллельно,)асинхронно)утилизовать)16тиFканальный)SAN,)синтетические)тесты)I/O)против)базы,)котораяэтого)не)умеет,)вырожденны)изначально

••

••

"Мне говорили что innodb можно так настроить,что будет быстрее чем Oracle..."

Page 13: Илья Космодемьянский, PostgreSQL-Consulting.com

В"наше"хранилище"ведь"всегда"будет"ходить"только"одноприложениеНу"появится"второе,"будем"выносить"в"конфиг"что"откудадоставать"?"хардкод"это"плохо!А"если"приложения"будут"конфиг"слишком"интенсивноиспользовать,"мы"на"него"мьютекс"повесим!EAV"это"универсально,"дизайн"схемы"не"нужен."Внезапнопоявляется"аттрибут"нового"хитрого"типа...Если"EAV"будет"тормозить,"мы"передем"на"новую,"прекрасную"исветлую"базу"данных!Или"назовем"EAV"ядром"и"будем"денормализовывать!

“Давайте сделаем schemaless (или EAV), это позволит нам уйти от проблемы добавления колонок?”

Page 14: Илья Космодемьянский, PostgreSQL-Consulting.com

Чего%мы%хотим?%Катастрофоустойчивости?%Масштабирования%назапись?Mul@site%запись%это%2%Phase%Commit.%Вы%этого%действительнохотите?Различайте%bidirec@onal%репликацию%и%мультимастеррепликацию!%Почти%честную%мультимастер%репликацию%умееттолько%Oracle.Катастрофоустойчивый%мультимастер%]%дорого%и%сложно

Падение%одной%ноды%все%равно%ведет%к%проблемамMaster/Slave%+%грамотный%failover

•••

Нам нужно реализовать Мультимастер репликацию