0
Оптимизация производительности БД Денис Бесков-Доронин UML2.ru
Оптимизация БД
Что оптимизировать?
Внешние свойства <ul><li>Производительность </li></ul><ul><li>Масштабируемость </li></ul><ul><li>Надёжность </li></ul>
Внутренние свойства <ul><li>Модифицируемость </li></ul>
Что такое производительность?
Для IT-специалистов <ul><li>Время отклика </li></ul><ul><ul><li>Response </li></ul></ul><ul><li>Пропускная способность </l...
Для бизнес-пользователей <ul><li>Субъективное время реакции системы </li></ul>
Для владельца <ul><li>Количество обрабатываемых бизнес-операций в единицу времени </li></ul><ul><li>Количество одновременн...
Когда выполняется оптимизация?
Проактивно <ul><li>При проектировании, построении системы </li></ul><ul><ul><li>Make It Run, Make It Run, Make It Fast </l...
Реактивно <ul><li>В экстренном порядке </li></ul><ul><ul><li>&quot;Найти и обезвредить&quot; </li></ul></ul><ul><ul><li>Кт...
Почему именно БД?
Архитектура запроса в системе
Обзор типовой архитектуры многослойной системы <ul><li>Интерфейс, Внешние системы </li></ul><ul><li>Глобальная сеть </li><...
Путь выполнения запроса
Принципы оптимизации
Сокращение пути выполнения запросов <ul><li>DRI </li></ul><ul><ul><li>Кэширование </li></ul></ul>
Сокращение времени выполнения отдельной операции <ul><li>Распараллеливание (Увеличение числа обработчиков) </li></ul>
Методики оптимизации
Наивный экстенсив <ul><li>Процессор </li></ul><ul><li>Память </li></ul><ul><li>Диски </li></ul>
&quot;Метод научного тыка&quot; <ul><li>Содержание </li></ul><ul><li>Проблема эффективности </li></ul><ul><ul><li>Ищем где...
Метод R <ul><li>Aligning IT and business </li></ul><ul><li>Цель Голдратта </li></ul><ul><ul><li>&quot;Слабое звено&quot; <...
Техники оптимизации
Логика приложения <ul><li>Кэширование </li></ul><ul><ul><li>HTTP-кэширование </li></ul></ul><ul><ul><li>Кэширование шаблон...
Уровень доступа к данным (DAL) <ul><li>Стратегия доступа </li></ul><ul><li>Настройка SQL </li></ul>
Стратегия доступа <ul><li>Индексированный доступ </li></ul><ul><li>ORM </li></ul><ul><li>Хранимые процедуры </li></ul><ul>...
Настройка SQL <ul><li>Кэширование запроса </li></ul><ul><li>Кэширование результатов запроса </li></ul><ul><li>Правильное и...
Кэширование запроса <ul><li>Связанные переменные (Параметризация запросов) </li></ul><ul><ul><li>+ Безопасность! </li></ul...
Правильное использование SQL <ul><li>Операции над множествами VS циклы </li></ul>
Минимизация объёма данных <ul><li>Минимизация проекции: Явное перечисление столбцов VS квантор * </li></ul><ul><li>Минимиз...
Политика блокировок <ul><li>Ослабление политики </li></ul><ul><li>Частые фиксации транзакций </li></ul>
Использование специфических свойств СУБД <ul><li>Oracle Hierarchical Query </li></ul><ul><li>TOP command </li></ul><ul><li...
Использование оптимизатора <ul><li>Читаемая структура (ANSI JOINs) </li></ul><ul><li>Подсказки </li></ul><ul><li>Сбор стат...
Подсказки <ul><li>Порядок обхода таблиц </li></ul><ul><ul><li>Кардинальность и селективность каждой таблицы </li></ul></ul...
Пакетная обработка <ul><li>Отключение индексов, ключей и ограничений </li></ul><ul><li>Загрузка и удаление данных кусками,...
Операторы <ul><li>UNION VS UNION ALL </li></ul>
Интерфейс доступа <ul><li>Native interfaces against ODBC </li></ul>
Модель БД <ul><li>Логическая модель БД </li></ul><ul><li>Физическая модель БД </li></ul>
Логическая модель БД <ul><li>Денормализация </li></ul><ul><li>Истинный ERM VS ORM </li></ul><ul><li>Логическое секциониров...
Денормализация <ul><li>Хранимые представления только для чтения </li></ul><ul><ul><li>Materialized View </li></ul></ul><ul...
Логическое секционирование <ul><li>Вертикальное </li></ul><ul><li>Горизонтальное </li></ul><ul><ul><li>По таблицам </li></...
Политика удаления <ul><li>Замена мягкого удаления жёстким </li></ul>
Физическая модель БД <ul><li>Индексы </li></ul><ul><ul><li>Минимально необходимые </li></ul></ul><ul><ul><li>На внешние кл...
Физическая модель БД 2 <ul><li>Минимизация накладных расходов </li></ul><ul><ul><li>Удаление индексов и ограничений </li><...
Настройка СУБД <ul><li>Распределение файлов БД и журналов </li></ul><ul><li>Буферы памяти </li></ul><ul><li>Ограничение пу...
Файловая система <ul><li>RAID </li></ul><ul><li>SAN </li></ul><ul><li>Несколько дисков </li></ul>
Оборудование <ul><li>Память </li></ul><ul><li>Процессор </li></ul>
Инструменты профилирования
Тесты <ul><li>OLTP </li></ul><ul><ul><li>TPC-C </li></ul></ul><ul><ul><li>TPC-E </li></ul></ul><ul><li>DSS </li></ul><ul><...
Open Source <ul><li>JMeter </li></ul><ul><li>... </li></ul>
Commercial <ul><li>Rational Robot </li></ul><ul><li>Compuware QALoad </li></ul><ul><li>HP (Mercury) LoadRunner </li></ul>
Рекомендуемая литература
Upcoming SlideShare
Loading in...5
×

Database Tuning Method & Technics

2,479

Published on

Published in: Technology, Business
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,479
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
63
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Transcript of "Database Tuning Method & Technics"

  1. 1. Оптимизация производительности БД Денис Бесков-Доронин UML2.ru
  2. 2. Оптимизация БД
  3. 3. Что оптимизировать?
  4. 4. Внешние свойства <ul><li>Производительность </li></ul><ul><li>Масштабируемость </li></ul><ul><li>Надёжность </li></ul>
  5. 5. Внутренние свойства <ul><li>Модифицируемость </li></ul>
  6. 6. Что такое производительность?
  7. 7. Для IT-специалистов <ul><li>Время отклика </li></ul><ul><ul><li>Response </li></ul></ul><ul><li>Пропускная способность </li></ul><ul><ul><li>Throughput </li></ul></ul><ul><ul><li>Bandwidth </li></ul></ul>
  8. 8. Для бизнес-пользователей <ul><li>Субъективное время реакции системы </li></ul>
  9. 9. Для владельца <ul><li>Количество обрабатываемых бизнес-операций в единицу времени </li></ul><ul><li>Количество одновременно работающих пользователей </li></ul><ul><li>Степень удовлетворённости пользователей </li></ul>
  10. 10. Когда выполняется оптимизация?
  11. 11. Проактивно <ul><li>При проектировании, построении системы </li></ul><ul><ul><li>Make It Run, Make It Run, Make It Fast </li></ul></ul><ul><ul><li>Classic Engineering </li></ul></ul><ul><ul><ul><li>Performance Planning </li></ul></ul></ul><ul><ul><ul><li>Capacity Planning </li></ul></ul></ul><ul><ul><ul><li>Reliability Planning </li></ul></ul></ul><ul><ul><li>Кто: Системный архитектор </li></ul></ul><ul><li>Плановая </li></ul><ul><ul><li>Профилактика </li></ul></ul><ul><ul><li>Предупреждение </li></ul></ul><ul><ul><ul><li>Мониторинг </li></ul></ul></ul><ul><ul><li>Кто: Администрор БД / Системы </li></ul></ul>
  12. 12. Реактивно <ul><li>В экстренном порядке </li></ul><ul><ul><li>&quot;Найти и обезвредить&quot; </li></ul></ul><ul><ul><li>Кто: Аналитик по производительности </li></ul></ul>
  13. 13. Почему именно БД?
  14. 14. Архитектура запроса в системе
  15. 15. Обзор типовой архитектуры многослойной системы <ul><li>Интерфейс, Внешние системы </li></ul><ul><li>Глобальная сеть </li></ul><ul><li>Сервисный слой (логика приложения) </li></ul><ul><li>Локальная сеть </li></ul><ul><li>Бизнес-логика </li></ul><ul><li>Логика доступа к данным </li></ul><ul><ul><li>Структура запросов </li></ul></ul><ul><li>Интерфейс доступа к БД </li></ul><ul><ul><li>ODBC </li></ul></ul><ul><ul><li>Custom API </li></ul></ul><ul><li>Модель данных </li></ul><ul><ul><li>Логическая модель данных </li></ul></ul><ul><ul><li>Физическая модель данных </li></ul></ul><ul><li>СУБД </li></ul><ul><ul><li>Выделяемый пул </li></ul></ul><ul><ul><li>Режим работы </li></ul></ul><ul><li>ОС </li></ul><ul><ul><li>Процессы </li></ul></ul><ul><li>Оборудование </li></ul><ul><ul><li>Память </li></ul></ul><ul><ul><li>Диски </li></ul></ul><ul><ul><li>Процессор </li></ul></ul><ul><ul><li>Шина </li></ul></ul>
  16. 16. Путь выполнения запроса
  17. 17. Принципы оптимизации
  18. 18. Сокращение пути выполнения запросов <ul><li>DRI </li></ul><ul><ul><li>Кэширование </li></ul></ul>
  19. 19. Сокращение времени выполнения отдельной операции <ul><li>Распараллеливание (Увеличение числа обработчиков) </li></ul>
  20. 20. Методики оптимизации
  21. 21. Наивный экстенсив <ul><li>Процессор </li></ul><ul><li>Память </li></ul><ul><li>Диски </li></ul>
  22. 22. &quot;Метод научного тыка&quot; <ul><li>Содержание </li></ul><ul><li>Проблема эффективности </li></ul><ul><ul><li>Ищем где светло </li></ul></ul><ul><ul><li>Эффект от неважного до отрицательного </li></ul></ul>
  23. 23. Метод R <ul><li>Aligning IT and business </li></ul><ul><li>Цель Голдратта </li></ul><ul><ul><li>&quot;Слабое звено&quot; </li></ul></ul><ul><ul><li>Теория ограничений </li></ul></ul><ul><ul><li>Сценарий оптимизации </li></ul></ul><ul><ul><ul><li>Identify </li></ul></ul></ul><ul><ul><ul><li>Profile </li></ul></ul></ul><ul><ul><ul><li>ROI-based choosing </li></ul></ul></ul><ul><ul><ul><li>Tune </li></ul></ul></ul>
  24. 24. Техники оптимизации
  25. 25. Логика приложения <ul><li>Кэширование </li></ul><ul><ul><li>HTTP-кэширование </li></ul></ul><ul><ul><li>Кэширование шаблонов </li></ul></ul><ul><ul><li>Кэш объектов </li></ul></ul><ul><ul><li>Сетевое кэширование </li></ul></ul><ul><li>&quot;Ленивое&quot; чтение </li></ul><ul><ul><li>Минимум датасетов (.NET) </li></ul></ul><ul><li>Плоские файлы </li></ul><ul><li>Prefetching </li></ul>
  26. 26. Уровень доступа к данным (DAL) <ul><li>Стратегия доступа </li></ul><ul><li>Настройка SQL </li></ul>
  27. 27. Стратегия доступа <ul><li>Индексированный доступ </li></ul><ul><li>ORM </li></ul><ul><li>Хранимые процедуры </li></ul><ul><li>Последовательный доступ </li></ul><ul><li>Представления </li></ul><ul><li>Применение образцов проектирования доступа </li></ul><ul><li>Временные таблицы </li></ul>
  28. 28. Настройка SQL <ul><li>Кэширование запроса </li></ul><ul><li>Кэширование результатов запроса </li></ul><ul><li>Правильное использование SQL </li></ul><ul><li>Минимизация объёма данных </li></ul><ul><li>Политика блокировок </li></ul><ul><li>Использование специфических свойств СУБД </li></ul><ul><li>Использование оптимизатора </li></ul><ul><li>Пакетная обработка </li></ul><ul><li>Операторы </li></ul>
  29. 29. Кэширование запроса <ul><li>Связанные переменные (Параметризация запросов) </li></ul><ul><ul><li>+ Безопасность! </li></ul></ul><ul><ul><li>Порядок выполнения SQL-запроса </li></ul></ul><ul><ul><ul><li>Синтаксический разбор </li></ul></ul></ul><ul><ul><ul><li>Лексический разбор </li></ul></ul></ul><ul><ul><ul><li>Проверка прав доступа </li></ul></ul></ul><ul><ul><ul><li>Построение план выполнения </li></ul></ul></ul><ul><ul><ul><li>Доступ к данным </li></ul></ul></ul><ul><ul><ul><li>Извлечение </li></ul></ul></ul><ul><li>Минимизация динамического SQL </li></ul>
  30. 30. Правильное использование SQL <ul><li>Операции над множествами VS циклы </li></ul>
  31. 31. Минимизация объёма данных <ul><li>Минимизация проекции: Явное перечисление столбцов VS квантор * </li></ul><ul><li>Минимизация выборки (WHERE) </li></ul><ul><li>Кэширование результатов запроса </li></ul>
  32. 32. Политика блокировок <ul><li>Ослабление политики </li></ul><ul><li>Частые фиксации транзакций </li></ul>
  33. 33. Использование специфических свойств СУБД <ul><li>Oracle Hierarchical Query </li></ul><ul><li>TOP command </li></ul><ul><li>LIMIT </li></ul><ul><li>GROUP_CONCAT </li></ul>
  34. 34. Использование оптимизатора <ul><li>Читаемая структура (ANSI JOINs) </li></ul><ul><li>Подсказки </li></ul><ul><li>Сбор статистики </li></ul>
  35. 35. Подсказки <ul><li>Порядок обхода таблиц </li></ul><ul><ul><li>Кардинальность и селективность каждой таблицы </li></ul></ul><ul><li>Исключение индексов </li></ul><ul><li>Метод соединения </li></ul><ul><ul><li>Вложенные циклы </li></ul></ul><ul><ul><ul><li>Есть индексы </li></ul></ul></ul><ul><ul><ul><li>Результат необъёмен </li></ul></ul></ul><ul><ul><li>Сортировка слиянием </li></ul></ul>
  36. 36. Пакетная обработка <ul><li>Отключение индексов, ключей и ограничений </li></ul><ul><li>Загрузка и удаление данных кусками, а не целиком </li></ul>
  37. 37. Операторы <ul><li>UNION VS UNION ALL </li></ul>
  38. 38. Интерфейс доступа <ul><li>Native interfaces against ODBC </li></ul>
  39. 39. Модель БД <ul><li>Логическая модель БД </li></ul><ul><li>Физическая модель БД </li></ul>
  40. 40. Логическая модель БД <ul><li>Денормализация </li></ul><ul><li>Истинный ERM VS ORM </li></ul><ul><li>Логическое секционирование </li></ul><ul><li>Политика удаления </li></ul>
  41. 41. Денормализация <ul><li>Хранимые представления только для чтения </li></ul><ul><ul><li>Materialized View </li></ul></ul><ul><ul><li>Агрегаты </li></ul></ul><ul><ul><li>Соединения </li></ul></ul><ul><ul><li>Производные атрибуты </li></ul></ul><ul><li>Обновления </li></ul><ul><ul><li>Автоматически </li></ul></ul><ul><ul><ul><li>Триггер </li></ul></ul></ul><ul><ul><ul><li>Систематическая задача </li></ul></ul></ul><ul><ul><ul><li>MV Refresh </li></ul></ul></ul><ul><ul><li>Явно </li></ul></ul><ul><li>Замена кода типа булевыми признаками </li></ul>
  42. 42. Логическое секционирование <ul><li>Вертикальное </li></ul><ul><li>Горизонтальное </li></ul><ul><ul><li>По таблицам </li></ul></ul><ul><ul><li>По разным хостам (хэш) </li></ul></ul>
  43. 43. Политика удаления <ul><li>Замена мягкого удаления жёстким </li></ul>
  44. 44. Физическая модель БД <ul><li>Индексы </li></ul><ul><ul><li>Минимально необходимые </li></ul></ul><ul><ul><li>На внешние ключи </li></ul></ul><ul><ul><li>С высокой селективностью </li></ul></ul><ul><ul><li>Правильный порядок столбцов в составных индексах </li></ul></ul><ul><ul><li>Исключение дублей </li></ul></ul><ul><li>Секционирование </li></ul><ul><ul><li>По времени </li></ul></ul><ul><ul><li>По региону </li></ul></ul><ul><ul><li>По имени </li></ul></ul>
  45. 45. Физическая модель БД 2 <ul><li>Минимизация накладных расходов </li></ul><ul><ul><li>Удаление индексов и ограничений </li></ul></ul><ul><ul><li>Отключение / Выключение индексов и ограничений </li></ul></ul><ul><li>Кластеризация </li></ul><ul><li>Распределение файлов данных и индексов </li></ul><ul><li>Первичные ключи </li></ul><ul><ul><li>Замена составных ключей суррогатными </li></ul></ul><ul><li>DB Engine </li></ul><ul><ul><li>In-memory </li></ul></ul><ul><li>Типы данных </li></ul><ul><ul><li>Минимум длины </li></ul></ul><ul><ul><li>NOT NULL </li></ul></ul>
  46. 46. Настройка СУБД <ul><li>Распределение файлов БД и журналов </li></ul><ul><li>Буферы памяти </li></ul><ul><li>Ограничение пула соединений </li></ul><ul><li>Репликация </li></ul><ul><li>Просмотр системых представлений </li></ul>
  47. 47. Файловая система <ul><li>RAID </li></ul><ul><li>SAN </li></ul><ul><li>Несколько дисков </li></ul>
  48. 48. Оборудование <ul><li>Память </li></ul><ul><li>Процессор </li></ul>
  49. 49. Инструменты профилирования
  50. 50. Тесты <ul><li>OLTP </li></ul><ul><ul><li>TPC-C </li></ul></ul><ul><ul><li>TPC-E </li></ul></ul><ul><li>DSS </li></ul><ul><ul><li>TPC-H </li></ul></ul><ul><li>Apps & WS </li></ul><ul><ul><li>TPC-App </li></ul></ul>
  51. 51. Open Source <ul><li>JMeter </li></ul><ul><li>... </li></ul>
  52. 52. Commercial <ul><li>Rational Robot </li></ul><ul><li>Compuware QALoad </li></ul><ul><li>HP (Mercury) LoadRunner </li></ul>
  53. 53. Рекомендуемая литература
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×