ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.






                         НПКО Мекомп при ММ СССР







                              ORACLE RDBMS

                         Performance Tuning Guide

                               Version 6.0



                               ПРЕДИСЛОВИЕ
                              ННННННННННННН

Система управления реляционными базами данных (СУБД)ОРАКЛ версия 6.0 - прек-
расно настраиваемая СУБД.  Вы можете улучшить исполнение бвзы данных регулиро-
вкой приложений,  самой базы данных и операционной системы.  Выполнение такой
регулировки известно как настройка. Правильная настройка ОРАКЛа обеспечит
наилучшее исполнение базы данных   для  ваших  специфических приложений  и
конфигурации аппаратных средств.

Это руководство предоставляет следующую информацию:

- полный пошаговый метод настройки ОРАКЛа версии 6.0 - объяснение
  исполнения диагностических средств, используемых при настройке СУБД
- рекомендации  для  наилучшего  исполнения  СУБД
- дополнительная информация по архитектуре  СУБД  ОРАКЛ,версия  6.0,
  относящаяся к настройке
- список параметров INIT.ORA,используемых при настройке СУБД

Это руководство дополняет руководящую настроечную информацию, содер-
жащуюся в руководстве администратора базы данных СУБД ОРАКЛ версии 6.0


                       Кому предназначено
                       ДДДДДДДДДДДДДДДДДД
Это руководство должно использоваться при индивидуальной ответственности за
управление, обслуживание и выполнение СУБД ОРАКЛ.  Это лицо обычно упоминается
как администратор базы данных или АБД.  Однако некоторая информация этого
руководства может быть полезна для проектировщиков прикладных задач.
Поскольку это руководство предназначено в основном для настройки СУБД,
прикладных задач и операционной системы, читатель должен быть компетентным в
каждой из этих областей. Читатель должен быть также знаком с руководством
Администратора Базы Данных (АБД) СУБД ОРАКЛ

               Как пользоваться этим руководством
               ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Глава 1. Обзор настройки.

Эта глава опишет в общих чертах шаги, необходимые при настройке.  Она сообщит
вам как выполнять шаги, описанные в последующих главах, и введет в настроечные



                                    -- 1 --



операции, обсуждаемые на каждом шаге.  Каждая из следующих четырех глав
соответствует одному шагу настроечного процесса. Читайте эти главы для полного
описания каждого шага.

Глава 2. Настройка SQL - запросов и приложений.

Эта глава поможет вам писать SQL запросы так,чтобы они выполнялись наиболее
эффективно в СУБД ОРАКЛ. Это также покажет вам как получить выгоду от
проектирования ОРАКЛ для того,чтобы улучшить прикладное исполнение. В этой
главе рассмотрены следующие темы:
- проектирование данных
- ОРАКЛ-оптимизатор
- индексы
- управление блокировкой на уровне записи
- PL/SQL
- генератор последовательности
- кластеры
- обработка массивов(Arrey Processing)
Эта глава будет развивать интересные приложения,особенно для АБД

Глава 3. Настройка распределения памяти.

Эта глава поможет вам распределить память для стуктур данных наиболее эффективно
Эти структуры включают:
- области контекстов
- КЭШ словаря данных
- КЭШ буферов

         Глава 4. Настройка ввода/вывода (I/O)

Эта глава объясняет как избежать узких мест ввода/вывода, которые могут
снизить производительность.  В этой главе вы научитесь:
- уменьшать конфликты
- распределять пространство в блоках данных
- избежать динамического изменения пространства

Глава 5. Разрешение конфликтных ситуаций

Эта глава обсуждает проблемы, возникающие при конфликтных ситуациях и помогает
вам понять когда эти проблемы случаются. В этой главе вы научитесь уменьшать
конфликты для:
- откатных сегментов
- защелок буфера журнала регистрации изменений

Глава 6. Дополнительные настроечные соображения.

Эта глава обсуждает специальные аспекты СУБД:
- сортировки
- свободные списки
- контрольные точки

Вам следует завершить настроечные шаги, представленные в главах с 1 по 5 перед
выполнением действий, описанных в этой главе.

       Глава 7. Выполнение диагностических процедур.




                                    -- 2 --



Эта глава обсуждает следующие средства, которые исполняет монитор
- SQL трассировка
- EP(EXPLAIN PLAN)оператор
Эти средства используются в настроечных процессах и на них ссылаются в главах
со 2 по 6 данного руководства.
Это руководство содержит также ссылочный материал,используемый при настройке.
Отсылаем к следующим приложениям данного руководства.

Приложение А. СУБД - инсталляционные инструкции.
Это приложение обсуждает инсталляцию и конфигурирование СУБД ОРАКЛ для
наилучшего использования.

Приложение В. Процесс записывания базы данных(DBWR).
DBWR-процесс - это основной процесс в ОРАКЛе, ответственный за управление
               КЭШем буферов
Информация в этом приложении применима к ОРАКЛ версия 6.0.27 и последующим
выпускам ОРАКЛ версии 6.0.

Приложение С. Изменение INIT.ORA параметров.
Это приложение обсуждает INIT .ORA параметры,актуальные при исполнении.
Настраивая вашу СУБД, можно использовать модификацию этих параметров.

                   Дополнительные сведения
                   ДДДДДДДДДДДДДДДДДДДДДДД
Т.к. большая часть этой инструкции посвящена методу настройки, многие
особенности базы данных обсуждались с точки зрения настройки СУБД. Более
детальное описание реализации этих особенностей представлено в Руководстве
администратора базы данных СУБД ОРАКЛ N 3601 версия 6.0. Прочтите материал
этого руководства прежде,чем двигаться дальше.  Главы, актуальные для
настройки, включают:
Глава 4  - Области таблиц и сегменты
Глава 5  - Пользовательское представление данных
Глава 7  - Словарь данных
Глава 8  - Структуры памяти ОРАКЛ
Глава 10 - Обработка SQL запросов
Глава 12 - Последовательность и параллелизм
Глава 16 - Управление пространством
Глава 19 - Улучшение использования приложений
Глава 20 - Настройка базы данных
Приложение В - Указатель SQL*DBA
ПРиложение D - Параметры INIT.ORA

Это руководство обсуждает настройку базы данных ОРАКЛ,что достаточно для
одного экземпляра ОРАКЛ.
Большая часть информации в этой инструкции также может быть использована для
совместно использующих дисковые системы баз данных или базы данных с
множественным доступом.
Информация по совместно применимым дисковым системам находится в главе 21 "
Совместимые дисковые системы баз данных" Руководства администратора базы
данных ОРАКЛ.
Многие особенности настройки, обсужденные в этом руководстве, разработаны с
SQL-операторами. Синтаксис всех SQL-операторов представлен в описании
SQL-языка, часть N 778 версия 6.0.
Настройка может иметь некоторые особенности, допустимые в прикладных средствах
ОРАКЛа, которые представлены в следующих описаниях:




                                    -- 3 --



- Указатель форм разработок SQL, часть N 3304 версия 3.0
  (SQL*Forms Desiner's Reference)
- Пользовательская инструкция и каталог, часть N 800 версия 1.0
  (PL/SQL USER's Guide and Reference)
- Инструкция программиста по прекомпиляции для ОРАКЛа,часть N 5135
  версия 1.3 (Programmer's Guide to the ORACLE Precompilers)
- Инструкия программиста по вызову интерфейса ОРАКЛа, часть N 5411
  версия 6.0 (Programmer'Guide to the ORACLE CALL Interfaces)
- Инструкция пользователя и каталог по SQL*PLUS,часть N 5142вер.3.0
  (SQL*Plus User's Guide and Reference)
- Инструкция пользователя по утилитам СУБД ОРАКЛ,часть N3602вер 6.0
  (ORACLE RDBMS Utilities User's Guide)

Специфическая настройка для вашей операционной системы дается в Инструкции
пользователя.

           Условности, используемые в этом руководстве

SQL-операторы     - пишутся таким же шрифтом, напр. SELECT EMPNO,ENAME FROM EMP

SQL*PLUS команды  - пишутся таким же шрифтом, но имеют преффикс SQL*PLUS,
                    напр.   SQL*Plus> SHOW ARRAYSIZE

SQL*DBA команды   - пишутся таким же шрифтом, но имеют преф-
                    фикс SQL*DBA, напр.
                    SQL*DBA> MONITOR LATCH

INIT.ORA параметры- Названия INIT.ORA параметров пишутся за-
                    главными буквами, напр.
                    DB_BLOCK_BUFFERS_LOG_SMALL_ENTRY_MAX_SIZE

Сообшения         - Сообщения пишутся в следующем виде,
                    например рекурсивный вызов:
                    Требуется время для ожидания запроса

Имена файлов      - Пишутся заглавными буквами, напр.
                    INIT.ORA

Главы,приложения  - Название частей руководства имеет вид,напр.
и разделы           "Выполнение тестовых программ"

                       С О Д Е Р Ж А Н И Е
Глава 1
       Обзор настройки
       Подготовка к настройке
       Шаги метода настройки

        1.Настройка SQL-параметров и приложений
        2.Настройка выделения памяти
        3.Настройка ввода/вывода
        4.Разрешение конфликтов
       Окончательная настройка

Глава 2
       Настройка SQL-операторов и приложений
       Настройка ваших-SQL операторов и приложений
       Изучение вашего приложения
         Консультация разработчика приложения и пользователей

                                    -- 4 --



       Использование тестовых программ ОРАКЛа
         Средства трассировки
         Оператор EXPLAIN PLAN

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

       Управление блокировкой на уровне записи
         Как блокировка на уровне записи улучшает исполнение
         Использование преимущества блокировки на уровне записи
         Программное управление блокировкой
       PL/SQL
         Блоки PL/SQL
         Преобразователь PL/SQL (engine)
         Как PL/SQL улучшает исполнение
           Преобразовпатель PL/SQL в СУБД ОРАКЛ
           Преобразователь PL/SQL в прикладных программах ОРАКЛа
         Использование PL/SQL в ваших приложениях

       Генератор последовательности
         Выполнение последовательных преобразований
           Пример последовательности
         Размещение в КЭШ-области последовательности чисел
         Количество элементов в SEQUENCE-КЭШе
         Количество значений в каждом SEQUENCE-КЭШ элементе

       Кластеры
         Как кластеры улучшают работу
         Выбор кластеров
         Упорядочивание таблиц в кластерах
         Управление областью кластеров
         Пример добавления кластеров

       Обработка массивов(Arrey Processing-AP)
         Как AP улучшает работу
         Выбор размеров массива
         Использование AP в ваших приложениях
         Использование AP при вызове компиляторов  ОРАКЛа
         Использование AP при вызове интерфейсов  ОРАКЛа (OCIs)


                                    -- 5 --



         Использование AP совместно c SQL*Plus
         Использование AP совместно с SQL*LOader
         Использование AP при загрузке/выгрузке утилит

Глава 3
       Настройка выделения памяти
       Важность выделения памяти
       Структуры памяти ОРАКЛа
         Контекстные области
         Система SGA
         КЭШ-память
       Порядок настройки выделения памяти
         Настройка вашей операционной системы
         Настройка парсинга и контекстных областей
         Настройка КЭШа словаря данных
         Настройка КЭШа буферов
       Настройка вашей операционной системы
         Уменьшение пэйджинга и свопинга
         Настройка системы SGA
         Выделение памяти пользователям
       Устранение ненужного парсинга
         Что такое парсинг?
         Контекстные области и курсоры
         Выявление ненужного парсинга
         Уменьшение парсинга
           Уменьшение парсинга в прекомпиляторах
           ОРАКЛа
           Уменьшение парсинга в ORACLE Call
           интерфейсах (OCIs)
           Преобразование синтаксиса SQL форм
         Выделение контекстных областей

       Настройка КЭШа словаря данных
         Что такое словарь данных?
         Что такое КЭШ словаря данных?
         Оценка работы КЭШа словаря данных
           Оценка рекурсивных вызовов
           Таблица V$ROWCACHE
           Запрос таблицы V$ROWCACHE
           Интерпретация таблицы V$ROWCACHE
         Уменьшение недостатков КЭШа словаря данных
         Уменьшение неиспользуемых элементов КЭШа словаря данных
       Настройка КЭШа буферов
         Что такое КЭШ буферов?
         Выгода использования КЭШа буферов
         Оценка работы КЭШа буферов
         Уменьшение недостатков КЭШа буферов
           Таблица X$KCBRBH
           Разрешение таблицы X$KCBRBH
           Запрос таблицы X$KCBRBH
           Группировка записей в таблице X$KCBRBH
         Удаление ненужных буферов
           Таблица X$KCBCBH
           Разблокировка таблицы X$KCBCBH
           Запрос таблицы X$KCBCBH
           Группировка записей в таблице X$KCBCBH
       Перераспределение памяти


                                    -- 6 --



Глава 4
       Настройка ввода/вывода
       Важность настройки ввода/вывода
       Процесс записи базы данных (DBWR)
       Уменьшение дисковых конфликтов
         Что такое дисковый конфликт?
           Слежение за обработкой дисковых запросов
           Слежение за обработкой ОРАКЛ-запросов диска
           Слежение за запросами диска операционной системы
         Распределение ввода/вывода
           Разделение файлов базы данных и файлов журнала регистрации изменений
           "Удаление" табличных данных
           Разделение таблиц и индексов
           Уничтожение прочих дисковых вводов/выводо

       Распределение пространства в блоках данных
         Формат блоков данных
         Управление областью блока данных
           Цепочно-связанные блоки
           Свободные списки
           Блоки данных в свободных списках
           Пример управления областью блока данных
         Выбор ограничений свободного пространств
           Выбор PCTFREE
           Выбор PCTUSED

       Исключение динамического управлени пространством
         Сегменты и экстенты
         Расширение сегмента
         Определение динамического расширения
         Выделение экстентов

Глава 5
       Настройка тупиковых ситуаций (конфликтов)
       Уменьшение конфликтов для откатных сегментов
         Что такое откатные сегменты?
         Обнаружение конфликта откатного сегмента
           Оценка конфликта буферов
           Динамическое выполнение таблицы V$WAITSTA
           Запрос V$WAITSTAT
           Уменьшение конфликтов буферов
         Создание откатных сегментов
         Выбор размеров для откатных сегментов
           Для длинных запросов и длинных транзакций
           Для OLTP приложений

       Уменьшение конфликтов для защелок буфера журнала регистраций изменений
       Буфер журнала регистраций изменений
           Процесс записи в журнал (LGWR)
           Пространство в буфере журнала регистрации изменений
         Защелки буфера журнала регистрации
           Распределительная защелка
           Защелки журнала копирования
         Проверка функционирования журнала
         регистрации изменений
         Уменьшение конфликта защелки



                                    -- 7 --



           Уменьшение конфликта распределительной защелки
           Уменьшение конфликтов для защелок журнала копирования
       Назначение приоритетов для всех ОРАКЛ процессов

Глава 6
       Дополнительные настроечные аспекты
       Настройка сортировок
         Виды сортировок
         Сортировка областей
         Выделение памяти для областей сортировки
           Распознавание больших сортировок
           Увеличение размера области сортировки
           Использование преимуществ больших областей сортировки
           Потери призводительности от больших областей сортировки
         Как избежать сортировок
           Опция NOSORT
           Когда использовать NOSORT опцию
       Уменьшение конфликтов свободных списков
         Свободные списки
         Распознавание конфликтов свободных списков
           Проверка буферного конфликта
           Таблица V$WAITSTAT
           Запрашивание V$WAITSTAT таблицы
           Уменьшение буферного конфликта
         Добавка свободных списков

       Настройка контрольных точек
         Задачи контрольных точек
           Для ремонта
           Для обслуживания журнала регистрации изменений
         Использование контрольных точек
         Как ОРАКЛ обрабатывает контрольные точки
         Как контрольные точки воздействуют на исполнение
           Отладочный режим
           Быстрый режим
         Изменение количества контрольных точек
           Изменение кол-ва контрольных точек

Глава 7
       Выполнение тестовых программ
       Возможности SQL трассировки
           Установка INIT.ORA параметров для SQL трассировки
           Разрешение трассировки для сеанса работы
           Разрешение трассировки для экземпляра
         SQL трассировка файлов и версий файлов
         Выполнение TKPROF
           Пример TKPROF
           Вывод TKPROF
           Статистические возможности трассировки SQ
           Рекурсивные вызовы

       EP оператор
         Создание выходной таблицы EP
         Синтаксис оператора EP
         Поля таблицы EP
         Пример вывода EP
           Формат таблицы вывода EP
           Вложенный формат вывода EP

                                    -- 8 --



Приложение А
       Инструкция по выполнению начальной инсталляции СУБД
       Изменение значений INIT.ORA параметров
       Выделение откатных сегментов
         Выбор размеров откатных сегментов
           Для длинных запросов и длинных
           транзакций
           Для OLTP приложений
       Распределение ввода/вывода

Приложение В
           Процесс записи базы данных (DBWR)
           Структура КЭШа буферов
             Списки КЭШа буферов
           Чтение данных в КЭШ буферов
           Запись данных в файлы базы данных
           Приказ DBWR на запись
           Программное управление DBWR
           Настройка DBWR

Приложение C
           Изменение INIT.ORA параметров
           CONTEXT_AREA
           CONTEXT_INCR
           CPU_COUNT
           КЭШ-параметры словаря данных
           DB_BLOCK_BUFFERS
           DB_BLOCK_LRU_EXTENDED_STATISTICS
           DB_BLOCK_LRU_STATISTICS
           DB_BLOCK_MAX_SCAN_CNT
           DB_BLOCK_SIZE
           DB_BLOCK_WRITE_BATCH
           DB_FILE_MULTIBLOCK_READ_COUNT
           FREE_LIST_INST
           FREE_LIST_PROC
           LOG_ALLOCATION
           LOG_BUFFER
           LOG_CHECKPOINT_INTERVAL
           LOG_ENTRY_PREBUILD_THRESHOLD
           LOG_SIMULTANEOUS_COPIES
           LOG_SMALL_ENTRY_MAX_SIZE
           VAX_DUMP_FILE_SIZE
           OPEN_CURSORS
           PROCESSES
           ROLLBACK_SEGMENTS
           ROW_LOCKING
           SEQUENCE_CACHE_ENTRIES
           SERIALIZABLE
           SORT_AREA_SIZE
           SORT_SPACEMAR_SIZE
           SQL_TRACE
           TIMED_STATISTICS
           USER_DUMP_DEST


     ГЛАВА 1
     ННННННН
                     ОБЗОР НАСТРОЙКИ.

                                    -- 9 --



                     ДДДДДДДДДДДДДДДД
СУБД ОРАКЛ - это великолепный и отлично настраиваемый программный продукт. Его
гибкость позволяет вам делать небольшие регулировки, что влияет на выполнение
базы данных. Настраивая вашу СУБД ОРАКЛ, вы сможете приспособить ее для ваших
нужд.

В этой главе вы выясните цели настроечного процесса. После выяснения целей вы
сможете намного легче выбрать настроечные действия в этом руководстве, которые
наиболее полезны вам.

Эта глава также представляет обзор настроечного метода, рекомендованного
ОРАКЛом. Этот метод содержит полный пошаговый процесс настройки ОРАКЛа версия
6.0. Данный обзор обсуждает область, важность и пользу каждого шага метода.

Если вы не настраивали ОРАКЛ версия 6.0 раньше, то вам нужно следовать шагам
метода по порядку. Этот метод позволит вам освоить настройку и продвинуться
вперед. Он также познакомит вас с выполнением тестовых программ, предлагаемых
ОРАКЛом.

Если вы уже знакомы с настройкой ОРАКЛа версии 6.0 или считаете,что знаете
какой части вашей СУБД нужно уделить внимание, эта глава поможет вам найти
специфическую информацию, в которой вы нуждаетесь.

Эта глава рассматривает также некоторые наиболее важные частные вопросы,
возникающие в процессе настройки ОРАКЛа. Эти вопросы помогают освоить процесс
настройки.

        ОПРЕДЕЛЕНИЕ ЦЕЛЕЙ НАСТРОЙКИ.
        ДДДДДДДДДДДДДДДДДДДДДДДДДДДД
До того как вы начнете настройку вашей СУБД ОРАКЛ вам следует определить цели
настройки. Эти цели должны вытекать из причин настройки.  Цели настройки могут
быть следующими:
- улучшить выполнение специальных SQLоператоров
- улучшить выполнение специальных приложений базы данных
- улучшить одновременное выполнение всех пользовательских задач и приложений
  СУБД ОРАКЛ

Имейте в виду ваши цели рассматривая каждое настроечное действие, описанное в
этом руководстве. Решая вопрос применения специальных действий, вам следует
оценить их полезность в свете ваших целей.
Имейте также в виду, что ваши цели могут быть противоречивыми. Например, чтобы
достичь наилучшего выполнения специальных SQLпараметров, вам,возможно придется
пожертвовать выполнением других SQLпараметров, выполняемых одновременно вашей
СУБД.

        ШАГИ НАСТРОЕЧНОЙ МЕТОДИКИ.
        ДДДДДДДДДДДДДДДДДДДДДДДДДД
Настройка состоит из четырех шагов. Каждый шаг описан в одной из
следующих глав:

- Шаг 1:   Глава 2.Настройка SQLоператоров и приложений.
- Шаг 2:   Глава 3.Настройка распределения памяти.
- Шаг 3:   Глава 4.Настройка ввода/вывода.
- Шаг 4:   Глава 5.Настройка конфликтов.

Эти шаги разработаны как модульные и независимые насколько возможно.
Например, преимущества настройки ввода/вывода в шаге 3 не связаны с
преимуществами решения конфликтов в шаге 4.

                                    -- 10 --



Однако решение, которое вы принимаете в одном шаге,может повлиять на
последующие шаги. Например, в шаге 1 вы можете переписать некоторые из ваших
SQL операторов. Эти SQL операторы могут иметь значение,от- ражающееся на
синтаксисе и КЭШ адресации следующего шага.

Также диск ввода/вывода, который настраивается в шаге 3 зависит от размеров
КЭШа буферов, который настраивается в шаге 2.  Шаги настроечного процесса,
которве имеют наибольшее влияние на другие шаги, появляются в настроечном
процессе в первую очередь. Поэтому вам следует выполнять шаги по порядку.

        Шаг 1. Настройка SQL операторов и приложений.
        ---------------------------------------------
Перед настройкой самой СУБД вам следует быть уверенным,что приложения
извлекают все преимущества  SQLязыка и особенности разработки ОРАКЛа, чтобы
ускорить выполнение приложений. Это является целью 1шага.

Первый шаг привлекает прикладные средства, которые улучшают выполнение
SQLоператоров и приложений. Вам следует использовать эти особенности,
основанные на потребностях ваших приложений:
- проектирование данных
- ОРАКЛ-оптимизатор
- индексы
- управление блокировкой на уровне записи
- PL/SQL
- генератор последовательности
- кластеры
- ARREY PROCESSING(обработка массивов)

        Шаг 2. Настройка распределения памяти.
        --------------------------------------
Правильное распределение памяти для ОРАКЛ структур памяти может иметь большое
воздействие на эффективное выполнение программ. В шаге два вы определите
сколько памяти выделить для следующих структур:
- области контекстов
- КЭШа словаря данных
- КЭШа буферов

Правильное распределение ресурсов памяти может принести следующие выгоды:
- улучшить КЭШ-выполнение
- уменьшить анализ SQL операторов
- уменьшить свопинг и пэйджинг

        Шаг 3. Настройка ввода/вывода.
        ------------------------------
Дисковый ввод/вывод обычно снижает производительность многих программных
приложений. Однако СУБД ОРАКЛ спроектирована таким образом, что ее
функционирование требует, чтобы не было задержек со стороны ввода/вывода.
Настройка ввода/вывода включает следующие процедуры:

- распределение ввода/вывода,чтобы избежать дисковых конфликтов
- распределение данных в блоках данных для наилучшего доступа
- создание экстентов достаточно больших для ваших данных

        Шаг 4. Настройка конфликтов.
        ----------------------------
Одновременное выполнение задач многими пользователями ОРАКЛа может конфликты
для средств ОРАКЛа. Это может заставить процессы ожидать, пока средства станут


                                    -- 11 --



доступными. На этом шаге вы уменьшите конфликты для:
-откатных сегментов
-защелки буфера журнала регистрации изменений

После выполнения четвертого шага снова оцените работу базы данных и решите
является ли необходимой дальнейшая настройка.  Если некоторые улучшения,
полученные на последних шагах указывают на возможность улучшения на ранних
шагах, то будут полезны повторные настроечные процедуры.

        ОКОНЧАТЕЛЬНЫЕ СОВЕТЫ ПО НАСТРОЙКЕ.
        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Некоторые части настроечного процесса, приведенного в данном рукоbодстве,
более важны,чем другие. Следующий список включает наиболее важные части
настройки. Этот список,безо всякого сомнения,является исчерпывающим собранием
всего материала,содержащегося в данном руководстве.Обратите особое внимание на
выводы,включенные в этот список.  Если вы раньше не занимались настройкой
ОРАКЛа версии 6.0, этот список даст вам представление об относительной
важности частей настроечного процесса. Если вы знакомы с настройкой ОРАКЛа
версии 6.0,этот список направит вас к той части руководства,где обсуждаются
эти вопросы.

1. Назначение индексных таблиц. Правильное использование индексов может на
   порядок улучшить выполнение SQL операторов. Для полной информации по
   индексам обратитесь к главе 2 "Настройка SQL операторов и приложений".

2. Использование преимуществ особенностей ОРАКЛа версии 6.0.  Согласующий
   генератор и управление блокировкой на уровне записи описаны в главе 2
   "Настройка SQL операторов и приложений".

3. Снижение  времени выполнения анализа SQL операторов посредством сохранения
данных словаря в памяти и сохранения часто используемых операторов  после их
выполнения. Для дополнительной информации по этому вопросу обратитесь к главе
3 "Настройка распределения памяти".

4. Если происходит переполнение блоков ввода/вывода ОРАКЛа, увеличьте размер
КЭШа буферов в системной области SGA. Для получения информации по перераспре-
делению структур памяти ОРАКЛа обратитесь к главе 3 "Настройка распределения
памяти".

5. Оперируя системами с виртуальной памятью, убедитесь, что системная область
   SGA соответствует реальной памяти, обеспечивая быстрый доступ к КЭШ-данным.
   Для получения дополнительной информации по распределению памяти обратитесь к
   главе 3 "Настройка распределения памяти".

6. Распределите ввод/вывод таким образом,чтобы ни одно из дисковых устройств,
                содержащих ваши файлы базы данных и файлы журнала регистрации не
                        границе полной загрузки. Для дополнительной информации о
                        "Настройка ввода/вывода".

7. Уменьшите конфликты для защелок, если процент запросов, которые оказываются
   в ожидании значительно превышает 10% или 15%. Для дополнительной информации
   обратитесь к главе 5 "Настройка конфликтов".

8. Убедитесь,что все ОРАКЛ-процессы имеют одинаковый приоритет для операционной
   системы. Эти проблемы могут возникнуть, если ваша операционная система
   выгружает низкоприоритетный процесс,в то время как этот процесс имеет
   исключительный доступ к ресурсу.


                                    -- 12 --



Высокоприоритетный процесс тогда может ждать бесконечно, пока низкоприоритет-
ный процесс будет закачан обратно. Для дополнительной информации обратитесь к
главе 5 "Настройка конфликтов".

          ГЛАВА 2.                   НАСТРОЙКА SQL-ОПЕРАТОРОВ И ПРИЛОЖЕНИЙ.
                                       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Эта глава представляет первый шаг настроечного процесса: Настройка SQL-опера-
торов и приложений. В этой главе вы научитесь использовать особенности базы
данных ОРАКЛ и приложений для лучшего выполнения ваших приложений. Эти
особенности включают:
- проектирование данных
- ОРАКЛ-оптимизатор
- индексы
- управление блокировкой на уровне записи
- PL/SQL
- генератор последовательности
- кластеры
- обработка массивов (Array Processing)

Эта глава дополняет материал по настройке в главе 19 "Улучшение выполнения
приложений" СУБД ОРАКЛ, Руководства администратора базы данных. Познакомьтесь
с этим материалом прежде, чем идти дальше.

        НАСТРОЙКА SQL-ОПЕРАТОРОВ И ПРИЛОЖЕНИЯ.
        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Настройка вашего приложения - важная часть наилучшего выполнения вашей СУБД
ОРАКЛ. Вам следует настроить вашн приложение до настройки самой СУБД по
следующим причинам:

- Проектирование приложений предоставит вам самый прямой контроль над SQL
  операторами и обработкой данных в СУБД. Тщательный проект приложения может
  помочь оптимизировать работу СУБД.

- Даже,если вы не знакомы с работой СУБД ОРАКЛ,вы можете значительно улучшить
  работу вашего приложения настройкой, основанной на знании SQL.

- Если ваше приложение плохо настроено,оно не будет хорошо выполняться даже с
  хорошо настроенной СУБД.

        ИЗУЧЕНИЕ ВАШЕГО ПРИЛОЖЕНИЯ.
        ДДДДДДДДДДДДДДДДДДДДДДДДДДД

Перед реализацией особенностей ОРАКЛа,представленных в этой главе, вам следует
сравнить преимущества каждой особенности с нуждами вашего приложения. Чтобы
сделать это сравнение, вы должны быть знакомы с вашим приложением,его SQL
операторами и его данными.

Консультация разработчиков приложений и пользователей.

Консультируйте людей,ответственных за разработку приложения. Выясните что
делают приложения:
- какие SQL операторы используют приложения
- какие данные обрабатывают приложения
- какие операции приложения производят над этими данными



                                    -- 13 --



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

        ИСПОЛЬЗОВАНИЕ ТЕСТОВЫХ ПРОГРАММ СУБД ОРАКЛ.
        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ОРАКЛ предоставляет несколько тестовых программ для проверки работы.  Две из
них особенно полезны в настроцке приложений:
- средство трассировки SQL
- EP(EXPLAIN PLAN)оператор

        Средство трассировки.
        ---------------------
Запустите ваше приложение с разрешенной SQL трассировкой. Средство SQL
трассировки вырабатывает статистику для каждого SQL оператора, выполненного
ОРАКЛом. Эта статистика отражает:

- время, которое каждый SQL оператор анализируется, выполняется и передается
- время, которое необходимо, чтобы выполнить каждый оператор
- память и диск, которые ассоциируются с каждым SQL оператором
- количество строк, которое выполняет каждый SQL оператор

Из этой статистики определите какой SQL оператор требует наибольшего
времени. Уделите наибольшее внимание настройке этих операторов.

        EP оператор.
        ------------
Используйте EP оператор в логической связи со средством SQLтрассироки. EP
оператор показывает план выполнения каждого оператора в вашем приложении. EP
оператор описывает действия,производимые ОРАКЛом, чтобы выполнить SQL
оператор. Анализируя план выполнения, вы можете выявить неэффективные
операторы в вашем приложении. Рассмотрите также настройку этих операторов.

Эти программы могут помочь вам найти особенные SQL операторы, которые могут
замедлить ваше приложение. Для дополнительной информации по использованию этих
программ и анализу их вывода обращайтесь к главе7 "Работа тестовых программ".

        МОДИФИКАЦИЯ SQL-ОПЕРАТОРОВ И ПРИЛОЖЕНИЙ.
        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Выполнение настройки приложения в большей степени зависит от самого
приложения. Некоторые особенности СУБД ОРАКЛ могут потенциально улучшить
работу ваших приложений. Эта глава обсуждает каждую из этих особенностей.
Каждая особенность улучшает работу по-своему. Выберите которые особенности
использовать, основываясь на их преимуществах и потребностях ваших приложений.

        Обсуждение проектирования данных.
        ---------------------------------
Проектирование данных это первый шаг в записи некоторого приложения базы
данных. Определение структуры таблиц, которые содержат приложение данных - это
важная часть проектирования самого приложения.Хорошее проектирование данных
обеспечивает:

- гибкость и легкость модификации приложения
- основу для оптимального выполнения приложения


                                    -- 14 --



Проектирование ваших данных основывается на обоих этих требованиях.  Смотрите
следующий раздел для специальных советов по проектированию данных.

Обсуждение основных особенностей исполнения.
--------------------------------------------
Некоторые особенности ОРАКЛа могут улучшить исполнение почти всех приложений.
Понимание этих особенностей поможет вам записать оптимальные SQL операторы и
приложения. Убедитесь,что вы наилучшим образом используете эти особенности:
- ОРАКЛ-оптимизатор
- индексы
- управление блокировкой на уровне записи

        Обсуждение специфических особенностей исполнения.
        -------------------------------------------------
Другие особенности ОРАКЛа улучшают исполнение специфических операций базы
данных. Эти особенности могут помочь исполнению вашего приложения в
зависимости от операций, которые они выполняют:

- PL/SQL
- генератор последовательности
- кластеры
- обработка массивов(Array Processing)

        ПРОЕКТИРОВАНИЕ ДАННЫХ.
        ДДДДДДДДДДДДДДДДДДДДДД
Первым шагом в проектировании приложения базы данных является определение
структуры таблиц,которые содержат данные. Хотя вы можете запомнить эти данные
различными способами, выбор названного реляционным проектирования имеет много
преимуществ, не последним из которых является хорошая работа базы данных. Этот
раздел расскажет вам:
- что такое хорошее проектирование данных
- каковы преимущества и недостатки различных проектов
- как определить наилучший прект для ваших данных

Каждая разработка приложения базы данных в первую очередь может выгодать от
понимания преимуществ реляционной теории и нормализации.  Хотя ни одна из этих
концепций не рассматривается в этом руководстве, вы можете найти полное
описание их обеих в специальной литературе по реляционным базам данных.

Выбор проекта данных.
---------------------
Реляционный прект,который позволяет не запоминать избыточных данных, является
наиболее подходящим для большинства приложений. Реляционный проект предоставлят
вам большую гибкость в дополнение к хорошему выполнению большинства SQL
операторов.

Однако, если эффективность исполнения является вашей главной целью, вы можете
обнаружить, что менее реляционный прект обеспечивает лучшее выполнение прило-
жений. В этом случае вам следует рассмотреть транзакции в вашем приложении.
Возможно вы захотите выбрать проект, который оптимизирует транзакции вашего
приложения,выполняющиеся наиболее часто. Или вы ,возможно, захотите выбрать
проект,который оптимизирует наиболее критичные по времени транзакции. Если вы
увидите, что исполнение вашего приложения ограничено структурой таблиц данных,
вы можете пересмотреть структуру ваших данных. Хотя изменеие структуры данных
может повлечь значительную модификацию вашего приложения, вам следует помнить,
что хорошо продуманный проект базы данных может быть хорошей основой для
гибких,мощных приложений и устойчивого к ошибкам выполнения базы данных.


                                    -- 15 --




        ОРАКЛ - ОПТИМИЗАТОР.
        ДДДДДДДДДДДДДДДДДДДД
Выполнение каждого SQL оператора СУБД ОРАКЛ может быть проверено сначала
ОРАКЛ-оптимизатором. ОРАКЛ-оптимизатор выбирает план выполнения каждого SQL
оператора. План выполнения - это последовательность шагов или операций над
базой данных,которые СУБД должна выполнить для выполнения SQL оператора.
ОРАКЛ-оптимизатор выбирает план исполнения на основе следующих критериев:
- синтаксис SQL оператора
- логическое условие или логическое состояние WHERE-фразы SQL оператора
- структуры и определения объектов базы данных,названных в SQL операторе
- наличия индексов базы данных

Правила, по которым ОРАКЛ-оптимизатор выбирает эти шаги,описаны в главе
19"Улучшение выполнения приложений СУБД ОРАКЛ" Руководства администратора базы
данных. Обращацтесь к этим правилам как к руководству для написания SQL
операторов,которые могут выполняться наиболее быстро в СУБД ОРАКЛ.

Поскольку SQL является гибким языком, одно и тоже приложение можно выполнить
различными SQL операторами, хотя два SQL оператора могут привести к одному и
тому же результату, ОРАКЛ может выполнить один гораздо быстрее,чем другой. В
этом случае вам следует EP оператор для обоих SQL операторов, чтобы сравнить
выполнение планов для выяснения, который из операторов наиболее эффективен.

        Пример оптимизации.
        -------------------
Этот пример показывает как синтаксис SQL оператора, который вы выбираете
воздействует на его исполнение. Этот пример показывает планы выполнения двух
SQL операторов, которые выполняют одну и ту же функцию. Оба SQL оператора
требуют EMP и DEPT таблиц. Оба оператора получают все отделы в DEPT таблице,
для которых нет исполнителей в EMP таблице. Каждый оператор просматривает EMP
таблицу в соответствии с подзапросом. Рассмотрим индекс DEPTNO_INDEX,
созданный на атрибуте DEPTNO таблицы EMP.

Вот первый оператор и его план выполнения, полученный EP оператором:

SELECT DNAME, DEPTNO
    FROM DEPT
    WHERE DEPTNO NOT IN
           (SELECT DEPTNO
                  FROM EMP)

OPERATION             OPTIONS             OBJECT_NAME
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
FILTER
TABLE ACCESS          FULL                DEPT
TABLE ACCESS          FULL                EMP

Третья строка плана выполнения показывает полное сканирование EMP таблицы.
Полное сканирование требует большого времени. EMP таблица сканируется без
использования индекса по DEPTNO атрибуту.

Этот индекс  не используется, потому что поиск по EMP таблице не имеет
предложения с WHERE. В большинстве случаев SQL оператор не может использовать
индекс, если индексный атрибут не назван в предложении с WHERE.
Одноко следующий SQl оператор выбирает ту же самую запись используя индекс:



                                    -- 16 --



SELECT DNAME, DEPTNO
    FROM DEPT
    WHERE NOT EXISTS
           (SELECT DEPTNO
                   FROM EMP
                   WHERE DEPT.DEPTNO = EMP.DEPTNO)

OPERATION             OPTIONS             OBLECT_NAME
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
FILTER
TABLE ACCESS          FUll                DEPT
INDEX                 RANGE SCAN          DEPTNO_INDEX

Предложение с WHERE подзапроса содержит поле DEPTNO EMP таблицы, поэтому
индекс используется. Использование индекса отражено в третьей строке EP
оператора. Сканирование области индекса DEPTNO_INDEX требует гораздо меньше
времени, чем полное сканирование EMP таблицы в предыдущем операторе. Более
того в первом примере требуется полное сканирование EMP таблицы для каждого
значения DEPTNO из DEPTтаблицы.  Поэтому второй SQL оператор быстрее,чем
первый.

        ИНДЕКСЫ.
        ДДДДДДДД
Индексы - это структуры базы данных, повышаюшие эффективность выполнения
запросов. Этот раздел объясняет:
- что делают индексы
- каким образом индексы улучшают выполнение
- когда следует использовать индексы
- как выбирать индексы

Индексы используют в виде конъюнкции атрибутов таблицы. Индекс ставит в
соответствие каждому значению атрибута запись в таблице, содержащей это
значение. Атрибут, который содержит индекс, называется ключевым.  Индекс можно
создать оператором CREATE INDEX.  Информация по этому оператору содержится в
Руководстве по языку SQL.

        Уникальные индексы.
        -------------------
Некоторые индексы могут быть использованы для усиления уникальности значений в
поле. Такие индексы называются уникальными UNIQUE INDEXES Если создается
уникальный индекс никакие две записи не могут содержать одинаковые значения в
этом поле.

        Каким образом индексы улучшают исполнение.
        ------------------------------------------
Индексы используются для оптимизации запросов. Запрос, который содержит индек-
сированное поле во фразе WHERE может использовать индекс.  Когда запрос
использует индекс,ОРАКЛ ищет индекс для всех значений, которое принимает
выражение, специфицированное фразой WHERE. Если запрос выбирает только
индексное поле, он может читать значение этого поля непосредственно из индекса
лучше, чем из таблицы.  Для каждого значения индекс также определяет положение
или номер записи в таблице, имеющей это значение. Если запрос выбирает данные
в дополнение к значению  индекса, ОРАКЛ находит записи в таблице, основываясь
на номере записи. Поиск по номеру записи самый быстрый способ для ОРАКЛа найти
одиночную запись.




                                    -- 17 --



Когда использовать индексы.
---------------------------
Индексы улучшают исполнение запросов, которые выбирают небольшой
процент записей из таблицы. В общем случае вам следует использовать
индексы для запросов, которые содержат менее 10-15% от общего
количества записей таблицы.

        Полное сканирование таблицы.
        ----------------------------
Если запрос не использует индекса ОРАКЛ должен выпонять полное сканирование
таблицы,чтобы выполнить запрос. Полное сканирование таблицы производит чтение
всех записей таблицы последовательно. ОРАКЛ проверяет каждую запись,чтобы
определить удовлетворяется ли в ней критерий, содержащийся в WHERE фразе.

Нахождение единичной записи при помощи индексированного запроса гораздо более
быстрое,чем нахождение записи с полным сканированием.
Однако запрос,который выбирает более,чем 10-15% записей от общего количества
может быть выполнен скорее с полным сканированием, чем при индексации.

Для выполнения полного сканирования ОРАКЛ читает каждый блок в таблице. Для
каждого  блока ОРАКЛ читает каждую запись,занесенную в этот блок. ОРАКЛ читает
каждый блок один раз. Выполняя индексированый запрос,ОРАКЛ читает записи в
порядке,в котором они появляются в индексе независимо от того в каких блоках
они содержатся. Если блок содержит более,чем одну выбираемую запись,ОРАКЛ
может читать блок более одного раза. В некоторых случаях полное сканирование
может потребовать меньше операций ввода/вывода,чем индексированный запрос.

        Многоблочное считывание.
        ------------------------
ОРАКЛ может использовать многоблочное чтение,чтобы читать несколько последова-
тельных дисков за один раз. Поскольку полное сканирование таблицы осуществля-
ется посредством последовательного чтения блоков, ОРАКЛ часто выполняет полное
сканирование используя многоблочное чтение. Однако,поскольку, индексированные
запросы обычно читают, используя случайный доступ к блокам, ОРАКЛ не может
выполнять индексированные запросы с многоблочным чтением. ОРАКЛ должен читать
эти блоки однократно. Количество блоков,считываемых при многоблочном чтении,
определяется INIT.ORA параметром DB_FILE_MULTIBLOCK_READ _COUNT. Если ваше
приложение выполняет много полных сканирований больших таблиц, вы можете
улучшить выполнение увеличением величины этого параметра.Это увеличивает
количество блоков,читаемых за одно многоблочное чтение и может снизить
количество многоблочных чтений, необходимых для того,чтобы прочитать большую
таблицу. Многоблочное чтение является новой особенностью ОРАКЛа версии
6.0.Благодаря многоблочному чтению некоторые полнотабличные сканирования могут
осуществляться быстрее,чем в предыдущих версиях ОРАКЛа. При выполнении
приложения ОРАКЛа версии 6.0 вам следует рассмотреть отдельные индексированные
запросы в вашем приложении, чтобы определить не помогут ли вам полнотабличные
сканирования получить данные быстрее.

        Выбор полей для индекса.
        ------------------------
Следуте нижеперечисленным советам для выбора полей для индекса:

- Индексируйте поля,которые часто используются в WHERE фразах. Запросы, которые
  ссылаются на индексированные поля в WHERE фразах могут использовать индекс.

- Индексируйте поля,чьи максимальные и минимальные значения выбираются часто.
  Запросы,которые выбирают индексированные значения SQL групповых функций MAX
  и MIN должны использовать индекс.

                                    -- 18 --



- Индексируйте поля,которые часто используются для объединения таблиц в SQL
  операторах. Для дополнительной информации объединений отсылаем к разделу
  Кластеры, ниже в этой главе.

- Индексируйте поля с высокой селективностью. Селективность высока, если мало
  записей имеют одинаковое значение в ключевом поле, а уникальные индексы
  являются наиболее селективными и эффективными при выполнении
  оптимизированных запросов.

- Не индексируте поля с несколькими характерными значениями. Такие
  поля имеют низкую селективность. Например,по полю,содержащему рав-
  ое количество "да" и "нет",индексация не улучшит исполнения.
- Не индексируйте поля в маленьких таблицах. Если таблица содержит меньше пяти
  блоков данных, полное сканирование таблицы позволяет выбирать записи
  быстрее, чем индексированный запрос. Вы можете определить как много блоков
  данных таблица использует оценивая параметр ROWIDs таблицы, например, этот
  запрос возвращает количество блоков, используемых в таблице ACOUNTS:

  SELECT COUNT(DISTINCT(SUBSTR(ROWID,1,8) ііSUBSTR(ROWID,15,4)))
  BLOCK FROM ACOUNTS

- Не индексируйте поля,которые часто модифицируются.Оператор UPDATE, который
  модифицирует индексированные поля и INSERT и DELETE, которые модифицируют
  индексированные таблицы,требуют больше времени, чем при отсутствии
  индексации. Такие операторы должны модифицировать данные в индексах как и
  данные в таблицах.

Выбирая создавать ли индексы,определите стоит ли выигрыш в скорости выполнения
запросных операторов проигрыша в выполнении операторов INSERT и DELETE.  Вы,
возможно, захотите проэкспериментировать и проверить время выполнения ваших
SQL операторов с индексами и без них. Вы можете замерить время при помощи
средства SQL трассировки.  Для дополнительной информации по SQL трассировке
обратитесь к главе 7 "Выполнение тестовых программ".

        Конкатенированные индексы.

Индекс может быть создан более,чем по одному полю. Такие индексы
называют конкатенированными индексами(КИ).

        Как конкатенированные индексы улучшают выполнение.
Конкатенированные индексы улучшают выполнение, предоставляя:
- высокую селективность
- хранение дополнительных данных

КИ полезны для обеспечения селективности. Иногда два поля с низкой селектив-
ностью могут объединяться с помощью конкатенации и обеспечивать высокую
селективность. КИ могут также использоваться для хранения дополнительных
данных из полей,которые выбираются при запросе.  Если запрос выбирает
поле,которое не является частью индекса,ОРАКЛ должен найти ROWID в индексе и
затем выбрать соответствующее поле из таблицы. Если все выбираемые поля
включены в КИ,то запрос может быть удовлетворен исключительно поиском индекса
и избежать запроса ко всей таблице.

        Выбор полей для конкатенированных индексов.
Поля, которые используются для конкатенации называются ключами конкакокатена-
ции. Используют или нет SQLоператоры КИ определяется полями, содержащимися в
WHERE-фразе SQL-оператора и порядком полей в операторе CREATE INDEX. Запрос
может использовать КИ,если он содержит начальную часть индекса в WHERE-фразе.

                                    -- 19 --



Начальной частью КИ является первое поле или поля, специфицированные в
операторе CREATE INDEX.  Следующий оператор создает КИ на полях JOB,SAL и
DEPTNO в таблице EMP:

 CREATE INDEX JOB_SAL_DEPTNO ON EMP(JOB, SAL, DEPTNO)

Этот индекс может быть использован в следующих запросах:
   SELECT
      FROM EMP
      WHERE JOB = 'CLERK'
      AND SAL = 800
      AND DEPTNO = 20
   SELECT
      FROM EMP
      WHERE SAL = 1250
      AND JOB = 'SALESMAN'
   SELECT JOB, SAL
      FROM EMP
      WHERE JOB = 'MANAGER'

Все эти запросы используют начальную часть индекса JOB_SAL_DEPTNO.  Предикаты
в WHERE-фразе не обязаны содержать поля в том порядке, в котором они
расположены в операторе CREATE INDEX. Заметьте, что третий запрос может быть
всецело удовлетворен индексным доступом. Поскольку все поля,используемые в
запросах (как в SELECT списках,так и в WHERE фразах являются частью КИ,
запросы не требуют доступа к EMP-таблице.

Следующий запрос, однако, не может использовать индекс,чтобы найти запись в
EMP-таблице потому,что этот запрос не содержит первое поле индекса в своей
WHERE-фразе:

SELECT JOB
   FROM EMP
   WHERE SAL = 5000


        Упорядочивание полей конкатенированного индекса.

Следуйте этим советам для упорядочивания ключевых полей,создавая КИ:
- Если только одно поле КИ используется наиболее часто в WHERE-фразе,
  поместите его первым в операторе CREATE INDEX.

- Если более,чем одно поле используется часто в WHERE-фразе, поместите
  наиболее селективное поле первым в операторе CREATE INDEX.

        Пример индексированного запроса.
        --------------------------------
Этот пример покажет как индексы улучшают выполнение запросов. Он покажет
SQL-оператор,который выполняется более эффективно при использовании индексов.
Возможности трассировочной статистики и план исполнения, предоставляемый EP
оператором, иллюстрируют выгоды исполнения, свойственные индексу. Для
дополнительной информации по SQL трассировке обратитесь к главе 7 "Выполнение
тестовых программ".  При выходе из SQL трассировки обратите особое внимание на
статистику в этих полях:

cpu    Значение в этом поле является временем процессора, требующимся для
              каждого шага исполнения, анализа исполнения или выборки. Эта
          величина выражается в сотых долях секунды.

                                    -- 20 --



elap   Величина в этом поле является суммарным временем выполнения, требующимся
                         для каждого шага. Эта величина выражается в сотых долях

phys   Величина в этом поле является количеством блоков данных, считываемых
              из файлов безы данных на диске для каждого шага.

SQL оператор в этом примере опрашивает таблицу банковских счетов.
Оператор выбирает баланс для единичного счета:

SELECT BAKANCE
   FROM ACOUNTS
   WHERE ACC_NUM = 49999

Где:
ACOUNTS    -    Имя таблицы банковских счетов
ACC_NUM    -    Поле,содержащее номер счета для каждого банковского счета
BALANCE    -    Поле,содержащее баланс для каждого счета

Если нет индекса по полю ACC_NUM SQL трассировка выдает следующую статистику и
план выполнения во время выполнения запроса:

                count    cpu    elap    phys    cr    cur    rows
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Parse:              1     43      54       3     0      0
Execute:            1      1       2       1     0      2       0
Fetch:              1   6176    7934    5883  5883      0       1

Execution plan:

TABLE ACCESS(FULL) OF 'ACCOUNTS'

План исполнения показывает,что SQL оператор ОРАКЛа поизводит полное
сканирование таблицы ACCOUNTS. Исполнение запроса может быть улучшено при
индексации по полю ACC_NUM. Индекс может быть создан SQL оператором:

CREATE UNIQUE INDEX ACC_INDEX ON ACCOUNTS(ACC_NUM)

После создания индекса тот же самый оператор может быть выполнен намного
быстрее. Статистика и план исполнения приведены для индексированного запроса:

                count    cpu    elap    phys    cr    cur     rows
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Parse:              1     44      66       3    17      0
Execute:            1      1       0       0     0      0        0
Fetch:              1      2      22       4     4      0        1

Execution plan:

TABLE ACCESS(BY ROWID) OF 'ACCOUNTS'
   INDEX (UNIQUE SCAN) OF 'ACC_INDEX' (UNIQUE)

Этот план исполнения показывает,что ОРАКЛ получает доступ к ACCOUNTS таблице
при помощи ROWID после сканирования индекса ACC_INDEX. Этот план исполнения
быстрее, чем полное сканирование таблицы.
Статистика, проводимая SQL-трассировкой, отражает выгоды SQL исполнения,
свойственные индексу. Сравнивая значения поля phys обоих запросов, вы можете
видеть, что запрос с полным сканированием требует много большее вводов/выводов,
чем индексированный запрос. На шаге выборки полного сканирования таблицы

                                    -- 21 --



считывается 5883 блока,хотя ищется только одна запись.  Полное сканирование
таблицы читает каждую запись таблицы с диска.  Индексированный запрос читает
индекс, а затем только соответствующую запись из таблицы. Индекс и соответству-
ющая запись требуют намного меньше блоков,чем записи,читаемые при полном
сканировании. Поскольку индексированный запрос требует намного меньше ввода/
вывода, он происходит намного быстрее полного сканирования таблицы.  Из зна
чений полей cpu и elap вы можете увидеть,что на шаге выборки индексированного
запроса требуется много меньше времени,чем на шаге выборки при полном
сканировании таблицы.

        УПРАВЛЕНИЕ БЛОКИРОВКОЙ НА УРОВНЕ ЗАПИСИ.
        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
СУБД ОРАКЛ версия 6.0 с возможностью исполнения транзакций содержит управление
блокировкой на уровне записи. Этот раздел описывает:
- Как управление блокировкой на уровне записи улучшает исполнение
- Как использовать преимущества блокировки на уровне записи
- Как программно управлять блокировкой

        Как блокировка на уровне записи улучшает исполнение.
        ----------------------------------------------------
СУБД ОРАКЛ версия 6.0 с возможностью выполнения транзакций блокирует данные на
уровне записи лучше, чем на уровне таблицы. Блокировка на уровне записи разре-
шает многим пользователям одновременный доступ к различным записям одной и той
же таблицы без блокировки содержимого таблицы. Результирующий выигрыш в выпол-
нении является существенным.  Этот выигрыш является наибольшим улучшением
ОРАКЛа версии 6.0 по сра внению с версией 5.1, а также и наибольшим преимущест-
вом ОРАКЛа по сравнению с другими СУБД. Приложения, которые выигрывают больше
всего это те, которые исполняют OLTP(online transaction processing).

OLTP приложения характеризуются большим количеством пользователей, одновременно
модифицирующих различные записи одной и той же таблицы.  ОРАКЛ также позволяет
множеству пользователей одновременно читать и писать одну и ту же запись.
Читающий не ждет пишущего ипишущий не ждет читающего. Однако, могут случиться
конфликты,когда множество процессов пытаются писать в одну и ту же запись
одновременно.

        Выгода от блокировки на уровне записи.
        --------------------------------------
Блокировка на уровне записи не требует каких-либо специальных разработок в
части прикладных программ. Однако,вы можете заменить требование блокировки на
уровне записи блокировкой на уровне таблиц.  Табличная блокировка снижает
выгоду от возможности выполнения транзакций.
Блокировка на уровне таблицы задается явно выполнением таких SQL- операторов:

LOCK TABLE EMP IN EXCLUSIVE MODE
LOCK TABLE DEPT IN SHARE MODE

Если вы расширяете приложение СУБД ОРАКЛ версии 6.0 посредством возможности
выполнения транзакций,вам следует убрать такие операторы из вашего приложения.
Если ваше приложение основано на блокировке на уровне таблиц,модифицируйте его
так, чтобы получить выгоду от блокировки на уровне записи. Также, если вы
проектируете новое приложение, вы можете достичь лучшего выполнения,используя
блокировку на уровне записи вместо блокировки на уровне таблиц. Вид блокировки
по умолчанию контролируется посредством INIT.ORA параметров:

SERIALIZABLE и ROW_LOCKING. В СУБД ОРАКЛ версии 6.0 с возможностью
выполнения транзакций значение по умолчанию для параметра
SERIALIZABLE является "ложным", а значение по умолчанию параметра

                                    -- 22 --



ROW_LOCKING является "всегда".
Если ваша СУБД ОРАКЛ имеет возможность выполнения транзакций, убедитесь, что
оба пораметра имеют значение по умолчанию.

Управление работой блокировки.
------------------------------
Вы можете наблюдать деятельность блокировки посредством SQL*DBA MONITOR LOCK.
Для наблюдения выдайте SQL*DBA-команду:

SQL*DBA MONITOR LOCK

На дисплее вы можете увидеть отдельные конфликты. Этот обзор может быть
полезен для распознавания узких мест блокировок, особенно, если вы не имеете
опцию выполнения транзакций.Для дополнительной информации по SQL*DBA MONITOR
LOCK отображению обращайтесь к приложению В в руководстве администратора базы
данных.

        PL/SQL.
        ДДДДДДД
PL/SQL - это процедурный язык ОРАКЛа,расширяемый в SQL.Использование PL/SQL в
ваших приложениях может улучшить исполнение. Этот раздел покажет вам:
- что содержит PL/SQL-язык
- как PL/SQL выполняется
- как использовать PL/SQL в ваших приложениях

Для полной информации по PL/SQL обратитесь к Инструкции пользователя и
Справочному руководству по PL/SQL.

        Блоки PL/SQL.
        -------------
PL/SQL позволяет вам смешивать SQL-операторы с процедурными конструкциями.
Общий PL/SQL код называется блоком. PL/SQL блок может содержать некоторые из
этих операторов:

- операторы языка манипулирования данными (DML) (INSERT,UPDATE,DELETE и SELECT)
- операторы управления курсором (DECLARE,CURSOR,OPEN,FETCH и CLOSE)
- операторы выполнения транзакций (COMMIT,ROLLBACK и SAVEPOINT)

PL/SQL блок может также содержать некоторые из этих процедурных конструкций:

- операторы изменения порядка выполнения программы:
  - IF...THEN...ELSE
  - GOTO
  - EXIT

- операторы циклов:
  - FOR...LOOP
  - WHILE...LOOP

- операторы назначения:
  - X := Y+Z
  - BONUS := CURRENT_SALARY*BONUS_MULTIPLIER

        PL/SQL преобразователь(engine).
        -------------------------------
Приложения пропускают PL/SQL блоки через преобразователь PL/SQL.
Преобразователь обрабатывает и преобразует PL/SQL блоки. Чтобы преобразовать


                                    -- 23 --



блок, PL/SQL преобразователь выполняет процедурные операторы и пропускает
SQL-операторы в СУБД ОРАКЛ.
PL/SQL преобразователь включается в следующие ОРАКЛ продукты:

  - СУБД ОРАКЛ версия 6.0 с опцией выполнения транзакций.
  - SQL*Forms версия 3.0

Если вы имеете СУБД ОРАКЛ версия 6.0 с возможностью выполнения транзакций, вы
можете использовать PL/SQL в ваших приложениях, которые используют следующие
прикладные ОРАКЛ средства:
  - ORACLE Precompilers
  - ORACLE Call Interfaces (OCIs)
  - SQL*Plus
  - SQL*DBA

Если у вас есть SQL*Forms версия 3.0 вы можете использовать PL/SQL в некоторых
из ваших SQL*Forms приложениях,не считаясь с тем имеет ли ваша СУБД
возможности выполнения транзакций.

        Как PL/SQL улучшает выполнение.
        -------------------------------
PL/SQL улучшает исполнение, выполняя вызовы СУБД из ваших приложений.
Преобразование вызовов особенно полезно в сетевой среде, где вызовы могут
повлечь большую перегрузку. PL/SQL преобразует вызовы следующими способами:

- Если ваш ОРАКЛ содержит PL/SQL преобразователь,ваши приложения
  могут пропустить множество SQL-операторов к СУБД одновременно.

- Если вы имеете SQL*Forms версию 3.0,которая содержит PL/SQL преобразователь,
  ваши SQL*Forms приложения могут выполнять процедурные операторы не вызывая
  СУБД.

        PL/SQL преобразователь в СУБД ОРАКЛ.
        ------------------------------------
PL/SQL позволяет приложениям пропускать много SQL-операторов одновременно.
PL/SQL блок,содержащий много SQL-операторов может быть пропущен к СУБД в одном
вызове. Без PL/SQL преобразователя приложения должны пропускать SQL-операторы
по одному, каждый с помощью раздельного вызова. Рис.2.1 показывает как PL/SQL
преобазотель преобразует потоки и улучшает исполнение.

        Рис.2.1 Улучшение исполнения с помощью PL/SQL.
   ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
   і                       ЪДДДДДДДДДДДї                      і
   і  ЪДДДДДДДДДДДДї       і    SQL    і        ЪДДДДДДДДДДї  і
   і  і            і       і IF...THEN і        і          і  і
   і  і            і       і    SQL    і        і  ОРАКЛ   і  і
   і  і ПРИЛОЖЕНИЕ іДДДДДДДі    ELSE   ГДДДДДДД>і с PL/SQL і  і
   і  і            і       і    SQL    і        і          і  і
   і  і            і       і    ENDIF  і        і          і  і
   і  АДДДДДДДДДДДДЩ       і    SQL    і        АДДДДДДДДДДЩ  і
   і                       АДДДДДДДДДДДЩ                      і
   і  ЪДДДДДДДДДДДДї       ЪДДДї                ЪДДДДДДДДДДї  і
   і  і            іДДДДДДДіSQLіДДДДДДДДДДДДДДД>і          і  і
   і  і            і       АДДДЩ    ЪДДДї       і          і  і
   і  і            іДДДДДДДДДДДДДДДДґSQLГДДДДДД>і ДРУГИЕ   і  і
   і  і ПРИЛОЖЕНИЕ і       ЪДДДї    АДДДЩ       і ВЕРСИИ   і  і
   і  і            ГДДДДДДДіSQLГДДДДДДДДДДДДДДД>і ОРАКЛа   і  і
   і  і            і       АДДДЩ    ЪДДДї       і          і  і

                                    -- 24 --



   і  і            ГДДДДДДДДДДДДДДДДґSQLіДДДДДД>і          і  і
   і  АДДДДДДДДДДДДЩ                АДДДЩ       АДДДДДДДДДДЩ  і
   АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
        PL/SQL преобразователь в прикладных средствах ОРАКЛа.
        -----------------------------------------------------
PL/SQL позволяет приложениям выполнять процедурные функции, которые в другом
случае требуют вызова СУБД. Поскольку PL/SQLблок может содержать процедурные
операторы,ваше приложение может использовать PL/SQl преобразователь,включенный
в прикладное средство ОРАКЛа, для того,чтобы выполнить соответствующий
оператор. Например, SQL*Forms приложение часто использует SQL-операторы для
выполнения вычислитель ных операций с данными. Выполнение таких SQL-операторов
требует вызова СУБД. В SQL*Forms версия 3.0 такие расчеты могут быть выполнены
с помощью процедурных операторов PL/SQL преобразователя. В этом случае PL/SQL
вам поможет избежать вызова всей СУБД.

        Использование PL/SQL в ваших приложениях.
        -----------------------------------------
Следуйте дальнейшим указаниям для использования PL/SQL вместе со специальными
прикладными средствами ОРАКЛа для улучшения исполнения ваших приложений:

ORACLE        - Пропускает множество операторов из ORACLE
Precompilers    Precompiler программ к СУБД с PL/SQL
                блоками вместо встроенного SQL.

SQL*Plus      - Для маленьких процедурных задач запуск PL/SQL из SQL*Plus
                                                                        предподч
                                                                               P

SQL*Forms     - Замещает множество триггерных шагов в SQL*Forms приложениях
                                                                               о

        ГЕНЕРАТОР ПОСЛЕДОВАТЕЛЬНОСТИ (SG)SEQUENCE Generator.
        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Генератор последовательности - это новая особенность СУБД ОРАКЛ версии 6.0. Он
может быть использован для получения последовательных значений. Этот раздел
покажет вам:

- что может делать генератор последовательности
- как генератор осуществляет преобразования для последовательности чисел
- как можно улучшить доступ к последовательности чисел

В приложения базы данных последовательности могут служить многим целям, таким
как:
- уникальное распознавание чисел
- временные метки

Если ваше приложение использует уникальные или последовательные величины для
каких-либо целей,вам следует рассмотреть их при помощи генератора
последовательности.

        Выполнение последовательных преобразований для SEQUENCE чисел.
        --------------------------------------------------------------
До ОРАКЛа версии 6.0 последовательные величины могли быть получены только
программно. Новое значение первичного ключа могло быть полуено увеличением
последнего значения. Этот метод требует блокировки в течение транзакции и
заставляет многих пользователей ждать нового значения первичного ключа. Это
ожидание известно как "преобразование в последовательную форму". Если вы


                                    -- 25 --



расширяете приложение ОРАКЛа версии 6.0 вам следует заменить эту операцию
вызовом SG. Он исключает последовательное преобразование и улучшает
параллелизм приложения.

Однажды определенная последовательность может быть доступна для многих пользо-
вателей. Последовательность может быть доступна и добавлена многими
пользователями без ожидания. SG не ждет транзакцию, которая добавляла
последовательность до полного завершения, при этом последовательность может
быть увеличена снова.

Пример последовательности.
--------------------------
Этот пример показывает как многие пользователи могут получить ту же
последовательност без преобразований (serialization).
Пользователь Элизабет может создать последовательность SEQ1 при помощи
SQL-оператора:

CREATE SEQUENCE SEQ1
    INCREMENT BY 10
    START WITH 50

Первая величина SEQ1 последовательности 50. Последующие значения увеличиваются
на 10.
Элизабет может разрешить доступ с SEQ1 двум другим пользователям посредством
SQL-оператора:

GRANT SELECT
    ON SEQ1
    TO CHARLES, DIANA

Элизабет может определить текущую величину SEQ1,используя псевдополе CURRVAL в
следующем запросе:

SELECT SEQ1.CURRVAL
    FROM DUAL

Чарльз может увеличивать SEQ1,используя псевдополе NEXTVAL. Этот SQL-оператор
вставляет новую запись в таблицу DEPT,используя следующее значение SEQ1:

INSERT INTO DEPT(DEOTNO, DNAME, LOG)
   VALUES (SEQ1.NEXTVAL, 'CONSULTING', 'LONDON')

Диана может также увеличивать SEQ1,используя псевдополе NEXTVAL:

INSERT INTO DEPT(DEPTNO, DNAME, LOG)
   VALUES (SEQ1.NEXTVAL, 'MARKETING', 'MANCHESTER')

СУБД ОРАКЛ выполняет оператор Дианы немедленно, не считаясь с тем совершил ли
Чарльз его транзакцию. Однако, если Чарльз совершил затем откат своей
транзакции, последовательный номер,использованный им не может быть доступен
снова. Для полной информации обратитесь к Руководству по SQL языку.

Размещение в КЭШ-области последовательности чисел (SN-SEQUENCE numbers).
---------
SEQUENCE числа могут быть сохранены в SEQUENCE КЭШе (SC) в системной глобаль-
ной области (SGA). SN могут быть доступны быстрее, чем они читаются с дисков.



                                    -- 26 --



Кеш-область последовательности (SC - SEQUENCE cache) состоит из элементов,
каждый элемент может содержать много SN для одной последовательности.
Используйте эти рекомендации для быстрого доступа ко всем SN:

- Убедитесь,что SC может содержать все последовательности, используемые
  одновременно в вашем приложении.
- Увеличивайте количество значений для каждой последовательности,
  содержащейся в SC.

        Количество элементов в SC.
        --------------------------
Когда приложение обращается к SC, последовательные номера читаются быстро.
Однако, если приложение обращается к последовательности, которой нет в КЭШе,
последовательность должна быть считана в КЭШ перед обращением к ней. Если ваши
приложения используют одновременно много последовательностей,ваш КЭШ может
оказаться недостаточно большим, чтобы содержать все последовательности.  В
этом случае доступ к последовательным числам может потребовать частых запросов
к диску. Для быстрого доступа ко всем последовательностям убедитесь, что КЭШ
имеет достаточно элементов,чтобы содержать все последовательности,
одновременно используемые вашим приложением.

Количество элементов в SC определяется INIT.ORA параметром:
SEQUENCE_CACHE_ENTRIES. По умолчанию его величина равна 10. Если вы хотите
проверить вашу СУБД,вам следует разрешить один КЭШ-элемент для последователь-
ности, используемой в одном сеансе проверки. Для информации по проверке
обратитесь к главе 17"Защита информации от несанкционированного доступа. Доступ
к базе данных" Руководства администратора базы данных.

Количество значений в каждом элементе SC.
-----------------------------------------
Когда последовательность читается в SC,величины последовательности генерируются
и запоминаются в КЭШ-элементе. Эти значения могут быть быстро получены. Коли-
чество значений последовательности,запоминаемых в КЭШе,определяется посредством
CACHE-параметра в операторе CREATE SEQUENCE. По умолчанию его величина равна
20.Этот CREATE SEQUENCE оператор создает SEQ2 последовательность так,что 50
значений последовательности запоминаются в SC:

CREATE SEQUENCE SEQ2
     CACHE 50

Первых 50 значений SEQ2 могут быть прочитаны из КЭШа. Когда запрашивается 51
значение,следующие 50 значений будут прочитаны с диска.

Выбор верхнего значения для КЭШа позволяет вам получить доступ к большему
количеству номеров последовательности с меньшим чтением с диска в SC. Однако в
случае аварии ОРАКЛа все последовательные величины будут утеряны. Вы можете
использовать опцию NOCACHE в CREATE SEQUENCE операторе,чтобы не запоминать
значений специальной последовательности в SC. В этом случае каждое обращение к
этой последовательности потребует чтения с диска. Такое чтение с диска -
медленный доступ к последовательности. Следующий CREATE SEQUENCE оператор
создает SEQ3 последовательность,ее значения никогда не запоминаются в КЭШе:

  CREATE SEQUENCE SEQ3
      NOCACHE





                                    -- 27 --



        КЛАСТЕРЫ.
        ДДДДДДДДД
Кластеры это структуры базы данных,которые улучшают исполнение SQL-операторов,
объединяющих данные из многих таблиц.  Этот раздел покажет вам:
- что делают кластеры
- как кластеры улучшают исполнение
- как использовать кластеры
- как кластеры запоминают данные

Кластеры создаются из групп таблиц, которые имеют одно или более общих полей.
Общее поле или общие поля образуют ключ кластера. Ключ кластера может быть
индексирован.Этот индекс называется кластерным индексом. Вы можете создать
кластер оператором CREATE CLUSTER. Для полной информации обращайтесь к
справочному руководству по языку SQL.

Как кластеры улучшают исполнение.
---------------------------------
Кластерированные данные запоминаются в "pre-joined" форме. Записи в кластери-
рованной таблице,имеющие одинаковое значение кластерного ключа запоминаются в
одних итех же блоках данных. Объединение клаcтерных таблиц, основанное на
значении кластерного ключа, требует чтения меньшего количества блоков с диска,
чем объединенные таблицы, запомненные по-отдельности.

Выбор кластеров.
----------------
Несколько факторов определяют каким образом кластеры улучшают исполнение
различных SQL-операторов. Вам следует рассмотреть выгоды исполнения кластеров,
когда вы решаете,кластерировать ли таблицы:

- Кластеры улучшают исполнение SQL-операторов,которые объединяют кластерные
  таблицы по кластерному ключу. Такие операторы требуют меньше
  вводов/выводов, чем таблицы,запомненые индивидуально.

- Кластеры также улучшают выполнение SQL-операторов,которые требуют таблиц,
  основанных на значениях кластерного ключа. Поскольку все записи с одинаковым
  значением кластерного ключа в одних и тех же блоках,такие запросы требуют
  меньше вводов/выводов,чем,если бы эти таблицы были бы заполнены
  по-отдельности. Вы также можете извлечь выгоду из этой особенности для
  кластера,состоящего из одной таблицы.

- SQL-опнраторы,которые выполняют полное сканирование только одной таблицы, в
  кластере могут потребовать больше времени,чем,если бы эта таблица была
  запомнена отдельно. Полное сканирование кластерированных таблиц требует
  доступа ко всем блокам в кластере и кластер обычно содержит больше
  блоков,чем это было бы для таблицы, запомненной отдельно.
- SQL-операторы,которые вставляют записи в кластерированные таблицы или
  обновляют значения кластерных ключей,могут выполняться дольше, чем
  аналогичные операторы в одиночной таблице. Такие операторы требуют
  дополнитено обслуживания для кластерных ключей.

Выбирая кластерировать ли таблицы,рассмотрите достоинства и недостатки
кластеров в свете потребностей ваших приложений.Например, вы можете решить
кластерировать ли таблицы, которые всегда доступны для ваших приложений в
операторах объединения. Однако вам,верояятно, не следует кластеритовать
таблицы, если ваши приложения объединяют их редко,а изменяют значения общих
ключевых полей часто. Вы, возможно, захотите проэкспериментировать и сравнить
времена выполнения для кластерированных и раздельных таблиц.


                                    -- 28 --



Упорядочивание таблиц в кластерах.
----------------------------------
Порядок,в котором кластерированные таблицы создаются,загружаются и в котором
на них ссылаются в SQL-операторах,может влиять на выполнение.  Следуйте этим
рекомендациям для упорядочивания кластерированных таблиц:
- Создавайте кластерированные таблицы в порядке увеличения их размера. Малень-
  кие таблицы и таблицы с малым  количеством записей должны быть созданы
  первыми. Большие таблицы и таблицы с большим количеством записей на каждое
  значение кластерного ключа должны быть созданы позднее.
- Загружайте кластерированные таблицы в порядке увеличения их размера
- В SQL-операторах,объединяющих кластерированные таблицы,ссылайтесь
  на таблицы в выражении FROM в порядке возрастания их размеров.

Упоравление пространством кластера.
-----------------------------------
ОРАКЛ решает как много пространства в блоке выделить для каждого значения
кластерного ключа,основываясь на значении SIZE-параметра в операторе CREATE
CLUSTER. Выбирая величину SIZE-параметра, для кластера, вам следует оценить
суммарное пространство, необходимое для одного значения кластерного ключа и
всех записей,содержащих это значение ключа. Значение этого параметра
выражается в байтах.

Например,если ваш кластер имеет в среднем пять записей на каждое значение
кластерного ключа, записи имеют среднюю длину 100 байт, вам следует
использовать SIZE-параметр со значением 600. Эта оценка позволяет запомнить
записи, значение кластерного ключа и дополнительные записи,которые могут быть
добавлены позднее.

Суммарное пространство,выделяемое для значения одного кластерного ключа
определяется по тому как много значений кластерного ключа запоминается в
каждом блоке. Если вы опустите SIZE-параметр оператора CREATE CLUSTER, ОРАКЛ
будет запоминать значение одного кластерного ключа на блок. Выбирайте значение
кластерного ключа осторожно.

Если ваша оценка слишком высока, ОРАКЛ выделит слишком много пространства для
каждого значения кластерного ключа. В этом случае пространство в блоках может
быть потеряно напрасно. Если ваша оценка будет слишком занижена, ОРАКЛ не
сможет выделить достаточного пространства для каждого значения кластерного
ключа. Потребуется много блоков для запоминания записей с одним значением
кластерного ключа.  В этом случае придется считывать много блоков для
запросов, базирующихся на значении кластерного ключа.

Пример.
-------
Этот пример сравнивает исполнение SQL оператора, объединяющего две отдельные
таблицы и исполнение того же SQL оператора,объединяющего те же две таблицы,
запомненные в кластере. Пример показывает как кластер может улучшить
исполнение объединений. SQL оператор объединяет таблицы ACCOUNTS и BRANCH по
полю ACC_NUM:

SELECT
   FROM ACCOUNTS, BRANCH
   WHERE ACCOUNTS.ACC_NUM = BRANCH.ACC_NUM

Индекс IACC_NUM создан на поле ACC_NUM таблицы ACCOUNTS. Ниже приведена SQL
трассировочная статистика и план выполнения,полученные EP оператором для
случая,когда таблицы заданы отдельно:


                                    -- 29 --



                 count    cpu    elap    phys     cr    cur    rows
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Parse:               1     82     100       4     36      0
Execute:             1      1       6       1      0      2       0
Fetch:            5000  26416   42198    6666 200040      0    9999

Execution plan:

NESTED LOOPS
    TABLE ACCESS (FULL) OF 'BRANCH'
    TABLE ACCESS (BY ROWID) OF 'ACCOUNTS'
        INDEX (RANGE SCAN) OF 'IACC_NUM' (NON-UNIQUE)

Статистика и план выполнения для случая,когда таблицы кластерированы
по полю ACC_NUM:

                 count    cpu    elap    phys     cr    cur    rows
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Parse:               1     96     130       5     45      0
Execute:             1      1       4       1      0      2       0
Fetch:            5000  10729   34486    5010  17969     20    9999

Execution plan:

NESTED LOOPS
    TABLE AXXESS (FULL) OF 'BRANCH'
    TABLE ACCESS (CLUSTER) OF 'ACCOUNT'

Из примеров видно,что ОРАКЛ выполняет оператор в кластерированных таблицах
более эффективно. Выгода выполнения кластерированного оператора видна в
различии величин в phys поле между fetch шагами.  Эта статистика отражает
количество блоков данных,которые должны быть прочитаны на шаге выборки.
Заметьте,что кластерированное объединение читает меньше блоков данных,чем
некластерированное. Кластерированное объединение выполняется также намного
быстрее,что видно по величинам в колонках cpu и elap. Заметьте,что шаг выборки
для кластерированного объединения требует много меньше времени,чем для
некластерированного.

ОБРАБОТКА МАССИВА (AP-ARREY PROCESSING).
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

AP может улучшить выполнение путем уменьшения количества вызовов СУБД из ваших
приложений. AP позволит вашему приложению выполнять один SQL оператор много
раз только однажды обратившись к СУБД. Этот раздел рассматривает:
- что такое AP
- как AP улучшает выполнение
- насколько большим делать массив
- как использовать AP в ваших приложениях

Как AP улучшает исполнение.
---------------------------
Каждый SQL оператор,выдаваемый приложением,пропускается через СУБД.  Для
запуска SQL оператора в СУБД,приложение должно выполнить функциональный вызов.
Эти вызовы влекут за собой перегрузку,которая может снизить выполнение,
особенно, если приложение взаимодействует через сеть. С AP приложения могут
выдавать SQL операторы много раз при одвызове СУБД. Например, с AP ваше
приложение может выполнить один вызов для того,чтобы выполнить SQL оператор


                                    -- 30 --



100 раз. Без AP ваше приложение должно было бы вызвать СУБД 100 раз, по разу
для каждого выполнения. Снижая среднюю перегрузку для каждого выполнения, AP
улучшает выполнение,особенно в сети.

Выбор размеров массива.
-----------------------
Выгоды выполнения AP зависят от размеров массива. Увеличивая размер массива,
вы можете и далее снижать количество вызовов СУБД. Однако, увеличение размера
массива за определенный предел может принести ничтожный выигрыш в выполнении.
Рекомендуется использовать размер массива 100,для наилучшего исполнения.
Например,предположим,что приложение выполняет SQL оператор 10000 раз. При
размере массива = 100 приложение должно вызвать СУБД 100 раз, один раз для
каждых 100 выполнений. Однако,увеличение размера массива свыше 100 не улучшит
значительно выполнение. Размер массива = 1000 снизит число вызовов до 10, но
этот выигрыш мал по сравнению с проигрышем от увеличения размеров массива и
соотносится как 1:100.

Применение AP в ваших приложениях.
----------------------------------
Многие прикладные средства ОРАКЛа могут получить выгоду от AP.Некоторые из них,
например SQL*Forms используют AP автоматически. Для других средств имеется
возможность некоторлго контроля над AP.Эти средства включают:

- ОРАКЛ прекомпиляторы (OPs - ORACLE Precompilers)
- ОРАКЛ интерфейсы вызовов (OCIs - ORACLE Call Interfaces)
- SQL*Plus
- SQL*Loader
- Утилиты экспорта и импорта

Использование AP с ОРАКЛ прекомпилятором.
-----------------------------------------
С ОРАКЛ прекомпилятором вы можете использовать AP для выполнения
встроенных SQL операторов много раз. Рассмотрим этот встроенный SQL
оператор в Pro*C Precompiler программе:

EXEC SOL INSERT INTO ACCOUNTS (ACC_NUM) VALUES (:acc_no);

Если переменная acc_no целая, то SQL оператор пропускается к СУБД и
выполняется один раз. ОРАКЛ вставляет одну запись в таблицу ACCOUNT.  В этой
записи поле ACC_NUM имеет значение acc_no.

Однако,если acc_no является массивом целых переменных длиной 100,то SQL
оператор проходит к СУБД и выполняется 100 раз. ОРАКЛ вставит 100 новых
записей в таблицу ACCOUNTS. В каждой записи поле ACC_NUM будет иметь значение
одного из элементов массива acc_no.  Можно также использовать AP в ОРАКЛ
прекомпиляторе для получения многих записей при помощи одного FETCH оператора.
Для дополнительной информации обратитесь к одному из этих руководств:

- Руководство программиста по ОРАКЛ прекомпилятору
- Руководство пользователя Pro*Ada прекомпилятору

Использование AP c интерфейсом вызова ОРАКЛа (OCIs).
----------------------------------------------------
Используя OCIs,можно реализовать AP со следующими OCI вызовами:

OEXN - вызов выполняется SQL-оператором много раз.Один из аргументов
              этого вызова определяет количество раз выполнения SQL оператора.


                                    -- 31 --



OFEN - Этот вызов возвращает множество записей,полученных при SQL-запросе. Один
                                                        из аргументов этого вызо

Для полной информации по использованию AP с OCIs обратитесь к следующим
руководствам:
- Руководство программиста по интерфейсу вызова ОРАКЛа.
- Руководство пользователя по интерфейсу вызова PRO*Ada ORACLE

Использование AP с SQL*Plus.
----------------------------
SQL*Plus использует AP автоматически,чтобы возвратить много записей из базы
одновременно. Однако вы можете контролировать количество записей в момент
времени. SQL*Plus-системная переменная ARRAYSIZE определяет какое количество
записей возвращаются при однократном вызове СУБД. Значение по умолчанию = 20.
Для того,чтобы увидеть текущее значение ARRAYSIZE введите SQL*Plus-команду:

SQL> SHOW ARRAYSIZE

Вы можете увеличить количество записей, возвращаемых при одном запросе,
увеличив величину ARRAYSIZE. Например,чтобы установить значение = 100, введите
SQL*Plus команду:

SQL> SET ARRAYSIZE 100

ARRAYSIZE также определяет количество записей,копируемых в одном пакете, с
помощью SQL*Plus COPY-команды. Для дополнительной информации по
SQL*Plus-командам обращайтесь к Руководству и Инструкции по SQL*Plus.

Использование AP с SQL*Loader.
------------------------------
SQL*Loader использует AP автоматически,чтобы вставить много записей в базу дан
ных за один раз. Однако,следует контролировать количество записей, вставляемых
за один раз. SQL*Loader-параметр командной строки ROWS определяет количество
записей, вставляемых за один раз. Его значение по умолчанию = 64.  Для того,
чтобы вставить больше записей за раз,задайте больше значение ROWS. Например,
чтобы вставить массив из 100 записей,вам следует вызвать SQL*Loader командой:

SQLLOAD USEID=BAM/BIM, CONTROL=C1.CTL, DISCARD=D1.DIS, ROWS=100

Для полной информации по SQL*Loader обращайтесь к Руководству пользователя по
утилитам СУБД ОРАКЛ.

Использование AP с Импорт/Экспорт утилитами.
--------------------------------------------
Импорт и Экспорт утилиты используют AP автоматически,чтобы писать данные в
СУБД ОРАКЛ и читать данные из СУБД ОРАКЛ. Однако,вы можете контролировать
количество данных, передаваемых за один раз.

Если вы используете Экспорт и Импорт с методом командной строки, вы можете
контролировать размер массива, определяя значение ключевого слова BUFFER. Это
слово определяет размер в байтах буфера,использу- емого для передачи данных.
Значение этого параметра по умолчанию определяется вашей операционной системой.
Для выбора величины параметра BUFFER определите размер вашей записи в батйтах,
затем выберите количество записей,которое вы хотите передать за раз.
Используйте выбранные значения для определения величины BUFFER.  Например,если
вы хотите передать записи около 4 кбайт длинной и при этом 100 записей за раз,
определите параметр BUFFER = 409.600 байт.  Вы можете активизировать импорт
следующей командой:

                                    -- 32 --



IMP USERID=BAM/BIM IGNORE=Y FULL=N TOUSER=BEM BUFFER=409600

Если вы используете Импорт и Экспорт в интеррактивном режиме, утилита спросит
вас о размере буфера. Размер,который вы задаете, должен быть достаточно
большим,чтобы вместить наибольшую запись.Для полной информации обратитесь к
Руководству пользователя по утилитам СУБД ОРАКЛ.



© KOAP Open Portal 2000