Дать элемент очереди файлов
Назначение
Команда
DIRF
предназначена для получения информации об указанном элементе
очереди дескрипторов файлов.
Параметры вызова
inter(CBL, NULL, [Opbuf], [CondBuf], RowBuf);
Входные данные
Входными данными являются:
-
контрольный блок
CBL
; -
буфер SQL-запросов
OpBuf
.
В контрольном блоке должны быть заполнены поля:
Имя поля | Значение | |
---|---|---|
Command
|
"DIRF"
| |
RowId
| Порядковый номер элемента очереди файлов (отсчет начинается с 1) | |
LnBufRow
| Длина буфера выборки данных (sizeof(DIRF_OUT)) | |
Node
| Имя ЛИНТЕР-сервера |
Буфер SQL-запросов OpBuf может содержать имя устанавливаемой для данного канала кодовой страницы, которая должна быть известна БД, то есть:
-
находиться в системной таблице LINTER_SYSTEM_USER.$$$CHARSET;
-
или быть описана как синоним в таблице LINTER_SYSTEM_USER.$$$CSALIAS;
-
или быть предопределённым значением UTF-8 или UCS2.
Выходные данные
Выходными данными являются:
-
контрольный блок
CBL
; -
буфер выборки данных
RowBuf
.
В контрольном блоке будут возвращены:
Имя поля | Значение | |
---|---|---|
CodErr
| Код завершения запроса к СУБД ЛИНТЕР | |
LnBufRow
| Фактическая длина буфера выборки данных | |
SysErr
| Код состояния ОС |
В буфере выборки данных
RowBuf
информация будет представлена в следующем виде:
struct DIRF_OUT { L_LONG Owner; /* Идентификатор владельца таблицы */ L_CHAR TblName[MAX_ID_LEN]; /* Имя таблицы */ L_BYTE Type; /* Тип файла */ L_BYTE Extent; /* Номер файла */ L_LONG State; /* Признак состояния */ };
В полях буфера выборки данных будет содержаться:
Имя поля | Значение | |
---|---|---|
| Идентификатор владельца таблицы, дескриптор файла которой находится в указанном элементе очереди дескрипторов файлов | |
| Имя таблицы, дескриптор файла которой находится в указанном элементе очереди дескрипторов файлов | |
|
Тип файла (таблица 15) | |
|
Логический номер файла данной таблицы. Это поле может принимать значение от 1 до 63, в зависимости от количества файлов, объявленных при создании таблицы | |
|
Текущее состояние элемента очереди: 1 – элемент занят дескриптором файла; 0 – элемент свободен. |
Команда
DIRF
может быть использована для определения оптимального размера
очереди дескрипторов файлов. Дескриптор файла, включенный в
очередь,
вытесняется из нее только в одном случае – отсутствие свободных элементов при
включении в очередь нового элемента. Поэтому в процессе мониторинга
БД можно выявить
следующие ситуации:
-
часть элементов очереди файлов никогда не используется. Это говорит о том, что размер очереди слишком велик и его без ущерба для производительности БД можно уменьшить (примерно на количество неиспользуемых элементов);
-
в очереди файлов происходит интенсивное вытеснение и добавление элементов. Это говорит о недостаточном размере очереди файлов.
Изменяя размер очереди файлов (насколько позволят системные ресурсы) и выполняя мониторинг БД, можно добиться оптимального размера – когда элементы из очереди не вытесняются, и в то же время количество неиспользуемых элементов очереди минимально.
Обозначение | Значение | Файл |
---|---|---|
FT_INDEX | 0 | Файл индексов |
FT_DATA | 1 | Файл данных |
FT_SYSWBV | 2 | Рабочий файл бит-векторов |
FT_SYSWRK | 3 | Рабочий файл |
FT_SYSSRT | 4 | Рабочий файл сортировки |
FT_SYSLOG | 5 | Системный журнал |
FT_BLOB | 7 | BLOB-файл |
Первые 10 элементов очереди файлов заняты дескрипторами системных файлов в порядке, приведенном в таблице 16.
№ элемента | Имя файла | Комментарий |
---|---|---|
1 | 1.01 |
Файл индексов таблицы
$$$SYSRL
|
2 | 1.11 |
Файл данных таблицы
$$$SYSRL
|
3 | 2.01 |
Файл индексов таблицы
$$$ATTRI
|
4 | 2.11 |
Файл данных таблицы
$$$ATTRI
|
5 | 3.01 |
Файл индексов таблицы
$$$USR
|
6 | 3.11 |
Файл данных таблицы
$$$USR
|
7 | 1.41 | Рабочий файл |
8 | 1.31 | Рабочий файл бит-векторов |
9 | 1.51 | Рабочий файл сортировки |
10 | Резерв | Файлы системного журнала |
Описание
СУБД ЛИНТЕР ведет очереди, не меняя положения элемента очереди в оперативной памяти. Поэтому, если при двух обращениях к элементу с тем же самым порядковым номером были возвращены разные данные, то между двумя этими обращениями СУБД осуществила запись элемента очереди на диск, а на освободившееся место была записана новая информация.
Для файлов с кодами типа 2,3,4 (см. таблицу
15) поля
Owner
и
TblName
будут заполнены нулем и пробелами соответственно.
Информация о файлах с кодом типа 5 (см. таблицу
15) по команде
DIRF
не выдается.
Коды завершения
Код | Описание | |
---|---|---|
NORMAL | Нормальное завершение | |
SMALLBUFKOR | Недостаточный размер буфера выборки данных | |
EORR | Элемент очереди с заданным порядковым номером не найден |
Пример формирования команды
#include < string.h > #include < stdlib.h > #include "inter.h" L_LONG LinterDIRF(TCBL *pCBL, L_LONG N, DIRF_OUT *Out) { memcpy(pCBL- >Command, "DIRF", 4); pCBL- >LnBufRow=sizeof(DIRF_OUT); pCBL- >RowId=N; pCBL- >PrzExe &= ~Q_ASYNC; inter(pCBL, NULL, NULL, NULL, Out); return pCBL- >CodErr; }