Вредные советы о лучших способах убить производительность аналитической СУБД.
1. Передавайте много данных по сети.
2. Обрабатывайте лишние объемы данных.
3. Пренебрегайте мониторингом.
4. Никогда не используйте сжатие данных!
5. И, конечно же, забывайте про резервирование
3. Неравномерная загрузка узлов
Общая скорость = Скорость bottleneck
Что делать?
•Знай свои данные
•Физический дизайн: ключ распределения
•Подсказки оптимизатору: статистики, хинты
5. Передавать много данных по сети
• Data locality / Map Side Join
• Распределение по одинаковому ключу (JOIN, AGGREGATE, )
• Максимально фильтровать данные перед передачей по сети
6. Обрабатывать лишние объемы данных
• Full table scan
• Unnecessary IO
• Нет Predicate Pushdown
• Product Join Index
7. Обрабатывать лишние объемы данных
• Физический дизайн (храним отсортированные данные)
• Индексы, статистики – читаем только искомые данные
• Партиционирование (холодные – теплые - горячие)
8. Карт-бланш на доступ к ресурсам
• Ресурсные пулы (ETL, Analytics, BI, ...)
• Оптимизация по времени суток и задачам
• Отстрел «глупых» запросов
9. Не использовать сжатие данных
• Алгоритмы сжатия: LZO, BZIP, GZIP, LZ4
• Алгоритмы кодирования
10. Подвергать OLTP-нагрузке
• Накладные расходы на атомарные UPDATE / DELETE
• Найти нужную строку, перезаписать большой кусок данных
• Delete Vectors / Vacuum / Compaction
• Ограниченная поддержка транзакций и индексов
12. Пренебрегать мониторингом
• Без мониторинга система превратится в Черный Ящик
• Без возможности понять, что происходит внутри
• Определенные метрики и показатели укажут на корневые
причины проблем, а также способы их устранения