DeepEdit!

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

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Какими методами соединения и когда .можно пользоваться

Мониторинг операции соединения и правильный выбор ее типа могут обес­печить заметное увеличение производительности. Фактически, выбор правиль­ного механизма соединения и верного типа индекса оказывают сильнейшее позитивное влияние на производительность SQL. Начиная с Oracle 7.3, доступ­ными для пользователей стали три методологии соединения. Это так называе­мые соединения сортировкой-слиянием, соединение вложенными циклами и последняя разработка - метод хешированных соединений. Каждый из этих спо­собов обеспечивает свои характеристики производительности и подходит для различных ситуаций. Проблема, как всегда, состоит в том, чтобы оценить тре­бования и структуру SQL и обеспечить наилучший путь доступа для выполняе­мой операции.
Соединение 

сортировкой-слиянием 

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

where 

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

вложенными циклами - 

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

вложенными

       

это наиболее распространенная опера-
ция соединения для приложений OLTP и обычно она довольно эффективна.
Это объясняется тем, что в данной методологии соединения очень активно ис­пользуются индексы, а так как каждый производитель приложений до предела "нашпиговывает" используемые таблицы индексами, этот метод соединения оказывается востребован. К сожалению, если у системы имеется слишком мно­го эксцентричных индексов на используемые в ней таблицы, метод вложенных циклов может еще работать, когда сканирование полной таблицы с сортиров­кой-слиянием и хешированные соединения давно уже закончат свою деятель­ность. Понаблюдайте за этим!
Метод 

хешированных соединений 

существенно отличается от описанных выше. Oracle производит сканирование полной таблицы для каждой из соединяемых таблиц, а затем расщепляет их на столько хеш-разделов (не путайте с секциони­рованием индексов и таблиц), сколько возможно в зависимости от доступной памяти. Затем Oracle строит таблицу хеширования из какого-то одного хеширо-ванного раздела, по возможности такого, который укладывается в доступную память. Далее он использует соответствующий раздел в другой таблице, чтобы проверить таблицу хеширования. Для каждой пары разделов (по одному из каж­дой таблицы) Oracle выбирает меньший из двух разделов для построения табли­цы хеширования, а больший - для ее проверки. Все пары разделов, которые не умещаются в имеющуюся память, записываются на диск.
Хешированные соединения впервые появились в Oracle 7.3. Чтобы с наилуч-
шим эффектом воспользоваться этим методом, нужно сконфигурировать пара-
метры   инициализации        и
Хешированные соединения бывают полезны для соединения друг с другом бо-лыпих таблиц или в случае соединения маленькой таблицы с очень большой, когда предикаты фразы where обрабатывают значительную часть большой таб­лицы. И хотя Oracle придется во время сканирования обеих таблиц сделать мно­жество операций ввода/вывода, это более чем перекроется скоростью
объединения строк в памяти и переноса их из памяти на диск и обратно. Но
есть одно предупреждение: если размеры таблиц велики, нужно ожидать боль-
шого количества физических операций ввода/вывода, когда Oracle записывает
на диск для дальнейшей обработки создаваемые им в памяти        сег-
менты. Для минимизации этого ожидания можно соответствующим образом
установить параметр        желательно на уровне сеанса.

Замечание
Установка слишком больших значений параметров HASH_AREA_SIZE и HASH_MULTIBLOCK_IO_COUNT иногда приводит к тому, что оптимизатор Oracle начинает в качестве плана по умолчанию применитьхешированные соединения. Необходимо принять меры и сбалансировать установки этих параметров с транзакционными нуждами вашей системы (см. главу "Настройка экземпляра - буфер журнала обновлений и прочая настройка").
При выборе методологии объединения следует рассмотреть размеры обеих таблиц, избирательность индексов и доступность таблиц. Самое главное, прове­рьте свой выбор и выявите, какой из них возвращает данные за наименьшее время или с наименьшим количеством операций ввода/вывода. Именно эти Два момента присущи хорошо настроенному оператору SQL.
 









jAntivirus