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