1. Общие положения
2. Основная схема отработки запросов в СУБД Oracle
2.1. Схема взаимодействия с СУБД
2.2. Структуры СУБД в оперативной памяти
2.3. Области для обработки запросов SQL
2.4. Порядок обработки SQL-запросов
2.5. Пути снижения затрат на обработку запросов
2.6. Снижение затрат на обработку запросов в коде на PL/SQL
2.7. Механизм работы буфера блоков данных
2.7.1. Основные типы списков для буфера блоков
2.7.2. Правила версии 8 для попадания в LRU-список и удержания в нем
2.7.3. Правила версии 9 для попадания в LRU-список и удержания в нем
2.7.4. Изменение параметров буферизации (промежуточное решение между LRU-порядком и использованием счетчиков)
2.8. Некоторые детали выделения оперативной памяти для обработки SQL-запросов
3. Структуры хранения данных
3.1. Основные структуры хранения
3.1.1. Обычные сегменты данных таблиц
3.1.2. Кластеры
3.1.3. Сегмент LOB
3.2. Вспомогательные объекты и структуры хранения
3.2.1. Индексы
3.2.2. Материализованные представления данных (виртуальные таблицы)—materialized views
4. Основные методы доступа
4.1. Полный просмотр строк таблицы (TABLE ACCESS FULL)
4.2. Поиск строки по адресу из индекса (TABLE ACCESS BY INDEX ROWID)
4.3. Поиск в уникальном индексе (INDEX UNIQUE SCAN)
4.4. Поиск в индексе по диапазону (INDEX RANGE SCAN)
4.5. Полный быстрый просмотр адресов строк в индексе (INDEX FAST FULL SCAN)
4.6. Полный просмотр адресов в индексе (INDEX FULL SCAN)
5. Выявление проблемных запросов
5.1. Использование базовых и виртуальных таблиц словаря-справочника
5.1.1. Динамические таблицы
5.1.2. Пример определения запросов, потребляющих ресурсы СУБД более прочих
5.1.3. Просмотр незакрытых курсоров
5.1.4. Просмотр долгих запросов
5.1.5. Просмотр запросов, выдаваемых определенными участками приложения
5.2. Сценарии на SQL и PL/SQL, поставляемые Oracle
5.2.1. utlbstat.sql и utlestat.sql (все версии)
5.2.2. STATSPACK (версия 8.1.6 и выше)
5.2.3. AWR (версия 10 и выше)
5.3. Прочие полезные сценарии на SQL и PL/SQL
5.4. Специальные программные продукты
5.4.1. Продукты для администраторов
5.4.2. Продукты для разработчиков
6. Как узнать подробности обработки конкретного запроса
6.1. Команда EXPLAIN PLAN
6.1.1. Использование пакета DBMS_XPLAN для просмотра планов
6.2. Использование режима AUTOTRACE в SQL*Plus
6.3. Использование SQL Trace и программ TKPROF и TRCSESS
6.3.1. Параметры СУБД и служебные пакеты
6.3.2. Включение и отключение трассировки
6.3.3. Использование TKPROF и TRCSESS для выдачи результатов трассировки
6.3.4. Замечание по методологии
Возможности влиять на выполнение запросов
7. Конфигурирование хранимых объектов БД в Oracle (общие возможности)
7.1. Общее конфигурирование таблиц
7.1.1. Пересоздание или корректировка сегмента данных таблицы
7.1.2. Умолчательные свойства выполняемых с таблицами операций
7.2. Общее конфигурирование индексов
7.2.1. Пересоздание или корректировка сегмента индекса
7.2.2. Умолчательные свойства выполняемых с индексами операций
7.2.3. Свойства употребления индекса
7.3. Структуры хранения (сегменты) для объектов LOB
8. Некоторые специальные возможности конфигурирования объектов БД («особые случаи»)
8.1. Таблицы с раздельным хранением строк
8.2. Индексно организованные таблицы
8.3. Материализованные (овеществленные) представления данных (materialized view)
8.3.1. Пример с автоматической подменой запроса (Query Rewrite)
8.3.2. Усовершенствование доступа
8.4. Поразрядные индексы
8.5. Индекс с функциональным преобразованием ключа
8.5.1. Примеры преобразования ключа с помощью системных функций
8.5.2. Пример преобразования ключа с помощью функции, заданной пользователем
8.5.3. Использование виртуального столбца
8.6. Индекс с обращеннием ключа
8.7. Кластерная организация таблиц
8.7.1. Простые (индексированные) кластеры
8.7.2. Однотабличные кластеры с вычисляемым местом расположения строк
8.7.3. Многотабличные кластеры с вычисляемым местом расположения строк
8.8. Таблицы с временным хранением строк
9. Настройка запросов
9.1. Виды запросов
9.1.1. Простые запросы
9.1.2. Соединения
9.1.3. Подзапросы
9.1.4. Связаный подзапрос
9.1.5. Декартово произведение
9.1.6. Запросы с выдачей частичных итогов
9.1.7. Запрос для отбора «первых N» записей
9.1.8. Формулирование условий отбора строк
9.2. Разнообразие обработки запросов c одной формулировкой
9.2.1. Способы обработки соединения таблиц
9.2.2. Отбор строк таблицы
9.3. Оптимизатор запросов и способы влиять на план обработки
9.3.1. Оптимизатор запросов
9.3.2. Факторы влияния на вырабатываемые CBO планы
9.4. Способы воздействия на выбор оптимизатором плана
9.4.1. Использование факторов влияния на построение плана оптимизатором
9.4.2. Принуждение оптимизатора к готовым планам для запроса
10. Возможности автоматизации настройки запросов в версиях 10+
10.1. Обобщенное наблюдение за выполнением запросов SQL и за загрузкой СУБД средствами пакета DBMS_MONITOR
10.1.1. Единицы наблюдения
10.1.2. Установка единиц наблюдения и просмотр выбранных установок
10.1.3. Примеры отслеживания запросов SQL со стороны приложения и его фрагментов
10.1.4. Пример сбора статистики о запросах SQL в приложении
10.2. Настройка средствами пакета DBMS_SQLTUNE
10.2.1. Углубленный анализ запросов
10.2.2. Настройка отдельных запросов
10.2.3. Применимость профиля к иной записи текста запроса и подпись запроса
10.2.4. Получение рекомендаций в виде готового сценария
10.2.5. Настройка запроса по ссылке на область курсоров в SGA
10.2.6. Групповая настройка запросов
10.3. Автоматизация выполнения анализа и получения рекомендаций средствами пакета DBMS_ADVISOR
10.3.1. Общие сведения
10.3.2. Пример «быстрого» анализа запроса
10.3.3. Пример «полновесного» анализа запроса
10.4. Настроечные наборы запросов SQL
10.4.1. Примеры выдачи справочной информации
10.4.2. Создание, удаление, изменение свойств и наполнение настроечных наборов данными
10.4.3. Перенос данных настроечного набора
10.5. Средства OEM для настройки запросов
11. Средства автоматизации настройки запросов в версиях 11+
11.1. Анализатор производительности SQL и его использование средствами пакета DBMS_SQLPA
11.1.1. Подготовка настроечного набора
11.1.2. Выполнение исходного анализа производительности
11.1.3. Внесение изменений в рабочую среду
11.1.4. Выполнение повторного анализа
11.1.5. Сравнение производительности до и после внесения изменений
11.2. Сравнительное воспроизведение потока запросов приложения с помощью пакетов DBMS_WORKLOAD_CAPTURE/REPLAY
11.2.1. Подготовка ко сбору данных о запросах
11.2.2. Сбор данных о потоке запросов
11.2.3. Подготовка данных для последующего воспроизведения нагрузки
11.2.4. Подготовка среды для воспроизведения нагрузки
11.2.5. Воспроизведение рабочей нагрузки
11.2.6. Получение сравнительного отчета
11.2.7. Ограничения
11.3. Управление планами запросов с помощью пакета DBMS_SPM
11.3.1. Подготовка к примеру
11.3.2. Загрузка плана в базу управления запросами
11.3.3. Использование основной линии планов запроса оптимизатором CBO
11.3.4. Пополнение основной линии планов путем оценки планов
11.3.5. Прочие способы управления основной линией планов
12. Выполнение SQL-запросов в сети
12.1. Механизм выполнения запросов через сеть
12.2. Некоторые возможности оптимизации запросов в сети
12.2.1. Изменение параметра ARRAYSIZE
13. Способ хранения данных в табличных пространствах
13.1. Типы файлов БД
13.2. Хранение объектов БД на диске
13.2.1. Внутренняя организация хранения данных в табличных пространствах
13.2.2. Схемы автоматического выделения памяти в табличных пространствах
13.2.3. Искусственное увеличение и уменьшение объема сегмента
13.2.4. Управление памятью в сегменте: посредством списка свободных блоков или автоматическое (ASSM)
13.2.5. Устройство блока данных
13.3. Некоторые рекомендации по размещению файлов на дисках
Дополнительный материал
14. Операции массового добавления данных
15. Параметры СУБД, влияющие на работу оптимизатора запросов
16. Подсказки оптимизатору запросов
16.1. Подсказки выбора вида оптимизатора или корректировки его цели
16.2. Подсказки для метода доступа к данным
16.3. Подсказки алгоритму автоматического преобразования запросов
16.4. Подсказки для операций соединения
16.5. Подсказки для параллельной обработки запросов
16.6. Прочие подсказки
17. Выполнение анализа групп объектов
17.1. Сбор статистики об объектах хранения
17.2. Оптимизация выполнения анализа
17.3. Сохранение и восстановление статистики
17.4. Блокировка сбора статистики
Некоторые практические сценарии
18. Возможный подход к оптимизации сложных запросов
18.1. Пример сложного запроса (соединения)
18.2. Построение графа запроса
18.3. Размечивание графа весами
18.4. Определение последовательности соединения
18.5. Формулирование SQL-запроса
18.5.1. Вариант оптимизатора метода доступа
18.5.2. Вариант оптимизатора стоимости
19. Пример использования динамических таблиц для контроля и настройки участков кода программы
19.1. Подготовка рабочей среды
19.2. Метод сравнения
19.3. Пример использования методики на сравнении затрат использования внутренних ресурсов СУБД двумя SQL-запросами