(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Библиотечный кэш Oracle

Источник: Oracle Magazine RE
Джон Березниевич

Что такое библиотечный кэш?

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

  • Разборка (parsing) SQL-предложений и PL/SQL-блоков
  • Разрешение имен (расширение синонимов)
  • Проверка по словарю данных достоверности имен объектов и столбцов, на которые имеются ссылки
  • Авторизация привилегий пользователя на доступ или выполнение объектов
  • Вызов оптимизатора Oracle для выработки плана выполнения SQL-предложений и PL/SQL-компилятора для анонимных PL/SQL-блоков.
Для выполнения этих работ может потребоваться значительное количество ресурсов CPU и памяти, так что библиотечный кэш был разработан для того, чтобы позволить кэширование результатов этих работ на тот случай, если другие пользователи пытаются выполнять те же самые SQL-предложения или PL/SQL-блоки. Для большинства приложений характерно, что в процессе нормальной обработки множеством пользователей неоднократно выполняются одни и те же SQL-предложения. Таким образом, сохранив результаты в кэше и сделав их доступными для немедленного просмотра при последующих выполнениях, можно существенно повысить производительность Oracle. Вы можете считать, что в отличие от буферного кэша, который является исключительно кэшем данных, библиотечный кэш является в основном кэшем исполняемого кода.

Библиотечный кэш разделен на несколько регионов (или библиотек) в зависимости от типа кэшируемых в них объектов. Эти библиотеки также называются пространствами имен (namespaces). Перечислим некоторые из пространств имен:

  • SQL AREA = Совместно используемые курсоры SQL-предложений
  • TABLE/PROCEDURE = Определения таблиц и спецификации хранимых программ PL/SQL (процедур, функций или пакетов)
  • BODY = Тела хранимых PL/SQL-программ (процедур, функций и пакетов)
  • TRIGGER = Табличные триггеры на PL/SQL
  • INDEX = Стандартные индексы
  • CLUSTER = Кластеры таблиц
  • OBJECT = Объекты Oracle8
  • PIPE = Каналы базы данных
Объекты библиотечного кэша

Разделяемые курсоры SQL, PL/SQL и другие объекты хранятся в библиотечном кэше в сложной структуре, называемой объектом библиотечного кэша. Объекты библиотечного кэша составлены из нескольких частей, каждая из которых занимает один или несколько кусков памяти в разделяемом пуле. Объект имеет заголовок, который, по существу, является идентификатором объекта. Он содержит "дескриптор" ("handle") объекта в кэше, а также текст SQL или PL/SQL-блока. Именно нахождение заголовка является результатом логического чтения библиотечного кэша, которое выполняется всякий раз, когда пользователь посылает для выполнения в Oracle SQL-предложение. Результат "Gethit" (попадание, удача) означает, что этот объект ранее был загружен в библиотечный кэш и его дескриптор идентифицирован.

Другие компоненты объекта библиотечного кэша могут быть разными в зависимости от типа объекта, но каждый из них индивидуально распределен в кусках разделяемого пула памяти. Когда объект библиотечного кэша выполняется, все связанные с ним в разделяемом пуле части закрепляются на время выполнения. Если эти куски памяти не закреплены (объект не выполняется), они могут быть удалены (механизм LRU) из разделяемого пула в случае требования памяти от других потребителей разделяемого пула. Таким образом, вполне возможно, что заголовок библиотечного кэша существует, но одна или несколько связанных с ним компонент библиотечного кэша вытеснены из пула. В этом случае запрос на закрепление объекта потребует перезагрузки объекта в кэш. Перезагрузка - это дорогое действие, поскольку при этом требуется повторно создавать объект библиотечного кэша, и ее можно было бы избежать, если запретить вытеснение компонент объекта из разделяемого пула.

Коэффициенты производительности библиотечного кэша

Для мониторинга за производительностью библиотечного кэша Oracle в основном используются следующие коэффициенты:

  • Коэффициент GetHit
  • Коэффициент PinHit
  • Коэффициент Reload/Pin.
Вы можете получить значения этих коэффициентов, сделав запрос к виртуальной таблице V$LIBRARYCACHE, или использовав соответсвующий экран (Library Cache Details List) Diagnostic Center (рекомендуется).

Коэффициент GetHit

Большинство систем должно иметь очень высокий коэффициент GetHit - более 95 % для наиболее часто используемых пространств имен. Низкие значения этого коэффициента обычно являются результатом недостаточного совместного использования курсоров SQL и PL/SQL. В этом случае приложение SQL должно быть исследовано на предмет плохого использования связываемых переменных(то есть, SQL-литералов). Компанией Savant специально разработан продукт Profiler , который помогает идентифицировать SQL-предложения, в которых вместо связываемых переменных используются литералы.

Коэффициент PinHit

Коэффициент PinHit указывает, сколько раз пользователи фактически запрашивали и имели возможность использовать и выполнить объекты библиотечного кэша, благодаря тому, что эти объекты были закреплены для выполнения. Подобно коэффициенту GetHit, его значение должно быть очень высоко (95% или больше) для пространств имен, к которым имеется весьма большое число логических чтений (GET). Если значение этого коэффициента низкое, то это, вероятнее всего, происходит из-за большого количества SQL-предложений, не использующих разделяемые ресурсы.

Коэффициент Reload/Pin

Это, вероятно, наиболее важный из трех перечисленных выше коэффициентов. Если имеется значительное число перезагрузок, это значит, что части объектов библиотечного кэша удаляются из разделяемого пула, а затем заново загружаются другими процессами. При этом перезагрузка происходит с диска, а это всегда дорогая операция. Следует провести в режиме SIGMA мониторинг библиотечного кэша, используя Library Cache Details List Диагностического центра , чтобы составить представление, имеется ли вообще существенное число перезагрузок. Режим DELTA с малыми интервалами регенерации не может дать достаточно большую выборку закреплений конкретных объектов, однако, если мониторинг в режиме DELTA показывает существенное число перезагрузок, то почти всегда производительность системы поставлена под угрозу.

Если коэффициент Reload/Pin превышает 1-2 %, может помочь увеличение значения параметра инициализации SHARED_POOL_SIZE.

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

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

Об авторе

Джон Березневич - почетный соучредитель и технический менеджер продуктов корпорации Savant. Он является одним из основных дизайнеров и разработчиков Диагностического центра для Oracle корпорации Savant. Джон также является соавтором книг Oracle Built-in Packages и Oracle PL/SQL Built-ins Pocket Reference (издательство O'Reilly & Associates). Кроме того, он популярный и частый докладчик на больших и малых конференциях Oracle.



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 22.09.2000 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Oracle Database Standard Edition 2 Named User Plus License
Oracle Database Standard Edition 2 Processor License
Oracle Database Personal Edition Named User Plus License
Oracle Database Personal Edition Named User Plus Software Update License & Support
GFI FaxMaker и 1 год поддержки (10-49 лицензий)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Программирование на Visual С++
Программирование на Visual Basic/Visual Studio и ASP/ASP.NET
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100