SlideShare a Scribd company logo
PostgreSQL
worst practices
Ilya Kosmodemiansky (ik@dataegret.com)
Best practices - это уныло 2
• Никогда им не следуйте, попробуйте worst practices
• Потомучто только worst practices позволяют по-настоящему все
испортить
• Будет о чем рассказать на Highload!
• Консультанты по PostgreSQL - милейшие люди, они будут довольны
dataegret.com
Как устроен этот доклад? 2
• У меня есть длинный список - больше 100 способов сделать больно
базе данных и себе
• Я ничего сам не придумал, это всё они!
• Обычно я выбираю случайный набор этих способов для доклада
• Ну на самом деле не вполне случайно - некоторые грабли я люблю
больше
• И потом некоторые грабли часто идут вместе
dataegret.com
0. Никогда не используйте индексы! (тестовый пример) 2
• И в самом деле - нет ни малейшей разницы между между seq scan и
index scan
• Это легко проверить: просто сделайте тестовую таблицу на 10 строк
на вашем тестовом сервере и сами убедитесь
• В продакшене у вас никогда не будет больше чем 10 строк!
dataegret.com
1. Чем больше count(*), тем лучше 3
• Цифра 301083021830123921 очень информативна и нужна вашим
пользователям
• Даже если через долю секунды она уже 30108302894839434020, это
по прежнему информативно и нужно
• select count(*) from sometable это простой и легкий для базы запрос
• Приблизительная оценка из pg_catalog конечно же недостаточно
точна для вас
dataegret.com
2. Используйте ORM 4
• Все базы данных используют единственный диалект SQL
• Код должен быть универсальным независимо от того, с какой базой
работаем
• Кто слышал о каких-то там специфичных для определенной СУБД
приемах улучшения прозводительности?
• Новая навороченная технология - это всегда здорово!
dataegret.com
3. JOIN’ам в базе не место! 5
• Просто достаем по select * пару таблиц целиком в приложение,
написанное на вашем любимом языке программирования
• Теперь джойним все это прямо в приложении
dataegret.com
3. JOIN’ам в базе не место! 5
• Просто достаем по select * пару таблиц целиком в приложение,
написанное на вашем любимом языке программирования
• Теперь джойним все это прямо в приложении
• Всё, что остается ”доделать” - это nested loop join, hash join и merge join
ну и оптимизатор да page cache
dataegret.com
4. Будь модным, будь schema-less 6
• Вам не нужно дизайнить схему
• Нужна просто одна таблица из двух колонок: id bigserial и extra jsonb
• Тип JSONB в PostgreSQL очень эффективный, его можно мучать
запросами точно так же как хорошо структурированную таблицу
• Даже если в каждый JSONB вы положите 100M JSON
• И даже если это будет 1000+ tps
dataegret.com
5. Будь гибким, используй EAV 7
• На самом деле нужно 3 таблицы: entity, attribute, value
dataegret.com
5. Будь гибким, используй EAV 7
• На самом деле нужно 3 таблицы: entity, attribute, value
• На каком-то этапе неизбежно понадобится 4я: attribute_type
dataegret.com
5. Будь гибким, используй EAV 7
• На самом деле нужно 3 таблицы: entity, attribute, value
• На каком-то этапе неизбежно понадобится 4я: attribute_type
• И когда это все начнет тормозить, просто назовите эти 4 таблицы
Ядро и добавьте к нему 1000+ денормализованных преставлений
dataegret.com
5. Будь гибким, используй EAV 7
• На самом деле нужно 3 таблицы: entity, attribute, value
• На каком-то этапе неизбежно понадобится 4я: attribute_type
• И когда это все начнет тормозить, просто назовите эти 4 таблицы
Ядро и добавьте к нему 1000+ денормализованных преставлений
• И если все же будет недостаточно меденно, добавьте value_version
dataegret.com
6. Чем больше создать индексов, тем лучше 8
• Индексы не занимают место на диске
• Индексы не не занимают место в shared_bufers
• С ростом количества индексов оверхэд на DML не растет
• Если вы создали индекс, оптимизатор конечно же будет его
использовать
• Keep calm and create more indexes
dataegret.com
7. Даже если вы решили настроить backup своей базы... 9
• Вы всегда можете использовать в качестве оного дополнительную
реплику
dataegret.com
7. Даже если вы решили настроить backup своей базы... 9
• Вы всегда можете использовать в качестве оного дополнительную
реплику
• Использовать pg_dump вместо pg_basebackup
dataegret.com
7. Даже если вы решили настроить backup своей базы... 9
• Вы всегда можете использовать в качестве оного дополнительную
реплику
• Использовать pg_dump вместо pg_basebackup
• Написать свой собственный управляющий скрипт
dataegret.com
7. Даже если вы решили настроить backup своей базы... 9
• Вы всегда можете использовать в качестве оного дополнительную
реплику
• Использовать pg_dump вместо pg_basebackup
• Написать свой собственный управляющий скрипт
• Чем сложней, чем лучше - возьмите побольше сторонних
приложений
dataegret.com
7. Даже если вы решили настроить backup своей базы... 9
• Вы всегда можете использовать в качестве оного дополнительную
реплику
• Использовать pg_dump вместо pg_basebackup
• Написать свой собственный управляющий скрипт
• Чем сложней, чем лучше - возьмите побольше сторонних
приложений
• И никогда, никогда не делайте тестовых восстановлений
dataegret.com
8. Первым делом выключите autovacuum 10
• Это просто вспомогательный процесс, его можно безболезненно
выключить
• Не будет никаких проблем если у вас в базе размером 1Tb всего
100Gb полезных данных
• 2-3Tb RAM сейчас стоят дешего, IO это самый дешевый ресурс в
современных компьютерах
• Ну и потом все любят BigData
dataegret.com
9. Никогда не архивируйте старые данные 11
• Time series данные (таблицы логов, статистика посещений) никогда
нельзя удалять, на всякий случай надо держать все!
dataegret.com
9. Никогда не архивируйте старые данные 11
• Time series данные (таблицы логов, статистика посещений) никогда
нельзя удалять, на всякий случай надо держать все!
• Во-первых, вы всегда будете знать куда смотреть, если закончилось
место на диске
dataegret.com
9. Никогда не архивируйте старые данные 11
• Time series данные (таблицы логов, статистика посещений) никогда
нельзя удалять, на всякий случай надо держать все!
• Во-первых, вы всегда будете знать куда смотреть, если закончилось
место на диске
• BigData опять-таки, будет о чем рассказать на Highload
dataegret.com
9. Никогда не архивируйте старые данные 11
• Time series данные (таблицы логов, статистика посещений) никогда
нельзя удалять, на всякий случай надо держать все!
• Во-первых, вы всегда будете знать куда смотреть, если закончилось
место на диске
• BigData опять-таки, будет о чем рассказать на Highload
• В конце концов вас всегда спасет партиционирование... partition на
каждый час или на каждую минуту - самое то
dataegret.com
10. Переизобретите Slony 12
• Если вам нужно реплицировать данные - реализуйте свой метод
репликации
dataegret.com
10. Переизобретите Slony 12
• Если вам нужно реплицировать данные - реализуйте свой метод
репликации
• Всегда есть минимум 10 аргументов, почему имеющиеся вам не
подходят
dataegret.com
10. Переизобретите Slony 12
• Если вам нужно реплицировать данные - реализуйте свой метод
репликации
• Всегда есть минимум 10 аргументов, почему имеющиеся вам не
подходят
• И это дает потрясающую возможность прочувствовать все проблемы
репликации в PostgreSQL которые случились с момента написания
Slony
dataegret.com
11. Мастер и реплика должны жить на разном железе 13
• Это повысит шансы, что failover пойдет как-то не так
dataegret.com
11. Мастер и реплика должны жить на разном железе 13
• Это повысит шансы, что failover пойдет как-то не так
• Чтобы было еще лучше - настройте на реплике только параметры
реплики, ну и оставьте дефолтные shared_buffers.
dataegret.com
12. Синхронную реплику - в другой ДЦ 14
• Ну конечно, high availability!
dataegret.com
12. Синхронную реплику - в другой ДЦ 14
• Ну конечно, high availability!
• Особенно, если реплика на другом континенте
dataegret.com
13. Никогда не используйте Foreign Keys 15
• Контроль целостности на стороне приложения всегда работает так,
как думают его авторы
• Никогда и ничего не будет потеряно, если у вас нет констрейнтов
• СУБД это проверенный веками framework для поддержания
целостности, но кого когда это останавливало?
dataegret.com
14. Самый правильный тип данных это text 16
• Всегда интересно написать свою валидацию дат или IP-адресов в
приложении
• Как еще переконвертировать ”12-31-2015 03:01AM” в например ”15:01
12 of undef 2015” используя специализированные типы?
dataegret.com
15. Всегда используйте ”улучшенную” версию PostgreSQL 17
• Ванильный PostgreSQL не идеален, кому как ни вам этого не знать
• Все вот это вот унылое MVCC, 32 bit xid и autovacuum, бессмысленный
и беспощадный, это потому что хакеры зашоренные ретрограды и не
видят гениального в простоте
• К черту их с их сообществом, напишите patch и сразу в продакшн
• У вас никогда не возникнет проблем бежать следом за развитеим
ванильного PostgreSQL
dataegret.com
16. Postgres любит динные транзакции 18
• Хранимка - это правильное место, откуда вызывать внешний сервис
dataegret.com
16. Postgres любит динные транзакции 18
• Хранимка - это правильное место, откуда вызывать внешний сервис
• Ну тут можно поспортить... можно было бы, если бы 100%
разработчиков знало слово таймаут
dataegret.com
16. Postgres любит динные транзакции 18
• Хранимка - это правильное место, откуда вызывать внешний сервис
• Ну тут можно поспортить... можно было бы, если бы 100%
разработчиков знало слово таймаут
• В любом случае, открыть транзакцию и пойти пить пиво всегда
хорошая идея
dataegret.com
17. Код надо писать, читать его не обязательно! 19
genre_id IN
( SELECT id FROM genres WHERE genres.id IN
(SELECT * FROM unnest(array[155]))
)
dataegret.com
18. Есть проблемы с PostgreSQL? 20
• Любые проблемы можно решить с помощью контейнеров!
dataegret.com
18. Есть проблемы с PostgreSQL? 20
• Любые проблемы можно решить с помощью контейнеров!
• Которые нельзя - надо решать с помощью облаков
dataegret.com
18. Есть проблемы с PostgreSQL? 20
• Любые проблемы можно решить с помощью контейнеров!
• Которые нельзя - надо решать с помощью облаков
• Оптимизация запросов - прошлый век!
dataegret.com
19. Переизобретать нужно не только Slony! 21
• Сконвертировать timestamp? Хранимая процедура на C!
dataegret.com
19. Переизобретать нужно не только Slony! 21
• Сконвертировать timestamp? Хранимая процедура на C!
• Очередь сообщений? Пишем свою!
dataegret.com
19. Переизобретать нужно не только Slony! 21
• Сконвертировать timestamp? Хранимая процедура на C!
• Очередь сообщений? Пишем свою!
• Не нашли подходящий ORM? Пишем свой на plpgsql
dataegret.com
20. Никогда не используйте exceptions! 22
• В документации написано что они всё замедляют
dataegret.com
20. Никогда не используйте exceptions! 22
• В документации написано что они всё замедляют
• Используйте raise notice при ошибках - все всегда читают логи!
dataegret.com
20. Никогда не используйте exceptions! 22
• В документации написано что они всё замедляют
• Используйте raise notice при ошибках - все всегда читают логи!
• Зачем вообещ приложению знать об ошибках?
dataegret.com
20. Никогда не используйте exceptions! 22
• В документации написано что они всё замедляют
• Используйте raise notice при ошибках - все всегда читают логи!
• Зачем вообещ приложению знать об ошибках?
• Лучше их вообще suppress!
dataegret.com
21. Приложению не хватает соединений с базой? 23
• Выставляем max_connections в 1000
dataegret.com
21. Приложению не хватает соединений с базой? 23
• Выставляем max_connections в 1000
• Ну да, сервера с 1000 CPU теперь дешевые
dataegret.com
21. Приложению не хватает соединений с базой? 23
• Выставляем max_connections в 1000
• Ну да, сервера с 1000 CPU теперь дешевые
• Оверхэд на создание worker’а PostgreSQL? Нет, не слышали!
dataegret.com
21. Приложению не хватает соединений с базой? 23
• Выставляем max_connections в 1000
• Ну да, сервера с 1000 CPU теперь дешевые
• Оверхэд на создание worker’а PostgreSQL? Нет, не слышали!
• И никогда, никогда не используйте pgbouncer!
dataegret.com
22. Вместо него используйте pgpool-II 24
• pgpool очень прост в использовании, особенно как пул...
dataegret.com
22. Вместо него используйте pgpool-II 24
• pgpool очень прост в использовании, особенно как пул...
• Почти как текстовый редактор в операционной системе Emacs...
dataegret.com
22. Вместо него используйте pgpool-II 24
• pgpool очень прост в использовании, особенно как пул...
• Почти как текстовый редактор в операционной системе Emacs...
• Простой конфиг, все фичи полезны
dataegret.com
22. Вместо него используйте pgpool-II 24
• pgpool очень прост в использовании, особенно как пул...
• Почти как текстовый редактор в операционной системе Emacs...
• Простой конфиг, все фичи полезны
• Как консультант, я его очень люблю!
dataegret.com
23. Всегда, начинайте настраивать PostgreSQL... 25
• С настроект оптимизатора в postgresql.conf
dataegret.com
23. Всегда, начинайте настраивать PostgreSQL... 25
• С настроект оптимизатора в postgresql.conf
• Забудьте про shared_buffers и checkpoint’ы!
dataegret.com
23. Всегда, начинайте настраивать PostgreSQL... 25
• С настроект оптимизатора в postgresql.conf
• Забудьте про shared_buffers и checkpoint’ы!
• geqo - вот с чего надо начинать!
dataegret.com
24. Новая классная фича? 26
• Сразу в продакшн!
dataegret.com
24. Новая классная фича? 26
• Сразу в продакшн!
• Кто знает про доклад MVCC Unmasked Брюса Момжана? ( Кто не
знает, найдите на YouTube)
dataegret.com
24. Новая классная фича? 26
• Сразу в продакшн!
• Кто знает про доклад MVCC Unmasked Брюса Момжана? ( Кто не
знает, найдите на YouTube)
• Там есть про метаколонки xmin и xmax
dataegret.com
24. Новая классная фича? 26
• Сразу в продакшн!
• Кто знает про доклад MVCC Unmasked Брюса Момжана? ( Кто не
знает, найдите на YouTube)
• Там есть про метаколонки xmin и xmax
• Постройте не них логику вашего приложения!
dataegret.com
25. Никогда не используйте графический мониторинг 27
• Графики не нужны!
• Вы и без них будете знать что произошло позавчера в 02:04 ночи с
bgwriter
dataegret.com
26. Загружайте данные в PostgreSQL изошренно! 28
• Напишите loader, 100 параллельных потоков минимум
dataegret.com
26. Загружайте данные в PostgreSQL изошренно! 28
• Напишите loader, 100 параллельных потоков минимум
• Никога не используйте COPY - эта штука специально
предназначена для этого
dataegret.com
Не забывайте 29
That was WORST practices talk
dataegret.com
Поделитесь своими любимыми worst practice! 30
ik@dataegret.com
dataegret.com

More Related Content

What's hot (20)

Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
CodeFest
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Ontico
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Ontico
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Ontico
 
RootConf 2015
RootConf 2015
Evgeny Uskov
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Ontico
 
Вячеслав Бахмутов
Вячеслав Бахмутов
CodeFest
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Ontico
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Ontico
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
CodeFest
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Ontico
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Ontico
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Ontico
 
Вячеслав Бахмутов
Вячеслав Бахмутов
CodeFest
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Ontico
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Ontico
 

Similar to PostgreSQL worst practices / Илья Космодемьянский (Data Egret) (20)

pgconf.ru 2017
pgconf.ru 2017
Andy Fefelov
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
Alex Chistyakov
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
EYevseyeva
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Where is the space, Postgres?
Where is the space, Postgres?
Alexey Ermakov
 
Optimization of a big PostgreSQL database
Optimization of a big PostgreSQL database
Alex Chistyakov
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Mail.ru Group
 
PostgreSQL performance recipes
PostgreSQL performance recipes
Alexey Ermakov
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
Ontico
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
Sergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
Sergey Xek
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Badoo Development
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"
Tanya Denisyuk
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Ilya Kosmodemiansky
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Ontico
 
Народные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQL
Nikolay Pisarev
 
Postgresql v509
Postgresql v509
luis perez
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
Nikolay Samokhvalov
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
Alex Chistyakov
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
EYevseyeva
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Where is the space, Postgres?
Where is the space, Postgres?
Alexey Ermakov
 
Optimization of a big PostgreSQL database
Optimization of a big PostgreSQL database
Alex Chistyakov
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Mail.ru Group
 
PostgreSQL performance recipes
PostgreSQL performance recipes
Alexey Ermakov
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
Ontico
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
Sergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
Sergey Xek
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Badoo Development
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"
Tanya Denisyuk
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Ilya Kosmodemiansky
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Ontico
 
Народные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQL
Nikolay Pisarev
 
Postgresql v509
Postgresql v509
luis perez
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
Nikolay Samokhvalov
 
Ad

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Ontico
 
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Ontico
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Ontico
 
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Ontico
 
Ad

PostgreSQL worst practices / Илья Космодемьянский (Data Egret)

  • 2. Best practices - это уныло 2 • Никогда им не следуйте, попробуйте worst practices • Потомучто только worst practices позволяют по-настоящему все испортить • Будет о чем рассказать на Highload! • Консультанты по PostgreSQL - милейшие люди, они будут довольны dataegret.com
  • 3. Как устроен этот доклад? 2 • У меня есть длинный список - больше 100 способов сделать больно базе данных и себе • Я ничего сам не придумал, это всё они! • Обычно я выбираю случайный набор этих способов для доклада • Ну на самом деле не вполне случайно - некоторые грабли я люблю больше • И потом некоторые грабли часто идут вместе dataegret.com
  • 4. 0. Никогда не используйте индексы! (тестовый пример) 2 • И в самом деле - нет ни малейшей разницы между между seq scan и index scan • Это легко проверить: просто сделайте тестовую таблицу на 10 строк на вашем тестовом сервере и сами убедитесь • В продакшене у вас никогда не будет больше чем 10 строк! dataegret.com
  • 5. 1. Чем больше count(*), тем лучше 3 • Цифра 301083021830123921 очень информативна и нужна вашим пользователям • Даже если через долю секунды она уже 30108302894839434020, это по прежнему информативно и нужно • select count(*) from sometable это простой и легкий для базы запрос • Приблизительная оценка из pg_catalog конечно же недостаточно точна для вас dataegret.com
  • 6. 2. Используйте ORM 4 • Все базы данных используют единственный диалект SQL • Код должен быть универсальным независимо от того, с какой базой работаем • Кто слышал о каких-то там специфичных для определенной СУБД приемах улучшения прозводительности? • Новая навороченная технология - это всегда здорово! dataegret.com
  • 7. 3. JOIN’ам в базе не место! 5 • Просто достаем по select * пару таблиц целиком в приложение, написанное на вашем любимом языке программирования • Теперь джойним все это прямо в приложении dataegret.com
  • 8. 3. JOIN’ам в базе не место! 5 • Просто достаем по select * пару таблиц целиком в приложение, написанное на вашем любимом языке программирования • Теперь джойним все это прямо в приложении • Всё, что остается ”доделать” - это nested loop join, hash join и merge join ну и оптимизатор да page cache dataegret.com
  • 9. 4. Будь модным, будь schema-less 6 • Вам не нужно дизайнить схему • Нужна просто одна таблица из двух колонок: id bigserial и extra jsonb • Тип JSONB в PostgreSQL очень эффективный, его можно мучать запросами точно так же как хорошо структурированную таблицу • Даже если в каждый JSONB вы положите 100M JSON • И даже если это будет 1000+ tps dataegret.com
  • 10. 5. Будь гибким, используй EAV 7 • На самом деле нужно 3 таблицы: entity, attribute, value dataegret.com
  • 11. 5. Будь гибким, используй EAV 7 • На самом деле нужно 3 таблицы: entity, attribute, value • На каком-то этапе неизбежно понадобится 4я: attribute_type dataegret.com
  • 12. 5. Будь гибким, используй EAV 7 • На самом деле нужно 3 таблицы: entity, attribute, value • На каком-то этапе неизбежно понадобится 4я: attribute_type • И когда это все начнет тормозить, просто назовите эти 4 таблицы Ядро и добавьте к нему 1000+ денормализованных преставлений dataegret.com
  • 13. 5. Будь гибким, используй EAV 7 • На самом деле нужно 3 таблицы: entity, attribute, value • На каком-то этапе неизбежно понадобится 4я: attribute_type • И когда это все начнет тормозить, просто назовите эти 4 таблицы Ядро и добавьте к нему 1000+ денормализованных преставлений • И если все же будет недостаточно меденно, добавьте value_version dataegret.com
  • 14. 6. Чем больше создать индексов, тем лучше 8 • Индексы не занимают место на диске • Индексы не не занимают место в shared_bufers • С ростом количества индексов оверхэд на DML не растет • Если вы создали индекс, оптимизатор конечно же будет его использовать • Keep calm and create more indexes dataegret.com
  • 15. 7. Даже если вы решили настроить backup своей базы... 9 • Вы всегда можете использовать в качестве оного дополнительную реплику dataegret.com
  • 16. 7. Даже если вы решили настроить backup своей базы... 9 • Вы всегда можете использовать в качестве оного дополнительную реплику • Использовать pg_dump вместо pg_basebackup dataegret.com
  • 17. 7. Даже если вы решили настроить backup своей базы... 9 • Вы всегда можете использовать в качестве оного дополнительную реплику • Использовать pg_dump вместо pg_basebackup • Написать свой собственный управляющий скрипт dataegret.com
  • 18. 7. Даже если вы решили настроить backup своей базы... 9 • Вы всегда можете использовать в качестве оного дополнительную реплику • Использовать pg_dump вместо pg_basebackup • Написать свой собственный управляющий скрипт • Чем сложней, чем лучше - возьмите побольше сторонних приложений dataegret.com
  • 19. 7. Даже если вы решили настроить backup своей базы... 9 • Вы всегда можете использовать в качестве оного дополнительную реплику • Использовать pg_dump вместо pg_basebackup • Написать свой собственный управляющий скрипт • Чем сложней, чем лучше - возьмите побольше сторонних приложений • И никогда, никогда не делайте тестовых восстановлений dataegret.com
  • 20. 8. Первым делом выключите autovacuum 10 • Это просто вспомогательный процесс, его можно безболезненно выключить • Не будет никаких проблем если у вас в базе размером 1Tb всего 100Gb полезных данных • 2-3Tb RAM сейчас стоят дешего, IO это самый дешевый ресурс в современных компьютерах • Ну и потом все любят BigData dataegret.com
  • 21. 9. Никогда не архивируйте старые данные 11 • Time series данные (таблицы логов, статистика посещений) никогда нельзя удалять, на всякий случай надо держать все! dataegret.com
  • 22. 9. Никогда не архивируйте старые данные 11 • Time series данные (таблицы логов, статистика посещений) никогда нельзя удалять, на всякий случай надо держать все! • Во-первых, вы всегда будете знать куда смотреть, если закончилось место на диске dataegret.com
  • 23. 9. Никогда не архивируйте старые данные 11 • Time series данные (таблицы логов, статистика посещений) никогда нельзя удалять, на всякий случай надо держать все! • Во-первых, вы всегда будете знать куда смотреть, если закончилось место на диске • BigData опять-таки, будет о чем рассказать на Highload dataegret.com
  • 24. 9. Никогда не архивируйте старые данные 11 • Time series данные (таблицы логов, статистика посещений) никогда нельзя удалять, на всякий случай надо держать все! • Во-первых, вы всегда будете знать куда смотреть, если закончилось место на диске • BigData опять-таки, будет о чем рассказать на Highload • В конце концов вас всегда спасет партиционирование... partition на каждый час или на каждую минуту - самое то dataegret.com
  • 25. 10. Переизобретите Slony 12 • Если вам нужно реплицировать данные - реализуйте свой метод репликации dataegret.com
  • 26. 10. Переизобретите Slony 12 • Если вам нужно реплицировать данные - реализуйте свой метод репликации • Всегда есть минимум 10 аргументов, почему имеющиеся вам не подходят dataegret.com
  • 27. 10. Переизобретите Slony 12 • Если вам нужно реплицировать данные - реализуйте свой метод репликации • Всегда есть минимум 10 аргументов, почему имеющиеся вам не подходят • И это дает потрясающую возможность прочувствовать все проблемы репликации в PostgreSQL которые случились с момента написания Slony dataegret.com
  • 28. 11. Мастер и реплика должны жить на разном железе 13 • Это повысит шансы, что failover пойдет как-то не так dataegret.com
  • 29. 11. Мастер и реплика должны жить на разном железе 13 • Это повысит шансы, что failover пойдет как-то не так • Чтобы было еще лучше - настройте на реплике только параметры реплики, ну и оставьте дефолтные shared_buffers. dataegret.com
  • 30. 12. Синхронную реплику - в другой ДЦ 14 • Ну конечно, high availability! dataegret.com
  • 31. 12. Синхронную реплику - в другой ДЦ 14 • Ну конечно, high availability! • Особенно, если реплика на другом континенте dataegret.com
  • 32. 13. Никогда не используйте Foreign Keys 15 • Контроль целостности на стороне приложения всегда работает так, как думают его авторы • Никогда и ничего не будет потеряно, если у вас нет констрейнтов • СУБД это проверенный веками framework для поддержания целостности, но кого когда это останавливало? dataegret.com
  • 33. 14. Самый правильный тип данных это text 16 • Всегда интересно написать свою валидацию дат или IP-адресов в приложении • Как еще переконвертировать ”12-31-2015 03:01AM” в например ”15:01 12 of undef 2015” используя специализированные типы? dataegret.com
  • 34. 15. Всегда используйте ”улучшенную” версию PostgreSQL 17 • Ванильный PostgreSQL не идеален, кому как ни вам этого не знать • Все вот это вот унылое MVCC, 32 bit xid и autovacuum, бессмысленный и беспощадный, это потому что хакеры зашоренные ретрограды и не видят гениального в простоте • К черту их с их сообществом, напишите patch и сразу в продакшн • У вас никогда не возникнет проблем бежать следом за развитеим ванильного PostgreSQL dataegret.com
  • 35. 16. Postgres любит динные транзакции 18 • Хранимка - это правильное место, откуда вызывать внешний сервис dataegret.com
  • 36. 16. Postgres любит динные транзакции 18 • Хранимка - это правильное место, откуда вызывать внешний сервис • Ну тут можно поспортить... можно было бы, если бы 100% разработчиков знало слово таймаут dataegret.com
  • 37. 16. Postgres любит динные транзакции 18 • Хранимка - это правильное место, откуда вызывать внешний сервис • Ну тут можно поспортить... можно было бы, если бы 100% разработчиков знало слово таймаут • В любом случае, открыть транзакцию и пойти пить пиво всегда хорошая идея dataegret.com
  • 38. 17. Код надо писать, читать его не обязательно! 19 genre_id IN ( SELECT id FROM genres WHERE genres.id IN (SELECT * FROM unnest(array[155])) ) dataegret.com
  • 39. 18. Есть проблемы с PostgreSQL? 20 • Любые проблемы можно решить с помощью контейнеров! dataegret.com
  • 40. 18. Есть проблемы с PostgreSQL? 20 • Любые проблемы можно решить с помощью контейнеров! • Которые нельзя - надо решать с помощью облаков dataegret.com
  • 41. 18. Есть проблемы с PostgreSQL? 20 • Любые проблемы можно решить с помощью контейнеров! • Которые нельзя - надо решать с помощью облаков • Оптимизация запросов - прошлый век! dataegret.com
  • 42. 19. Переизобретать нужно не только Slony! 21 • Сконвертировать timestamp? Хранимая процедура на C! dataegret.com
  • 43. 19. Переизобретать нужно не только Slony! 21 • Сконвертировать timestamp? Хранимая процедура на C! • Очередь сообщений? Пишем свою! dataegret.com
  • 44. 19. Переизобретать нужно не только Slony! 21 • Сконвертировать timestamp? Хранимая процедура на C! • Очередь сообщений? Пишем свою! • Не нашли подходящий ORM? Пишем свой на plpgsql dataegret.com
  • 45. 20. Никогда не используйте exceptions! 22 • В документации написано что они всё замедляют dataegret.com
  • 46. 20. Никогда не используйте exceptions! 22 • В документации написано что они всё замедляют • Используйте raise notice при ошибках - все всегда читают логи! dataegret.com
  • 47. 20. Никогда не используйте exceptions! 22 • В документации написано что они всё замедляют • Используйте raise notice при ошибках - все всегда читают логи! • Зачем вообещ приложению знать об ошибках? dataegret.com
  • 48. 20. Никогда не используйте exceptions! 22 • В документации написано что они всё замедляют • Используйте raise notice при ошибках - все всегда читают логи! • Зачем вообещ приложению знать об ошибках? • Лучше их вообще suppress! dataegret.com
  • 49. 21. Приложению не хватает соединений с базой? 23 • Выставляем max_connections в 1000 dataegret.com
  • 50. 21. Приложению не хватает соединений с базой? 23 • Выставляем max_connections в 1000 • Ну да, сервера с 1000 CPU теперь дешевые dataegret.com
  • 51. 21. Приложению не хватает соединений с базой? 23 • Выставляем max_connections в 1000 • Ну да, сервера с 1000 CPU теперь дешевые • Оверхэд на создание worker’а PostgreSQL? Нет, не слышали! dataegret.com
  • 52. 21. Приложению не хватает соединений с базой? 23 • Выставляем max_connections в 1000 • Ну да, сервера с 1000 CPU теперь дешевые • Оверхэд на создание worker’а PostgreSQL? Нет, не слышали! • И никогда, никогда не используйте pgbouncer! dataegret.com
  • 53. 22. Вместо него используйте pgpool-II 24 • pgpool очень прост в использовании, особенно как пул... dataegret.com
  • 54. 22. Вместо него используйте pgpool-II 24 • pgpool очень прост в использовании, особенно как пул... • Почти как текстовый редактор в операционной системе Emacs... dataegret.com
  • 55. 22. Вместо него используйте pgpool-II 24 • pgpool очень прост в использовании, особенно как пул... • Почти как текстовый редактор в операционной системе Emacs... • Простой конфиг, все фичи полезны dataegret.com
  • 56. 22. Вместо него используйте pgpool-II 24 • pgpool очень прост в использовании, особенно как пул... • Почти как текстовый редактор в операционной системе Emacs... • Простой конфиг, все фичи полезны • Как консультант, я его очень люблю! dataegret.com
  • 57. 23. Всегда, начинайте настраивать PostgreSQL... 25 • С настроект оптимизатора в postgresql.conf dataegret.com
  • 58. 23. Всегда, начинайте настраивать PostgreSQL... 25 • С настроект оптимизатора в postgresql.conf • Забудьте про shared_buffers и checkpoint’ы! dataegret.com
  • 59. 23. Всегда, начинайте настраивать PostgreSQL... 25 • С настроект оптимизатора в postgresql.conf • Забудьте про shared_buffers и checkpoint’ы! • geqo - вот с чего надо начинать! dataegret.com
  • 60. 24. Новая классная фича? 26 • Сразу в продакшн! dataegret.com
  • 61. 24. Новая классная фича? 26 • Сразу в продакшн! • Кто знает про доклад MVCC Unmasked Брюса Момжана? ( Кто не знает, найдите на YouTube) dataegret.com
  • 62. 24. Новая классная фича? 26 • Сразу в продакшн! • Кто знает про доклад MVCC Unmasked Брюса Момжана? ( Кто не знает, найдите на YouTube) • Там есть про метаколонки xmin и xmax dataegret.com
  • 63. 24. Новая классная фича? 26 • Сразу в продакшн! • Кто знает про доклад MVCC Unmasked Брюса Момжана? ( Кто не знает, найдите на YouTube) • Там есть про метаколонки xmin и xmax • Постройте не них логику вашего приложения! dataegret.com
  • 64. 25. Никогда не используйте графический мониторинг 27 • Графики не нужны! • Вы и без них будете знать что произошло позавчера в 02:04 ночи с bgwriter dataegret.com
  • 65. 26. Загружайте данные в PostgreSQL изошренно! 28 • Напишите loader, 100 параллельных потоков минимум dataegret.com
  • 66. 26. Загружайте данные в PostgreSQL изошренно! 28 • Напишите loader, 100 параллельных потоков минимум • Никога не используйте COPY - эта штука специально предназначена для этого dataegret.com
  • 67. Не забывайте 29 That was WORST practices talk dataegret.com