tid = <N, i> --T------------------¬ i ¦ ¦Область описателей¦ ¦ ¦ ¦ L-+------------------+ ¦ i-тый описатель +-¬ +------------------+ ¦ +------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------------------+ ¦ ¦ i-тый кортеж +-- +------------------+ L------------------- Cтраница номер N
Рис.1 Переход от tid'а кортежа к кортежу без косвенности.
tid = <N, i> --T------------------¬ --T------------------¬ i¦ ¦Область описателей¦ j ¦ ¦Область описателей¦ ¦ ¦ ¦ ¦ ¦ ¦ L-+------------------+ ¦ ¦ ¦ ¦ i-тый описатель +- - - ¬ ¦ +------------------+ ¦ (tid = <M, j>) ¦ L-+ j-тый описатель +-¬ +------------------+ ¦ +------------------+ ¦ +------------------+ +------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L - - - ¦ ¦ ¦ ¦ ¦ +------------------+ ¦ ¦ ¦ ¦ j-тый кортеж +-- ¦ ¦ +------------------+ L------------------- L------------------- Cтраница номер N Cтраница номер M
Рис.2 Переход от tid'а кортежа к кортежу с косвенностью.
------T-----T-----T-----T-----¬ ¦ X ¦ S ¦ IX ¦ IS ¦ SIX ¦ ------+-----+-----+-----+-----+-----+ ¦ X ¦ нет ¦ нет ¦ нет ¦ нет ¦ нет ¦ +-----+-----+-----+-----+-----+-----+ ¦ S ¦ нет ¦ да ¦ нет ¦ да ¦ нет ¦ +-----+-----+-----+-----+-----+-----+ ¦ IX ¦ нет ¦ нет ¦ да ¦ да ¦ нет ¦ +-----+-----+-----+-----+-----+-----+ ¦ IS ¦ нет ¦ да ¦ да ¦ да ¦ да ¦ +-----+-----+-----+-----+-----+-----+ ¦ SIX ¦ нет ¦ нет ¦ нет ¦ да ¦ нет ¦ L-----+-----+-----+-----+-----+------
Рис. 3. Таблица совместимости захватов.
Время ----------------------------------------------- Т р Т1 +-------+ ¦ ¦ а ¦ ¦ н Т2 +-------+---------+ ¦ з ¦ ¦ а Т3 +----+-----------------------+ к ¦ ¦ ц Т4 ¦ +-------------+ ¦ и ¦ ¦ и Т5 ¦ +-------------+ Контрольная точка Мягкий сбой (момент tc) (момент tf)
Рис.4 Категории транзакций при мягком сбое.
Тип Тип ¦ Грам. ¦ Оптим. ¦ Ген. ¦ Выполнение предложения секции разбор кода ¦ -------+--------+-----¬¦ ---------¬ Запрос на COMPILESECT ¦ В р е м я ¦ ¦ Время ¦ выборку, ¦ ¦ ¦¦ ¦ ¦ вставка, ¦ прекомпиляции ¦ ¦выполне-¦ удаление, ¦ ¦ ¦¦ ¦ния ¦ модификация L---------------------- L--------- ¦ ------¬¦ ¦ ¦ ---------¬ Создание INTERSECT ¦Время¦ ¦ Время ¦ отношения, ¦ ¦пре- ¦¦ ¦ ¦ ¦ ¦ начало ¦компи¦ ¦выполне-¦ транзакции ¦ ¦ляци覦 ¦ ¦ ¦ния ¦ и т.д. L------ L--------- ¦ ------¬¦ -------+------+----------¬ Операции PARSEDSECT ¦Время¦ ¦ В р е м я ¦ над времен- ¦ ¦пре- ¦¦ ¦ ¦ ными (не ¦компи¦ ¦ ¦ существую- ¦ ¦ляци覦 ¦ в ы п о л н е н и я ¦ щими во ¦ ¦ ¦ ¦ время пре- ¦ ¦ ¦¦ ¦ ¦ компиляции) ¦ ¦ ¦ ¦ отношениями ¦ L------¦ L------T------T----------- Предложение INDEFSECT ¦ -------+--------+------+----------¬ динамичес- ¦ В р е м я ¦ кой компи- ¦ ¦ ¦ ляции ¦ в ы п о л н е н и я ¦ (PREPARE и ¦ ¦ ¦ EXECUTE) L---------------------------------- ¦ ¦ ¦ ¦
Рис.5 Выполнения фаз обработки для разных типов запросов.
Compilesect Intersect Parsesect Indefsect ------------T------------T-----------T-----------T-----------¬ Auxcall ¦Выполняется ¦Выполняется¦Динамически¦ Не исполь-¦ ¦программа в ¦стандартная¦вызываются ¦ зуется ¦ ¦машинных ко-¦программа ¦оптимизатор¦ ¦ ¦дах, содер- ¦под управ- ¦и генератор¦ ¦ ¦жащаяся в ¦лением со- ¦кодов для ¦ ¦ ¦секции ¦держимого ¦преобразо- ¦ ¦ ¦ ¦секции ¦вания сек- ¦ ¦ ¦ ¦ ¦ции в Com- ¦ ¦ ¦ ¦ ¦pilesect ¦ ¦ ¦ ¦ ¦или Inter- ¦ ¦ ¦ ¦ ¦sect, затем¦ ¦ ¦ ¦ ¦выполняется¦ ¦ ¦ ¦ ¦(преобразо-¦ ¦ ¦ ¦ ¦вания про- ¦ ¦ ¦ ¦ ¦изводятся ¦ ¦ ¦ ¦ ¦только в ¦ ¦ ¦ ¦ ¦виртуальной¦ ¦ ¦ ¦ ¦памяти) ¦ ¦ ------------+------------+-----------+-----------+-----------+ Opencall ¦Программа в ¦Не исполь- ¦Не исполь- ¦Не исполь- ¦ ¦машинных ко-¦зуется ¦зуется ¦зуется ¦ ¦дах, содер- ¦ ¦ ¦ ¦ ¦жащаяся в ¦ ¦ ¦ ¦ ¦секции, вы- ¦ ¦ ¦ ¦ ¦полняется с ¦ ¦ ¦ ¦ ¦кодом опера-¦ ¦ ¦ ¦ ¦ции OPEN ¦ ¦ ¦ ¦ ------------+------------+-----------+-----------+-----------+ Fetchcall ¦Программа в ¦Не исполь- ¦Не исполь- ¦Не исполь- ¦ ¦машинных ко-¦зуется ¦зуется ¦зуется ¦ ¦дах, содер- ¦ ¦ ¦ ¦ ¦жащаяся в ¦ ¦ ¦ ¦ ¦секции, вы- ¦ ¦ ¦ ¦ ¦полняется с ¦ ¦ ¦ ¦ ¦кодом опера-¦ ¦ ¦ ¦ ¦ции FETCH ¦ ¦ ¦ ¦ ------------+------------+-----------+-----------+-----------+ Closecall ¦Программа в ¦Не исполь- ¦Не исполь- ¦Не исполь- ¦ ¦машинных ко-¦зуется ¦зуется ¦зуется ¦ ¦дах, содер- ¦ ¦ ¦ ¦ ¦жащаяся в ¦ ¦ ¦ ¦ ¦секции, вы- ¦ ¦ ¦ ¦ ¦полняется с ¦ ¦ ¦ ¦ ¦кодом опера-¦ ¦ ¦ ¦ ¦ции CLOSE ¦ ¦ ¦ ¦ ------------+------------+-----------+-----------+------------ ------------T------------------------T-----------T-----------¬ Setupcall ¦Текущее состояние секции¦Не исполь- ¦Вызываются ¦ ¦уничтожается, вызываются¦зуется ¦граммати- ¦ ¦грамматический анализа- ¦ ¦ческий ана-¦ ¦тор, оптимизатор и гене-¦ ¦лизатор, ¦ ¦ратор кодов для построе-¦ ¦оптимизатор¦ ¦ния новой секции (Com- ¦ ¦и генератор¦ ¦pilesect или Intersect) ¦ ¦кодов для ¦ ¦по новому предложению ¦ ¦построения ¦ ¦SQL ¦ ¦секции ¦ ¦ ¦ ¦(Compile- ¦ ¦ ¦ ¦sect или ¦ ¦ ¦ ¦Intersect) ¦ ¦ ¦ ¦для указан-¦ ¦ ¦ ¦ного пред- ¦ ¦ ¦ ¦ложения SQL¦ ------------+------------T-----------+-----------+-----------+ Describecall¦Вырабатыва- ¦Не исполь- ¦Не исполь- ¦Не исполь- ¦ ¦ется описа- ¦зуется ¦зуется ¦зуется ¦ ¦тель резуль-¦ ¦ ¦ ¦ ¦тирующего ¦ ¦ ¦ ¦ ¦отношения ¦ ¦ ¦ ¦ ------------+------------+-----------+-----------+------------
Рис. 6 Типы секций и вызовов.