СТАТЬЯ |
18.05.01
|
При выборе таблиц для кластеризации руководствуйтесь следующими правилами:
Рассмотрите достоинства и недостатки кластеров по отношению к потребностям вашего приложения. Например, вы можете решить, что выигрыш в производительности для операций соединения перевешивает потери в производительности для тех предложений, которые модифицируют значения ключа кластера. Вы можете поэкспериментировать и сравнить время обработки для ваших таблиц как с кластером, так и без него. Для создания кластера используйте команду CREATE CLUSTER. Для дополнительной информации о создании кластеров обратитесь к главе 2 "Управление объектами схемы" этого руководства.
При выборе таблиц для хэширования руководствуйтесь следующими правилами:
Рассмотрите достоинства и недостатки хэш-кластеров по отношению к потребностям вашего приложения. Вы можете поэкспериментировать и сравнить время обработки для ваших таблиц как с хэш-кластером, так и без него (с индексом). Для создания хэш-кластера используйте команду CREATE CLUSTER с параметрами HASH и HASHKEYS. Для дополнительной информации о создании хэш-кластеров обратитесь к главе 2 "Управление объектами схемы" этого руководства.
Как определить количество хэш-значений
При создании хэш-кластера вы должны использовать параметр HASHKEYS предложения CREATE CLUSTER, чтобы указать количество хэш-значений для этого хэш-кластера. Для лучшей производительности хэш-просмотров выбирайте значение HASHKEYS не меньше, чем количество значений ключа кластера. Такое значение уменьшит число КОЛЛИЗИЙ, т.е. случаев, когда разные значения ключа кластера дают одно и то же хэш-значение. Коллизии заставляют ORACLE после выполнения хэш-просмотра проверять строки в каждом блоке, отыскивая нужное значение ключа кластера. Поэтому коллизии снижают производительность хэш-просмотров.
ORACLE всегда округляет заданное вами значение HASHKEYS вверх до ближайшего простого числа, чтобы вычислить действительное количество хэш-значений. Это округление имеет целью сокращение числа коллизий.
Как выбирать подход оптимизации
Эта секция обсуждает следующие вопросы:
Когда использовать стоимостной подход
В общем, вы должны использовать стоимостной подход для всех ваших новых приложений. Стоимостной подход обычно выбирает план исполнения, который как минимум не хуже плана исполнения, выбираемого регулярным подходом, особенно для больших запросов с множественными соединениями или множественными индексами. Стоимостной подход также улучшает продуктивность разработки, устраняя необходимость вам самим настраивать ваши предложения SQL.
Чтобы задействовать стоимостной подход для предложения, соберите статистики для таблиц, адресуемых этим предложением, и убедитесь, что параметр инициализации OPTIMIZER_MODE имеет свое умалчиваемое значение COST.
Вы можете также задействовать стоимостной подход следующими способами:
Генерация статистик
Поскольку стоимостной подход опирается на статистики, вы должны сгенерировать статистики для всех таблиц, кластеров и индексов, адресуемых в ваших предложениях SQL, прежде чем сможете применять стоимостной подход. Если размеры и распределение данных в ваших таблицах часто изменяются, вы должны генерировать эти статистики регулярно, чтобы гарантировать, что они точно отражают данные в таблицах.
ORACLE может генерировать статистики двумя способами:
Используйте, как правило, оценку вместо точного вычисления, если у вас нет оснований полагать, что вам требуются точные значения:
Сбор статистик по таблице блокирует эту таблицу и препятствует доступу к ней предложений SELECT, INSERT, UPDATE и DELETE. По этой причине, оценивание особенно полезно при сборе статистик по таблицам, к которым одновременно обращаются другие приложения, потому что при этом минимизируется время недоступности этих таблиц. По той же причине, не собирайте статистик по вашей производственной базе данных во время периодов высокой активности.
Когда вы генерируете статистики для таблицы, столбца или индекса, ORACLE заменяет существующие статистики по этому объекту, если они уже есть в словаре данных, новыми статистиками. ORACLE помечает как недействительные все ранее разобранные предложения SQL, которые обращаются к любому из анализируемых объектов. При очередном исполнении такого предложения оптимизатор автоматически выберет новый план исполнения, базирующийся на новых статистиках. Распределенные предложения, выданные на удаленных базах данных, которые обращаются к анализируемым объектам, будут использовать новые статистики при очередном разборе.
Некоторые статистики всегда вычисляются, независимо от того, выбрали ли вы оценку или точное вычисление. Если вы выбрали оценку, но время, которое экономится за счет выборки, незначительно, то ORACLE выбирает вычисление.
Чтобы сгенерировать статистики, используйте команду ANALYZE.
Пример Следующий пример генерирует статистики для таблицы EMP и ее индексов:
ANALYZE TABLE emp
ESTIMATE STATISTICS
Выбор цели для стоимостного подхода
План исполнения, выбираемый оптимизатором, может изменяться в зависимости от цели оптимизатора. Оптимизация для лучшей пропускной способности, т.е. для минимизации времени на возвращение всех строк, обрабатываемых предложением, с большей вероятностью приведет к полному просмотру таблицы, чем к просмотру индекса, и к соединению через сортировку-слияние, нежели к соединению через вложенные циклы. Оптимизация для лучшего времени ответа, т.е. минимизация времени на возвращение первой строки, обрабатываемой предложением, с большей вореятностью приведет к доступу через индекс и соединению через вложенные циклы. Например, рассмотрим предложение соединения, которое может быть выполнено либо операцией вложенных циклов, либо операцией сортировки-слияния. Операция сортировки-слияния быстрее возвратит весь результат запроса, тогда как операция вложенных циклов может быстрее возвратить первую строку. Поэтому, если целью является лучшая пропускная способность, оптимизатор скорее выберет соединение через сортировку-слияние; и наоборот, если целью является лучшее время ответа, оптимизатор предпочтет соединение через вложенные циклы.
Выберите цель для оптимизатора, базируясь на потребностях вашего приложения:
По умолчанию, стоимостной подход оптимизирует для лучшей пропускной способности. Вы можете изменить цель стоимостного подхода следующими способами:
Пример
Следующее предложение изменяет цель стоимостного подхода для вашей сессии на лучшее время ответа:
ALTER SESSION
SET OPTIMIZER_GOAL = FIRST_ROWS
Когда использовать регулярную оптимизацию
Если вы разрабатывали приложения, используя предыдущую версию ORACLE, и проводили тщательную настройку ваших предложений SQL, основываясь на правилах оптимизатора, то вы можете захотеть продолжать использование регулярной оптимизации и после перевода этих приложений на ORACLE7. Если вы не собирали статистику и не добавляли советов в ваши предложения SQL, то эти предложения будут продолжать использовать регулярную оптимизацию. Однако в конце концов вы должны перевести ваши существующие приложения на стоимостной подход, потому что регулярный подход не будет поддерживаться в будущих версиях ORACLE.
Вы можете попробовать стоимостной подход на ваших приложениях, просто собрав статистики. После этого вы можете вернуться к регулярной оптимизации, просто удалив эти статистики, либо установив значение параметра инициализации OPTIMIZER_MODE (или параметра OPTIMIZER_GOAL команды ALTER SESSION) в RULE. Вы можете также использовать это значение, если хотите просто собрать и исследовать статистики по вашим данным, не переходя на применение стоимостного подхода.
Как разработчик приложения, вы можете иметь о ваших данных такую информацию, которая неизвестна оптимизатору. Например, вы можете знать, что некоторый индекс более селективен для тех или иных запросов, чем это может определить оптимизатор. Базируясь на этой информации, вы можете быть способны выбирать более эффективные планы исполнения, чем это может сделать оптимизатор. В таком случае, вы можете использовать советы, чтобы заставить оптимизатор использовать тот план исполнения, который выбран вами.
СОВЕТЫ - это подсказки, которые вы даете оптимизатору для конкретного предложения SQL. Советы позволяют
вам принимать те решения, которые обычно принимаются оптимизатором. Вы можете использовать советы, чтобы
специфицировать:
Совет применяется к оптимизации лишь того блока предложения, в котором он появляется. БЛОК ПРЕДЛОЖЕНИЯ - это одно из следующих предложений или частей
предложений:
Например, составной запрос, состоящий из двух составляющих запросов, объединенных оператором UNION, имеет два блока предложения, по одному для каждого составляющего запроса. Поэтому советы в первой компоненте такого запроса применяются только к оптимизации первого составляющего запроса, и не применяются к оптимизации второго составляющего запроса.
Вы можете посылать советы оптимизатору для предложения SQL, оформляя их как комментарии внутри предложения. Для дополнительной информации о комментариях обратитесь к главе 2 "Элементы SQL" документа ORACLE7 Server SQL Language Reference Manual.
Блок предложения может иметь лишь один комментарий, содержащий советы. Этот комментарий может следовать только за ключевым словом SELECT, UPDATE или DELETE. Следующие синтаксические диаграммы показывают синтаксис советов для обоих типов комментариев, которые ORACLE поддерживает в блоке предложения:
где:
Если вы специфицируете советы некорректно, ORACLE игнорирует их, но не возвращает ошибку:
ORACLE также игнорирует любые советы в предложениях SQL в окружениях, использующих PL/SQL версии 1, например, в триггерах SQL*Forms версии 3.
Оптимизатор распознает советы лишь тогда, когда используется стоимостной подход. И обратно, если вы включите в блок предложения любой совет (за исключением совета RULE), то оптимизатор автоматически использует стоимостной подход.
предыдущая часть | содержание | следующая часть
Дополнительную информацию Вы можете получить в компании Interface Ltd.
Обсудить на форуме Oracle
Отправить ссылку
на страницу по e-mail
Interface Ltd. Отправить E-Mail http://www.interface.ru |
|
Ваши замечания и предложения отправляйте
автору По техническим вопросам обращайтесь к вебмастеру Документ опубликован: 16.05.01 |