Программирование >>  Oracle 

1 ... 382 383 384 [ 385 ] 386 387 388 ... 469


1578 Приложение А

или загрузка больших объемов данных,выполнение сложных запросов, требующих распараллеливания. При выполнении этих продолжительных действий информация о ходе работы записывается в представление динамической производительности V$SESSION LONGOPS, что позволяет оценить объем сделанного. Это представление можно использовать и в приложениях. В представлении отражается состояние действий, выполняющихся в базе данных более шести секунд. Другими словами, в функции сервера Oracle, которые, по предположению разработчиков, обычно выполняются дольше шести секунд, включены вызовы процедуры, вставляющей данные в представление V$SESSION LONGOPS. Это не означает, что при выполнении действия продолжительностью более шести секунд в это представление автоматически будет что-то записываться. К таким действиям сейчас относятся многие функции резервного копирования и восстановления, сбора статистической информации и выполнение запросов. В каждой новой версии Oracle появляются новые действия.

Изменения в этом представлении сразу же доступны для других сеансов, т.е. транзакцию фиксировать не нужно. Можно контролировать ход процесса, изменяющего это представление, из другого сеанса с помощью запросов к представлению V$SESSION LONGOPS. Разработчики могут добавлять строки в это представление. Обычно приложение вставляет и изменяет одну строку, но при необходимости можно вставлять и несколько.

Процедура для установки значений в этом представлении имеет следующие парамет-

PROCEDURE SET SESSION LONGOPS Argument Name

Type

In/Out Default?

RINDEX

SLNO

OP NAME TARGET

CONTEXT SOFAR

TOTALWORK

TARGET DESC UNITS

Эти параметры описаны ниже.

BINARY INTEGER BINARY INTEGER

VARCHAR2

BINARY INTEGER BINARY INTEGER

NUMBER NUMBER VARCHAR2 VARCHAR2

IN/OUT IN/OUT IN IN IN IN IN IN IN

DEFAULT DEFAULT DEFAULT DEFAULT DEFAULT

DEFAULT DEFAULT

RINDEX. Указывает серверу, какую строку в представлении V$SESSION LONGOPS

необходимо изменить. Если в качестве значения этого параметра указать

DBMS APPICATION INFO.SET SESSION LONGOPS NOHINT, в это представление будет автоматически вставлена новая строка, индекс которой будет записан в RINDEX. При указании в последующих вызовах процедуры SET SESSION LONGOPS этого индекса в качестве значения параметра RINDEX будет изменяться добавленная строка.

SLNO. Служебное значение. Первоначально надо передать значение NULL, а полученное в результате выполнения значение - игнорировать. При каждом вызове надо передавать одно и то же значение.



Пакет DBMS APPLICATION INFO 1579

OP NAME. Имя продолжительно выполняющегося процесса. Его длина не должна превышать 64 байт, а в качестве значения необходимо задавать строку, по которой легко определить, что именно выполняется.

TARGET. Обычно используется для передачи идентификатора объекта, с которым выполняется продолжительное действие (например, идентификатор таблицы, в которую загружаются данные). Можно передать любое значение, в том числе NULL.

CONTEXT. Число, задаваемое пользователем. Это число должно быть информативным для пользователя. Передать можно любое число.

SOFAR. В качестве значения можно передавать любое число, но если это число будет представлять собой процент или другую количественную характеристику уже выполненной части действия, сервер сможет автоматически оценить, сколько времени осталось до завершения действия. Например, если необходимо обработать 25 объектов и на обработку каждого из них уходит примерно одинаковое время, можно задать в качестве значения параметра SOFAR количество обработанных объектов, а общее их количество передать как следующий параметр, TOTALWORK. Сервер определит, сколько времени потребовалось для выполнения уже сделанной части, и оценит время, необходимое для завершения действия.

TOTALWORK. В качестве значения можно передавать любое число, но имеет смысл сопоставлять его со значением параметра SOFAR. Если SOFAR представляет собой процент от TOTALWORK, отражающий ход выполнения действия, сервер сможет вычислить, сколько времени осталось до завершения действия.

TARGET DESC. Этот параметр описывает значение TARGET, представленное выше. Если в качестве параметра TARGET передан идентификатор объекта, параметр может содержать имя объекта с этим идентификатором.

UNITS. Описательный параметр, задающий единицу измерения для значений параметров SOFAR и TOTALWORK. Это могут быть, например, файлы, итерации или вызовы.

Перечисленные выше значения может устанавливать пользователь. Если обратиться к представлению V$SESSION LONGOPS, то в нем можно обнаружить намного больше столбцов, чем описано выше:

ops$tkyte@ORA8I.WORLD> desc v$session longops

Name

Null? Type

NUMBER

SERIAL#

NUMBER

OPNAME

VARGHAR2(64)

TARGET

VARGHAR2(64)

TARGET DESG

VARGHAR2(32)

SOFAR

NUMBER **

TOTALWORK

NUMBER **

UNITS

VARGHAR2(32)

START TIME

DATE

LAST UPDATE TIME

DATE

TIME REMAINING

NUMBER



1580

Приложение А

ELAPSED SECONDS NUMBER

CONTEXT NUMBER **

MESSAGE VARCHAR2(512)

USERNAME VARCHAR2(3 0)

SQL ADDRESS RAW(4)

SQL HASH VALUE NUMBER

QCSID NUMBER

Значения столбцов, помеченных двумя звездочками (**), может устанавливать пользователь.

Остальные столбцы имеют следующие значения.

Столбцы SID и SERIAL# используются при соединении с представлением V$SESSION для получения информации о сеансе.

Столбец START TIME содержит время создания записи (обычно это время первого вызова процедуры DBMS APPLICATION INFO.SET SESSION LONGOPS,

с помощью которого и была создана строка).

Столбец LAST UPDATE TIME представляет время последнего вызова процедуры SET SESSION LONGOPS.

Столбец TIME REMAINING содержит предполагаемое время, оставшееся до завершения действия. Его значение вычисляется как:

ROUND(ELAPSED SECONDS*((TOTALWORK/SOFAR)-1)).

Столбец ELAPSED SECONDS содержит количество секунд, прошедших с начала выполнения продолжительного действия до последнего изменения строки.

Столбец MESSAGE - производный. Он представляет собой конкатенацию значений столбцов OPNAME, TARGET DESC, TARGET, SOFAR, TOTALWORK и UNITS, описывающую выполняемое действие.

Значение в столбце USERNAME - имя пользователя, выполняющего действие.

Значения столбцов SQL ADDRESS и SQL HASH VALUE можно использовать для поиска в представлении V$SQLAREA последнего SQL-оператора, выполненного процессом.

Значение столбца QCSID используется при распараллеливании запроса. Это идентификатор сеанса-координатора параллельного запроса.

Итак, что же можно получить с помощью данного представления? Небольшой пример поможет прояснить это. Выполним в одном сеансе следующий блок кода:

tkyte@TKYTE816> declare

2 l nohint number default

dbms application info.set session longops nohint;

3 l rindex number default l nohint;

4 l slno number;

5 begin

6 for i in 1 .. 25

7 loop

8 dbms lock.sleep(2);

9 dbms application info.set session longops



1 ... 382 383 384 [ 385 ] 386 387 388 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика