Открыть сервис

V$SQL_WORKAREA

V$SQL_WORKAREA — это динамическое представление (view) в системе управления базами данных Oracle, которое содержит информацию об использовании рабочей области (work area) для курсоров, выполняющих SQL-операторы, требующие интенсивной работы с памятью. Представление относится к категории V$ (V$ fixed views) и предоставляет данные о выделении, использовании и освобождении памяти в контексте конкретных SQL-операторов, выполняемых в сеансах базы данных.

Назначение и область применения

Рабочая область (work area) в Oracle — это область памяти, выделяемая для выполнения операций, которые не могут быть полностью обработаны в оперативной памяти и требуют временного хранения промежуточных результатов на диске. К таким операциям относятся сортировка (ORDER BY, GROUP BY), хеш-соединения (hash joins), битовые карты (bitmap operations) и некоторые виды агрегации. V$SQL_WORKAREA позволяет администраторам баз данных (DBA) и разработчикам анализировать, как конкретные SQL-операторы используют память рабочей области, и выявлять проблемы с производительностью, связанные с нехваткой оперативной памяти или неоптимальным распределением ресурсов.

Структура и ключевые столбцы

Представление V$SQL_WORKAREA содержит следующие основные столбцы, описывающие характеристики рабочей области для каждого SQL-оператора:

СтолбецТип данныхОписание
SQL_IDVARCHAR2(13)Уникальный идентификатор SQL-оператора
CHILD_NUMBERNUMBERНомер дочернего курсора (для версий оператора с разными планами выполнения)
WORKAREA_ADDRESSRAW(4 или 8)Адрес рабочей области в памяти
OPERATION_TYPEVARCHAR2(20)Тип операции, использующей рабочую область (например, SORT, HASH-JOIN, BITMAP)
POLICYVARCHAR2(10)Политика выделения памяти (AUTO — автоматическая, MANUAL — ручная)
ESTIMATED_OPTIMAL_SIZENUMBERОценка размера рабочей области в байтах, необходимая для выполнения операции в оптимальном режиме (без использования диска)
ESTIMATED_ONEPASS_SIZENUMBERОценка размера рабочей области в байтах, необходимая для выполнения операции в однопроходном режиме (один проход на диск)
LAST_MEMORY_USEDNUMBERФактический объём памяти, использованный рабочей областью при последнем выполнении
LAST_EXECUTIONVARCHAR2(10)Режим последнего выполнения (OPTIMAL, ONEPASS, MULTIPASS)
LAST_DEGREENUMBERСтепень параллелизма при последнем выполнении
TOTAL_EXECUTIONSNUMBERОбщее количество выполнений данного SQL-оператора
OPTIMAL_EXECUTIONSNUMBERКоличество выполнений в оптимальном режиме
ONEPASS_EXECUTIONSNUMBERКоличество выполнений в однопроходном режиме
MULTIPASS_EXECUTIONSNUMBERКоличество выполнений в многопроходном режиме

Режимы выполнения рабочей области

Рабочая область может работать в трёх режимах, которые определяют, сколько раз данные сбрасываются на диск:

  • OPTIMAL — операция выполняется полностью в оперативной памяти, без обращений к диску. Это наиболее производительный режим.
  • ONEPASS — данные сбрасываются на диск один раз, что происходит при нехватке памяти для полного выполнения в оперативной памяти. Производительность снижается, но остаётся приемлемой.
  • MULTIPASS — данные многократно сбрасываются на диск, что приводит к значительному снижению производительности из-за частых операций ввода-вывода.

Применение в диагностике производительности

V$SQL_WORKAREA используется для выявления SQL-операторов, которые работают в неоптимальных режимах (ONEPASS или MULTIPASS). Высокое количество MULTIPASS-выполнений для конкретного оператора может указывать на недостаточный размер рабочей области, что приводит к избыточным операциям ввода-вывода и замедлению запросов. Администраторы могут анализировать данные из этого представления совместно с другими динамическими представлениями, такими как V$SQL, V$SQL_PLAN и V$SESSTAT, для настройки параметров памяти (например, PGA_AGGREGATE_TARGET) или оптимизации планов выполнения.

Взаимосвязь с другими представлениями

V$SQL_WORKAREA тесно связано с представлением V$SQL_WORKAREA_ACTIVE, которое показывает текущие активные рабочие области, и V$PGA_TARGET_ADVICE, которое предоставляет рекомендации по настройке размера глобальной области программы (PGA). Для получения детальной информации о конкретном SQL-операторе можно выполнить запрос, объединяющий V$SQL_WORKAREA с V$SQL:

``sql SELECT s.sql_text, w.* FROM V$SQL_WORKAREA w, V$SQL s WHERE w.sql_id = s.sql_id AND w.child_number = s.child_number; ``

Ограничения и особенности

  • Представление доступно только в Oracle Database (начиная с версии 9i) и не имеет аналогов в других СУБД.
  • Данные в V$SQL_WORKAREA хранятся только для курсоров, которые ещё находятся в кэше библиотеки (library cache). После вытеснения курсора из кэша информация теряется.
  • Для просмотра данных требуется привилегия SELECT ANY DICTIONARY или доступ к представлению через роль DBA.
  • В версиях Oracle до 10g представление называлось V$SQL_WORKAREA, но в более поздних версиях его функциональность была расширена, и оно стало частью семейства V$SQL_*.

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

Для выявления SQL-операторов, которые чаще всего выполняются в режиме MULTIPASS, можно выполнить следующий запрос:

``sql SELECT sql_id, child_number, operation_type, total_executions, multipass_executions, ROUND(multipass_executions / total_executions * 100, 2) AS multipass_pct FROM V$SQL_WORKAREA WHERE total_executions > 0 AND multipass_executions > 0 ORDER BY multipass_executions DESC; ``

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

Источники

  • Oracle Database SQL Language Reference (документация Oracle)
  • Oracle Database Performance Tuning Guide (документация Oracle)
  • Oracle Database Reference (документация Oracle)
  • «Oracle Database 11g Performance Tuning Tips & Techniques» — R. Niemiec
  • «Expert Oracle Database Architecture» — T. Kyte

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →