Мониторинг операции соединения и правильный выбор ее типа могут обеспечить заметное увеличение производительности. Фактически, выбор правильного механизма соединения и верного типа индекса оказывают сильнейшее позитивное влияние на производительность SQL. Начиная с Oracle 7.3, доступными для пользователей стали три методологии соединения. Это так называемые соединения сортировкой-слиянием, соединение вложенными циклами и последняя разработка - метод хешированных соединений. Каждый из этих способов обеспечивает свои характеристики производительности и подходит для различных ситуаций. Проблема, как всегда, состоит в том, чтобы оценить требования и структуру SQL и обеспечить наилучший путь доступа для выполняемой операции.
Соединение
сортировкой-слиянием
является операцией с наборами. Это значит, что каждый шаг такого соединения должен быть закончен до того, как данные можно будет передать на следующий шаг. Операция с наборами работает со всеми строками, как с одиночным объектом. Соединения сортировкой-слиянием следует рассматривать в тех случаях, когда индексирование запроса невозможно. Это может быть вызвано отсутствием подходящего индекса, способного поддержать фразуwhere
запроса, или использованием в этой фразе функции отиндексируемого столбца.
Соединение с
вложенными циклами -
это строковая операция, часто она более предпочтительна для обработки транзакций. С ее помощью посылаются обрабатываемые строки из одного шага на следующий еще до того, как закончена вся обработка на предыдущем шаге. Методология вложенных циклов напоминает нам о первом классе программирования, в котором мы учились много лет тому назад. Самым интересным в те времена для нас было написание программ на языке Pascal для манипулирования двумерными массивами. Для того чтобы сделать это, нам приходилось использовать цикл в цикле - вложенный цикл.Соединение с
вложенными
-
это наиболее распространенная опера-ция соединения для приложений OLTP и обычно она довольно эффективна.
Это объясняется тем, что в данной методологии соединения очень активно используются индексы, а так как каждый производитель приложений до предела "нашпиговывает" используемые таблицы индексами, этот метод соединения оказывается востребован. К сожалению, если у системы имеется слишком много эксцентричных индексов на используемые в ней таблицы, метод вложенных циклов может еще работать, когда сканирование полной таблицы с сортировкой-слиянием и хешированные соединения давно уже закончат свою деятельность. Понаблюдайте за этим!
Метод
хешированных соединений
существенно отличается от описанных выше. Oracle производит сканирование полной таблицы для каждой из соединяемых таблиц, а затем расщепляет их на столько хеш-разделов (не путайте с секционированием индексов и таблиц), сколько возможно в зависимости от доступной памяти. Затем Oracle строит таблицу хеширования из какого-то одного хеширо-ванного раздела, по возможности такого, который укладывается в доступную память. Далее он использует соответствующий раздел в другой таблице, чтобы проверить таблицу хеширования. Для каждой пары разделов (по одному из каждой таблицы) Oracle выбирает меньший из двух разделов для построения таблицы хеширования, а больший - для ее проверки. Все пары разделов, которые не умещаются в имеющуюся память, записываются на диск.Хешированные соединения впервые появились в Oracle 7.3. Чтобы с наилуч-
шим эффектом воспользоваться этим методом, нужно сконфигурировать пара-
метры инициализации и
шим эффектом воспользоваться этим методом, нужно сконфигурировать пара-
метры инициализации и
Хешированные соединения бывают полезны для соединения друг с другом бо-лыпих таблиц или в случае соединения маленькой таблицы с очень большой, когда предикаты фразы where обрабатывают значительную часть большой таблицы. И хотя Oracle придется во время сканирования обеих таблиц сделать множество операций ввода/вывода, это более чем перекроется скоростью
объединения строк в памяти и переноса их из памяти на диск и обратно. Но
есть одно предупреждение: если размеры таблиц велики, нужно ожидать боль-
шого количества физических операций ввода/вывода, когда Oracle записывает
на диск для дальнейшей обработки создаваемые им в памяти сег-
есть одно предупреждение: если размеры таблиц велики, нужно ожидать боль-
шого количества физических операций ввода/вывода, когда Oracle записывает
на диск для дальнейшей обработки создаваемые им в памяти сег-
менты. Для минимизации этого ожидания можно соответствующим образом
установить параметр желательно на уровне сеанса.
установить параметр желательно на уровне сеанса.
Замечание
Установка слишком больших значений параметров HASH_AREA_SIZE и HASH_MULTIBLOCK_IO_COUNT иногда приводит к тому, что оптимизатор Oracle начинает в качестве плана по умолчанию применитьхешированные соединения. Необходимо принять меры и сбалансировать установки этих параметров с транзакционными нуждами вашей системы (см. главу "Настройка экземпляра - буфер журнала обновлений и прочая настройка").
При выборе методологии объединения следует рассмотреть размеры обеих таблиц, избирательность индексов и доступность таблиц. Самое главное, проверьте свой выбор и выявите, какой из них возвращает данные за наименьшее время или с наименьшим количеством операций ввода/вывода. Именно эти Два момента присущи хорошо настроенному оператору SQL.
< Предыдущая | Следующая > |
---|