Дать элемент очереди таблиц
Назначение
Команда
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; }