Дать элемент очереди таблиц

Назначение
 

Команда DIRR предназначена для получения информации об указанном элементе очереди таблиц.

Параметры вызова

inter(CBL, NULL, [OpBuf], [CondBuf], RowBuf);

Входные данные

Входными данными являются:

  • контрольный блок CBL;

  • буфер SQL-запросов OpBuf.

В контрольном блоке должны быть заполнены поля:

Имя поля Значение
Command "DIRR"
RowId Порядковый номер элемента очереди таблиц (отсчет начинается с 1)
LnBufRow Длина буфера выборки данных
Node Имя ЛИНТЕР-сервера

Буфер SQL-запросов OpBuf может содержать имя устанавливаемой для данного канала кодовой страницы, которая должна быть известна БД, то есть:

  • находиться в системной таблице LINTER_SYSTEM_USER.$$$CHARSET;

  • или быть описана как синоним в таблице LINTER_SYSTEM_USER.$$$CSALIAS;

  • или быть предопределённым значением UTF-8 или UCS2.

Выходные данные

Выходными данными являются:

  • контрольный блок CBL;

  • буфер выборки данных RowBuf.

В контрольном блоке будут возвращены:

Имя поля Значение
CodErr Код завершения запроса к СУБД ЛИНТЕР
LnBufRow Фактическая длина буфера выборки данных (sizeof(DIRR_OUT))
SysErr Код состояния ОС

В буфере выборки данных RowBuf информация будет представлена в следующем виде:

struct DIRR_OUT
   {
   L_LONG Owner;               /* Идентификатор владельца таблицы */
   L_CHAR TblName[MAX_ID_LEN]; /* Имя таблицы */
   L_WORD UpdFlag;             /* Признак корректировки таблицы */
   };

В поле UpdFlag возвращается значение 1, если в момент выдачи команды DIRR измененные данные соответствующей таблицы еще не были перенесены из системного пула в БД. После того как данные будут изменены в БД, этот признак сбрасывается. Поэтому для получения достоверной информации о частоте изменения данных периодичность опроса очереди таблиц должна быть не больше периодичности обновления информации в БД.

С помощью команды DIRR может быть получена следующая информация:

  • о частоте обращения к таблицам БД (по частоте присутствия данного элемента в очереди таблиц);

  • об интенсивности обращения к таблицам (чем меньше порядковый номер элемента очереди таблиц, тем чаще происходит обращение к данной таблице);

  • о частоте корректировки данных в таблицах (путем суммирования значений поля UpdFlag);

  • о влиянии установленного размера очереди таблиц на производительность СУБД (по частоте вытеснения и повторного включения элементов в очередь).

Описание

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

Новый элемент записывается на первое свободное место в очереди, а в случае отсутствия такового на место самого «старого» элемента очереди. Если при этом замещаемый элемент предназначен к записи, то он записывается, и только после этого его место занимает новый элемент. После этого очередь перестраивается таким образом, что новый элемент становится первым.

СУБД ЛИНТЕР ведет очереди, не меняя положения элемента очереди в оперативной памяти. Поэтому, если при двух обращениях к элементу с тем же самым порядковым номером были возвращены разные данные, то между двумя этими обращениями СУБД осуществила запись этого элемента очереди на диск, а на освободившееся место была записана новая информация.

Коды завершения
Код Описание
NORMAL Нормальное завершение
SMALLBUFKOR Недостаточный размер буфера выборки данных
EORR Элемент очереди с заданным порядковым номером не найден
Пример формирования команды
#include < string.h >
#include < stdlib.h >
#include "inter.h"

L_LONG LinterDIRR(TCBL *pCBL, L_LONG N, DIRR_OUT *Out)
   {
   memcpy(pCBL- >Command, "DIRR", 4);
   pCBL- >LnBufRow=sizeof(DIRR_OUT);
   pCBL- >RowId=N;
   pCBL- >PrzExe &= ~Q_ASYNC;
   inter(pCBL, NULL, NULL, NULL, Out);
   return pCBL- >CodErr;
   }
Пример использования команды