Система Orphus

Oracle: Эффективное проектирование приложений

Автор: Кайт Т.
Издательство: Питер, 2006
800 страниц

Материал предоставил: Издательство ''Питер''
Найти в магазинах
Купить в Болеро (500 руб.)
Купить в издательстве "Питер"

Аннотация

Содержание

Аннотация

Эта книга предназначена для всей команды разработчиков Oracle -- группы людей, осуществляющих стопроцентный контроль над работой системы. В состав этой команды входят создатели модели данных, разработчики и штат администраторов базы данных. Подобный взгляд противоречит известному мифу о том, что администраторы базы данных полностью контролируют и отвечают за все аспекты работы приложений. Проведем аналогию с автогонками для того, чтобы понять ошибочность этого старого представления. Администратор базы данных (DBA) -- это рабочий, меняющий колеса, проверяющий работу двигателя и другие параметры машины. Если пригнать этому рабочему (DBA) Lincoln Navigator (большой грузовик) и сказать, что он будет принимать участие в гонках с Indy 500, то что произойдет? Безусловно, администратор все проверит и удостоверится, что колеса могут двигаться максимально быстро, но он не сможет ничего сделать для того, чтобы машина ехала со скоростью, большей, чем 100 миль в час. В действительности после того, как машина была спроектирована и создана, администратор не так уж много может сделать (а теперь замените машину приложением).

Содержание

Благодарности
Введение

Глава 1. Правильный подход к созданию приложений

Работа в команде
Роли администраторов базы данных и разработчиков
Чтение документации
Руководство к руководствам
Путеводитель по чтению
Избегайте синдрома черного ящика
Выбор между независимостью и зависимостью от базы данных
Опасности синдрома черного ящика
Это база данных, а не свалка данных
Использование первичного и внешнего ключей
Проверка издержек ссылочной целостности
Создание тестовой среды
Тестирование с использованием репрезентативных данных
Не стоит производить тестирование с одним пользователем
Не стоит производить тестирование в идеальных условиях
Проектирование производительности: не настраивайте производительность
Не стоит использовать универсальные модели данных
Проектирование эффективной модели данных
Определяйте цели производительности в самом начале
Используйте понятную, специализированную систему показателей
Собирайте и регистрируйте показатели во времени
Не стоит что-то делать только потому, что ''все знают, что это нужно''
Об оценке производительности снова и снова
Краткосрочная оценка производительности
Долгосрочная оценка производительности
Инструментирование системы
Трассировка asktom.oracle.com
Инструментальное средство удаленной отладки
Использование DBMS_APPLICATION_INFO
Использование DEBUG.F в PL/SQL
Настройка SQL_TRACE в приложении
Использование стандартных API
Построение собственной подпрограммы
Слово ''аудит'' не является непристойным
Вопрос авторства
Следует остерегаться универсального ''лучше''
Подозрительные коэффициенты и другие мифы
Не стоит искать коротких путей
Чем проще, тем лучше
Рассмотрение альтернативных методов
Стоит позволить базе данных делать то, для чего она предназначена
Использование поставляемой функциональности
Мы слышали, что возможность X работает медленно
Мы слышали, что применять средство Х очень сложно
Мы не хотим...
Мы не знаем...
Мы хотим быть независимыми от базы данных
Итоги

Глава 2. Инструменты для настройки производительности

SQL*Plus
Установка SQL*Plus
Настройка среды SQL*Plus
Читайте документацию!
EXPLAIN PLAN
Установка EXPLAIN PLAN
Использование EXPLAIN PLAN
Как читать план запроса
Возможности EXPLAIN PLAN
Использование DBMS_XPLAN и V$SQL_PLAN
AUTOTRACE
Установка AUTOTRACE
Использование AUTOTRACE
Форматирование выходных данных AUTOTRACE
Исследование выходных данных AUTOTRACE
Сведения, содержащиеся в выходных данных AUTOTRACE
TKPROF
Включение TKPROF
Запуск TKPROF
Чтение отчета TKPROF
TKPROF для всех
Runstats
Установка Runstats
Использование Runstats
Statspack
Установка Statspack
Использование Statspack
Ошибки в применении Statspack
Краткий обзор работы Statspack
DBMS_PROFILER
Назначение профайлера
Источники информации по профайлеру
JDeveloper (и отладка)
Итоги

Глава 3. Архитектурные решения

Совместно используемый сервер и выделенный сервер
Как работает соединение с выделенным сервером
Как работает соединение с совместно используемым сервером
Неправильные представления о соединении совместно используемогосервера
Подведение итогов
Преимущества кластеризации
Принцип работы RAC
Преимущества использования RAC
Подведение итогов по кластеризации
Применение секционирования
Концепция секционирования
Мифы о секционировании
Причины использования секционирования
Подведение итогов по секционированию
Использование параллельных операций
Миф о параллельных операциях
Параллельное администрирование
Параллельный запрос
Параллельный DML
DIY-параллелизм
Подведение итогов по параллельной обработке
Итоги

Глава 4. Эффективное администрирование

Использование SPFILE для запуска базы данных
Сложности с применением PFILE
Принципы работы SPFILE
Преобразование базы данных для использования SPFILE
Сохранение изменений системных параметров
Устарел ли PFILE?
Помогите, поврежден мой файл SPFILE, и я не могу запустить базу данных
Подведение итогов по SPFILE
Разрешите Oracle управлять базой данных
Область применения OMF
Принципы работы OMF
Подведение итогов по OMF
Восстановление данных
Указания по резервному копированию
Подведение итогов по дублированию и восстановлению
Использование локально управляемых табличных пространств
Почему устарело DMT?
Следует применять управляемые системой LMT, если неизвестно,насколько большими будут размеры объектов
Следует использовать экстенты одинакового размера,если известен максимальный размер объекта
Некоторые предосторожности относительно LMT
Подведение итогов по LMT и DMT
Разрешите Oracle управлять пространством в сегменте
Списки свободных мест и группы списков свободных мест
Управление списками свободных мест с помощью PCTFREE и PCTUSED
Применение ASSM
Подведение итогов по ASSM
Разрешите Oracle управлять сегментами отката
Установка UNDO_RETENTION
Предостережение по поводу применения табличного пространства UNDO
Подведение итогов по работе с табличным пространством UNDO
Итоги

Глава 5. Обработка операторов 244

Типы операторов SQL
Выполнение команд
Анализ
Оптимизация и генерация источника строк
Выполнение
Подведение итогов по выполнению операторов
Запросы - от начала до конца
Быстрый запрос
Медленный запрос
Согласованные чтения
Операторы изменения данных DML - от начала до конца
Обработка DDL
Использование переменных привязки
Преимущества использования переменных привязки
Использование переменных привязки в Java и VB
Из каждого правила существуют исключения
Считывание переменных привязки
Как можно меньше анализа
Стоимость анализа
Использование PL/SQL для сокращения разбора
Изъятие SQL из триггеров для сокращения анализа
Однократная подготовка, многократное выполнение
Итоги

Глава 6. Эффективное применение оптимизатора, основанного на стоимости 304

Недостатки RBO
Настройка работы стоимостного оптимизатора
Настройка параметров OPTIMIZER_INDEX_CACHINGи OPTIMIZER_INDEX_COST_ADJ
Использование системной статистики
Оптимизация использования СВО
Использование параметра COMPATIBLE для обновлений
Применение параметра DB_FILE_MULTIBLOCK_READ_COUNTдля снижения стоимости полного сканирования
Установка параметра HASH_JOIN_ENABLEDдля управления соединениями методом хеширования
Установка параметра OPTIMIZER_DYNAMIC_SAMPLINGдля динамического сбора статистики
Установка параметра OPTIMIZER_FEATURES_ENABLEдля управления выбором возможностей
Использование параметра OPTIMIZER_MAX_PERMUTATIONSдля управления перестановками
Использование параметра OPTIMIZER_MODE для установки режима
Параметры QUERY_REWRITE_ENABLED и QUERY_REWRITE_INTEGRITY
Параметры BITMAP_MERGE_AREA_SIZE, SORT_AREA_SIZEи HASH_AREA_SIZE для управления памятью PGA
Параметр STAR_TRANSFORMATION_ENABLED
Установка других параметров, воздействующих на оптимизатор
Использование события 10053 для трассировки выбора стоимостногооптимизатора
Итоги

Глава 7. Проектирование эффективной схемы

Базовые принципы проектирования схемы
Применение целостности данных
Использование адекватного типа данных
Оптимизация схемы данных для наиболее часто выполняемых запросов
Типы таблиц
Таблицы, кластеризованные с помощью индекса на основе В*-дерева
Создание кластеров
Использование кластеров
Подведение итогов по кластерам
Таблицы с индексной организацией (IOT)
Использование таблиц с индексной организацией в качестве болеекомпактной альтернативы ассоциативным таблицам
Использование таблиц с индексной организациейдля совместного размещения данных, вставляемых в случайном порядке
Подведение итогов по таблицам с индексной организацией
Внешние таблицы
Настройка внешних таблиц
Изменение внешних таблиц
Использование внешних таблиц для прямой загрузки
Использование внешних таблиц для параллельной прямой загрузки
Использование внешних таблиц для слияния
Обработка ошибок
Методы индексации
Использование индексов, основанных на функции, - правильныйподход
Использование доменных индексов
Сжатие
Сжатие индексного ключа
Использование сжатия для таблиц только для чтения и таблицдля преимущественного чтения
Подведение итогов по сжатию
Итоги

Глава 8. Эффективное применение языка SQL

Что требуется для написания эффективного SQL
Способы доступа к данным
Полное сканирование
Полное сканирование и число чтений множества блоков
Доступ по ROWID
Сканирование индекса
Сканирование кластера
Соединения
Вложенный цикл
Соединение методом хеширования
Соединение сортировкой-слиянием
Декартово соединение
Антисоединения
Полное внешнее соединение
Особенности физической схемы
Использование возможностей языка SQL
Псевдостолбец ROWNUM
Скалярные подзапросы
Аналитические функции
Не нужно настраивать производительность отдельного запроса
Понимание вопроса
Пример, подтверждающий концепцию
Краткий обзор других методик SQL
Итоги

Глава 9. Эффективное программирование на PL/SQL

Выбор PL/SQL
PL/SQL - самый эффективный язык обработки данных
Возможности переноса и повторного использования PL/SQL
Следует писать как можно меньше кода
Не следует выполнять это процедурно
Весь код должен умещаться на экране
Использование пакетов
Преимущества применения пакетов
Разрыв цепочки зависимых соединений
Подведение итогов по применению пакетов
Использование статического SQL
Преимущества статического SQL
Поиск возможностей для замены динамического SQL
Подведение итогов по применению статического SQL
Массовая обработка
Эффект, достигаемый при массовой обработке
Использование массовой обработки для ETL-операций
Подведение итогов по массовой обработке
Возврат данных
Преимущества ссылочного курсора
Использование ссылочного курсора для возврата результирующегонабора
Использование атрибутов %TYPE и %ROWTYPE
Определение типов записей, исходя из таблицы
Определение типов записи, исходя из курсора
Определение типов данных, исходя из столбца
Использование права вызывающего
Права вызывающего и множественные схемы
Критерии для программы, выполняющейсяс правами вызывающего
Эффективная работа по выполнению поиска
Выборка единственной строки для поиска
Выполнение поиска с помощью массовой обработки
Выполнение поиска с помощью единственного оператора
Подведение итогов по выполнению поиска
Использование автономных транзакций
Критерии для автономных транзакций
Влияние автономных транзакций на целостность данных
Выбор между явным и неявным курсором
Использование неявного курсора для выборкиединственной строки
Применение неявного курсора для результирующего наборас ограниченным числом строк
Подведение итогов по применению явных/неявных курсоров
Итоги

Глава 10. Итак, возникла проблема

Определите, что изменилось
Сегодня же начните собирать архив
Работа детектива
Изменяйте элементы по одному
Изменяйте элементы только при наличии веских причин
Определите цель
Подтверждайте гипотезы
Обеспечьте возможность отмены изменений
Создайте тестовый пример
Требования к тестовому примеру
Тестовый пример должен быть как можно меньше
Итоги

Приложение. Настройка и некоторые сценарии

Настройка BIG_TABLE
Часто используемые сценарии
PRINT_TABLE
SHOW_SPACE
COLS_AS_ROWS
GEN_DATA