ДОПОЛНИТЕЛЬНЫЕ ВОПРОСЫ НАСТРОЙКИ


ГЛАВА 24

        ----------------------------------------------------------------

        ДОПОЛНИТЕЛЬНЫЕ ВОПРОСЫ НАСТРОЙКИ



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

            *  сортировку

            *  свободные списки

            *  контрольные точки











































                                  Дополнительные вопросы настройки  24-1


----------------

Настройка сортировки

        Некоторые приложения заставляют ORACLE сортировать данные.   Эта
        секция рассказывает вам:
            *  как распределять память для оптимизации ваших сортировок
            *  как избежать сортировки при создании индексов

Распределение памяти для областей сортировки
--------------------------------------------
        Умалчиваемый размер области сортировки адекватен для большинства
        случаев  сортировки.    Однако,  если   ваше  приложение   часто
        выполняет большие сортировки по данным, не умещающимся в область
        сортировки,  то  вы  можете  пожелать  увеличить  размер области
        сортировки.   Большая  сортировка   может  быть  вызвана   любым
        предложением  SQL,  которое  выполняет  сортировку  на   большом
        количестве  строк.   Предложения  SQL,  выполняющие  сортировку,
        перечисляются в главе 9 "Структуры памяти и процессы"  документа
        ORACLE7 Server Concepts Manual.

Распознавание больших сортировок

        ORACLE собирает статистики, отражающую активность сортировок,  и
        поддерживает    эти    статистики    в    динамической   таблице
        производительности V$SYSSTAT.  По умолчанию эта таблица доступна
        лишь  пользователю  SYS,  а  также другим пользователям, имеющим
        системную  привилегию  SELECT  ANY  TABLE.  Поведение сортировок
        отражают следующие статистики:

        sorts(memory)   Значение   этой   статистики   показывает  число
                        сортировок,  достаточно  маленьких,  чтобы  быть
                        выполненными    непосредственно    в    областях
                        сортировки, без  обмена с  временными сегментами
                        на диске.
        sorts(disk)     Значение   этой   статистики   показывает  число
                        сортировок,   слишком   больших,   чтобы    быть
                        выполненными    непосредственно    в    областях
                        сортировки,  и  требующих  обмена  с  временными
                        сегментами на диске.

        Отслеживайте  эти  статистики  за  период времени, пока работает
        ваше приложение, с помощью следующего запроса:

        SELECT name, value
            FROM v$sysstat
            WHERE name IN ('sorts(memory)', 'sorts(disk)')

        Вывод этого запроса может иметь следующий вид:
        NAME                                            VALUE
        ------------------------------------------ ----------
        sorts(memory)                                     965
        sorts(disk)                                         8

Увеличение размера области сортировки

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

24-2  Руководство администратора


Преимущества больших областей сортировки

        Увеличение  размера  области  сортировки  приводит  к увеличению
        размера  памяти,   требуемой  каждому   прогону  сортировки,   и
        уменьшает   общее   число   прогонов.    Это   может    улучшить
        производительность двумя путями:

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

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


Недостатки больших областей сортировки

        Увеличение размера области сортировки заставляет каждый  процесс
        ORACLE, выполняющий сортировку, распределять большее  количество
        памяти.   Это  сокращает  объем  памяти,  доступный  для  личных
        областей  SQL  и  PL/SQL.   Оно  может также отразиться на общем
        распределении памяти  операционной системой  и повлечь  за собой
        страничный обмен  или свопинг.   Прежде, чем  увеличивать размер
        области сортировки, убедитесь, что в вашей операционной  системе
        достаточно   памяти,   чтобы   удовлетворить   вашим   возросшим
        потребностям.

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

























                                  Дополнительные вопросы настройки  24-3


Устранение сортировок
---------------------

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

        ORACLE  также  позволяет  вам  создавать индексы без сортировки.
        Если  строки  в  таблице  загружаюся  в возрастающем порядке, вы
        можете создать индекс быстрее без сортировки.


Опция NOSORT

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

        Создавая затем индекс, используйте опцию NOSORT в команде CREATE
        INDEX.   Например,  следующее  предложение  CREATE INDEX создает
        индекс EMP_INDEX по столбцу ENAME таблицы EMP, не сортируя строк
        в таблице EMP:

        CREATE INDEX emp_index
            ON emp(ename)
            NOSORT


Предпосылки выбора опции NOSORT

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

        С  другой  стороны,  если  у  вас однопроцессорный компьютер, вы
        должны сортировать данные перед загрузкой, когда это возможно, а
        после этого создавать индекс с опцией NOSORT.




















24-4  Руководство администратора


----------------

Сокращение соперничества за свободные списки

        Соперничество    за    свободные    списки    может     ухудшать
        производительность    некоторых    приложений.     Эта    секция
        рассказывает вам:

            *  как идентифицировать соперничество за свободные списки

            *  как увеличить число свободных списков


Идентификация соперничества за свободные списки

        Соперничество за свободные  списки выражается как  соперничество
        за  свободные   блоки  данных   в  буферном   кэше.   Вы  можете
        определить,     ухудшает     ли     это     соперничество   вашу
        производительность,      опрашивая      динамическую     таблицу
        производительности V$WAITSTAT.

        Таблица V$WAITSTAT содержит статистики о соперничестве за блоки.
        По умолчанию эта таблица доступна лишь пользователю SYS, а также
        другим пользователям,  имеющим системную  привилегию SELECT  ANY
        TABLE.  Соперничество за свободные блоки отражается  статистикой
        "free  list".   Отслеживайте  эту  статистику за период времени,
        пока работает ваше приложение, с помощью следующего запроса:

        SELECT class, count
            FROM v$waitstat
            WHERE class = 'free list'

        Результат этого запроса может выглядеть следующим образом:

        CLASS           COUNT
        --------------  ---------
        free list             459

        Сравните число ожиданий свободных блоков с общим числом запросов
        данных за тот  же период времени.   Вы можете отслеживать  общее
        число запросов  данных за  период времени  с помощью  следующего
        запроса:

        SELECT SUM(value)
            FROM v$sysstat
            WHERE name IN ('db vlock gets', 'consistent gets')

        Вывод этого запроса может выглядеть следующим образом:

        SUM(VALUE)
        ----------
            929530

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







                                  Дополнительные вопросы настройки  24-5


Добавление свободных списков
----------------------------

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

        Пересоздание таблицы  может подразумевать  просто ее  удаление и
        повторное  создание.   Однако  вы  можете  пожелать вместо этого
        использовать другие способы:

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

----------------

Настройка контрольных точек

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

Как контрольные точки влияют на производительность
--------------------------------------------------

        Контрольные точки влияют:
            *  на производительность времени восстановления
            *  на производительность выполнения

Производительность времени восстановления

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

Производительность выполнения

        Контрольная   точка   может   ухудшать   производительность   на
        непродолжительные моменты времени по следующим причинам:

            *  Контрольные  точки  заставляют  процесс  DBWR   выполнять
               операции ввода-вывода.
            *  Если  процесс  CKPT  не  включен,  то  контрольные  точки
               заставляют процесс DBWR  обновлять файлы данных,  и могут
               на время отвлечь LGWR от записи информации повторения.

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

24-6  Руководство администратора


Выбор частоты контрольных точек
-------------------------------

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

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

            *  Установите  значение  параметра   LOG_CHECKPOINT_INTERVAL
               больше, чем размер  вашего самого большого  файла журнала
               повторения.

            *  Установите   значение   параметра  LOG_CHECKPOINT_TIMEOUT
               равным 0.  Это значение устраняет контрольные точки через
               интервалы времени.

        Такие значения этих  параметров устранят все  контрольные точки,
        за  исключением  тех,   которые  выполняются  при   переключении
        журнала.

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


Сокращение влияния контрольных точек на производительность
----------------------------------------------------------

        Вы можете замечать кратковременное падение производительности  в
        момент выполнения  контрольной точки.   Это падение  объясняется
        накапливанием записей  повторения в  буфере журнала  повторения.
        Процесс  LGWR  может  быть  слишком занят обновлением заголовков
        файлов данных,  и не  успевает переписывать  записи повторения в
        файл  журнала.   В  этом  случае  вы  можете  уменьшить  влияние
        контрольных   точек   на   производительность,   включив процесс
        контрольной  точки  (CKPT).   CKPT  обновляет  заголовки  файлов
        данных, когда происходит  контрольная точка, и  освобождает LGWR
        для  записи   информации  повторения.    Чтобы  включить   CKPT,
        установите   значение    TRUE   для    параметра   инициализации
        CHECKPOINT_PROCESS.   Чтобы   отключить  CKPT,   установите  это
        значение в  FALSE.  По  умолчанию процесс  CKPT отключен.  Перед
        тем,  как   включать  CKPT,   вы  должны   убедиться,  что  ваша
        операционная система позволяет поддержать увеличенное количество
        процессов.   Вам  может  также  потребоваться увеличить значение
        параметра инициализации PROCESSES.