Группы владельцев
Группы владельцев, изображенные на рис. 40.3, описывают транзакцию или другого пользователя в Менеджере блокировок. Владельцы делятся на несколько типов, идентифицируемых пятью числами:
* 1 - процесс;
* 2 - база данных;
* 3 - клиентское соединение (в Классическом сервере клиентские соединения всегда являются процессами);
* 4 - транзакция;
* 5 - фиктивный процесс.
! ! !
ПРИМЕЧАНИЕ. В некоторых причудливых соглашениях по кодированию на транзакции никогда не ссылаются по их идентификационному номеру (4), а используют номер 255.
. ! .
Рис. 40.3. Группа владельца
Смещение конкретной группы владельца в таблице блокировок (здесь это 11 872) также является идентификатором, используемым в заголовке блокировок для "активного владельца", если этот пользователь активно изменяет таблицу блокировки. Первая выводимая группа обычно является номером, выводимым в группу заголовка блокировок в начале списка владельцев. Значение в списке указателей является полем в группе, которое содержит прямые и обратные указатели на группы владельцев. В табл. 40.3 описаны записи в группе владельца.
! ! !
СОВЕТ. Если вы просматриваете ваш результат работы утилиты в текстовом редакторе, вы можете отыскивать запросы, принадлежащие идентификатору этого владельца.
. ! .
Таблица 40.3. Записи групп владельцев
№
|
Элемент
|
Объяснение
|
1
|
OWNER BLOCK
|
Идентифицирует конкретного владельца. Число, следующее за заголовком (11 872), является смещением группы владельца в таблице блокировок и используется в качестве идентификатора владельца в этой таблице
|
2
|
Owner ID (Идентификатор владельца)
|
В Классическом сервере владельцем всегда является процесс, а идентификатором владельца всегда является идентификатор процесса. В Суперсервере владельцем является либо база данных и идентификатором будет группа базы данных, либо соединение и идентификатором будет эта группа соединения
|
3
|
Owner type (Тип владельца)
|
Типом владельца является число между 1 и 4 или 255 (фиктивный процесс)
|
4
|
Flags (Флаги)
|
Биты, которые определяют состояние. Процесс в одно и то же время может находиться более чем в одном состоянии (см. табл. 40.4)
|
5
|
Pending (Ожидание завершения)
|
Смещение группы запроса блокировки, описывающей запрошенную владельцем блокировку, но еще им не полученную. Владелец может иметь не более одного ожидающего запроса в один момент времени
|
6
|
Semid (Идентификатор семафора)
|
Идентификатор семафора, назначенного этому пользователю. Если он может быть использован, то слово "Available" (Доступен) должно следовать после идентификатора
|
7
|
Process_id (Идентификатор процесса)
|
В Классическом сервере это идентификатор процесса владельца. В Суперсервере, если владельцем является соединение, база данных или транзакция, то этот владелец станет идентификатором процесса
|
8
|
UID (Идентификатор пользователя)
|
В POSIX это идентификатор пользователя, являющегося владельцем процесса. В Windows это всегда ноль
|
9
|
Alive | Dead (Живой | Мертвый)
|
Lock Printer вызывает подпрограмму ISC_check_process_ existence и сообщает результат
|
10
|
Flags (Флаги)
|
Мнемоника флагов - корректно выводится 2 в виде 0x02 (а не 0x202, как в пункте (4))
|
11
|
Requests (Запросы)
|
Запросы на блокировку, обработанные или ожидающие завершения, которые связаны с этим процессом. Числа последующее и предыдущее ссылаются на последующий и предыдущий элемент в очереди запросов, принадлежащих этому процессу. Числа задают смещения
|
12
|
Blocks (Группы)
|
Временный список блокировок (групп запросов), блокирующих другие запросы на блокировку, которыми владеет этот процесс. Этот список очищается, когда процесс сообщает, что он должен освободить или понизить уровень его блокировки в предположении, что он в состоянии это сделать
|
В табл. 40.4 описаны состояния, представленные разнообразными флагами владельца.
Таблица 40.4. Состояния флагов владельца
Символ
|
Значение
|
Состояние
|
Читать дальше