Слайд 2Краткое содержанние
Постановка задачи
Проблемы
Решение проблем
Слайд 4А зачем?
Поиск по связанным объектам
Проверка целостности
Слайд 7Task-Based система
Отмечаются изменения в ОБД
На основе изменений создаются задачи
Задачи обрабатываются
Данные синхронизируются в
РБД
Слайд 8Поиск по иерархическим данным
Создали схему
Создали индексы
Проверили, что всё работает быстро
Сдали в продакшн
Слайд 12Проблемы
Запросы на поиск выполняются по несколько минут
Данные синхронизируются с большой задержкой
Ребилд индексов
работает по 12 часов
Слайд 13Нагрузка
Было
1-2 M задач
~10 потоков
~10сек на поиск
1 мин на репликацию
Стало
50+ M задач
25 потоков
3+
мин на поиск
1+ час на репликацию
Слайд 15Оптимизация запросов
Денормализация
Настройка индексов
Рефакторинг запросов
Слайд 16Денормализация
Name: ParentNode
Name: Node A
Name: Node B
Type: A
Type: B
Слайд 17Настройка индексов
SQL Server Profiler
Execution Plan
Index Tuning Advisor
Index Tuning
Слайд 18Рефакторинг запросов
Все ли поля из запроса нужны
Все ли JOIN’ы нужны
Используйте Full Text
Search вместо LIKE
Пересмотрите работу с временными таблицами
Попробуйте разбить запрос
Слайд 19Запросы на поиск
Было
3 мин
Стало
< 30 сек
Слайд 20Переработка системы задач
Рефакторинг схемы
Рефакторинг алгоритма
Устранение блокировок
Слайд 22Рефакторинг алгоритма
Использование грязного чтения
Группировка задач
Отказ от TABLOCK’ов
Слайд 23Группировка задач
Node A – Data 1
Node A – Data 2
Node A –
Data 3
…
Node A – Data N
Слайд 24Устранение блокировок
Научились воспроизводить deadlock’и
Определили конфликтующие запросы
Переписали запросы
Слайд 26Что получилось?
Часть данных реплицируется за 1 минуту
Не критичные – за час
Слайд 28Не оставляйте технических долгов
Слайд 30Изучайте матчасть
Индексы
Уровни изоляции
Блокировки и взаимные блокировки
Планы выполнения