Добавления AI-экстентов и реогранизация AI
Для демонстрации работы утилиты PROSTRCT REORDER AI необходимо заполнить все AI-экстенты (статус FULL). Для того чтобы иметь возможность заполнить все AI-экстенты без автоматического переключения, деактивируйте AI File Management.
rfutil sports -C aiarchiver disable
Здесь мы не будем использовать параметр <-aistall>, т.к. в демонстрационных целях он не нужен.
Структура AI-экстентов должна выглядеть так, т.е. используются AI-экстенты фиксированного размера:
a ./sports.a1 f 2048 # a ./sports.a2 f 2048 # a ./sports.a3 f 2048 # a ./sports.a4 f 2048
Теперь запустите программу gen_ai.p в Procedure Editor, запуск необходимо осуществлять в цикле. Программа gen_ai.p описана в Листинге 3 (gen_ai.p), см. по ссылке “Мониторинг AI-экстентов”. Для этого:
- Зайдите в редактор:
mpro ./sports
- Выполните следующий ABL-код:
DEFINE VARIABLE I AS INTEGER NO-UNDO. REPEAT I = 1 TO 1000: RUN ./src/gen_ai.p. END.
Из параллельной Unix-сессии с помощью команды RFUTIL AIMAGE EXTENT LIST понаблюдайте за заполнением экстентов.
rfutil sports -C aimage list
Когда база данных из-за невозможности переключения экстентов будет остановлена (напомню, мы не использовали <-aistall>), на экран и в лог базы данных будут выведены следующие сообщения:
(3773) Cannot switch to after-image extent /openedge/117/wrk/testdb/sports.a1 it is full. (5350) Database Server shutting down as a result of after-image extent switch failure. (3774) Backup after-image extent and mark it as empty.
Дважды выполните скрипт switch_ai.sh :
Листинг 4. switch_ai.sh
#!/bin/bash AIFILE=`$DLC/bin/rfutil ./sports -C aimage extent full | grep sports` AIBKP=$AIFILE TS=`date "+%y%m%d%H%M%S"` AIBKPNAME=ai`echo ${AIBKP}|tr '/' '~'`"-"$TS".bak" $DLC/bin/rfutil ./sports -C aimage extract -a $AIFILE -o ./aiarch1/$AIBKPNAME $DLC/bin/rfutil ./sports -C aimage empty
Этот скрипт заархивирует первый и второй экстенты и пометит их как EMPTY. Третий экстент так и должен остаться со статусом FULL.
Extent: 1 Status: Empty Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a1 Size: 2040 Used: 0 Start: N/A LastOp: N/A Seqno: 0 Extent: 2 Status: Empty Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a2 Size: 2040 Used: 0 Start: N/A LastOp: N/A Seqno: 0 Extent: 3 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a3 Size: 2040 Used: 2040 Start: Thu May 29 13:06:36 2025 LastOp: N/A Seqno: 3 Extent: 4 Status: Busy Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a4 Size: 2040 Used: Unknown (4778) Start: Thu May 29 13:06:38 2025 LastOp: N/A Seqno: 4
Запустите базу заново.
proserve sports
Во время запуска произойдёт переключение четвертого экстента в статус FULL, а первый экстент получит статус BUSY.
Extent: 1 Status: Busy Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a1 Size: 2040 Used: 13 Start: Thu May 29 13:12:42 2025 LastOp: Thu May 29 13:12:42 2025 Seqno: 5 Extent: 2 Status: Empty Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a2 Size: 2040 Used: 0 Start: N/A LastOp: N/A Seqno: 0 Extent: 3 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a3 Size: 2040 Used: 2040 Start: Thu May 29 13:06:36 2025 LastOp: N/A Seqno: 3 Extent: 4 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a4 Size: 2040 Used: 2040 Start: Thu May 29 13:06:38 2025 LastOp: Thu May 29 13:12:42 2025 Seqno: 4
Теперь опять запустите указанный выше ABL-код программы gen_ai.p. Дождитесь, когда база данных опять остановится. Теперь состояние AI-экстентов будет следующим:
Extent: 1 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a1 Size: 2040 Used: 2040 Start: Thu May 29 13:12:42 2025 LastOp: N/A Seqno: 5 Extent: 2 Status: Busy Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a2 Size: 2040 Used: Unknown (4778) Start: Thu May 29 13:15:13 2025 LastOp: N/A Seqno: 6 Extent: 3 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a3 Size: 2040 Used: 2040 Start: Thu May 29 13:06:36 2025 LastOp: N/A Seqno: 3 Extent: 4 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a4 Size: 2040 Used: 2040 Start: Thu May 29 13:06:38 2025 LastOp: N/A Seqno: 4
Видно, что второй экстент не может переключиться, поскольку третий имеет статус FULL. В данной ситуации мы эмитируем проблему, при которой по некоторым причинам не происходит переключения AI-экстентов и их архивации. Например, вместо FULL экстенты имеют статус LOCKED, т.е. они не скопированы в репликационную базу данных. Теперь задача заключается в устранении проблемы путем добавления нескольких дополнительных AI-экстентов и их реорганизации.
Для этого создайте структурный файл с описанием добавляемых AI-экстентов. Для демонстрации будет достаточно двух экстентов фиксированного размера по 10Мб.
a . f 10240 a . f 10240
Добавьте экстенты:
prostrct add sports add.st
Не забудьте обновить структурный файл:
prostrct list sports
Посмотрите теперь состояние AI-экстентов:
Extent: 1 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a1 Size: 2040 Used: 2040 Start: Thu May 29 13:12:42 2025 LastOp: N/A Seqno: 5 Extent: 2 Status: Busy Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a2 Size: 2040 Used: Unknown (4778) Start: Thu May 29 13:15:13 2025 LastOp: N/A Seqno: 6 Extent: 3 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a3 Size: 2040 Used: 2040 Start: Thu May 29 13:06:36 2025 LastOp: N/A Seqno: 3 Extent: 4 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a4 Size: 2040 Used: 2040 Start: Thu May 29 13:06:38 2025 LastOp: N/A Seqno: 4 Extent: 5 Status: Empty Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a5 Size: 10232 Used: 0 Start: N/A LastOp: N/A Seqno: 0 Extent: 6 Status: Empty Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a6 Size: 10232 Used: 0 Start: N/A LastOp: N/A Seqno: 0
Видно, что новые экстенты были добавлены последними, поэтому для продолжения работы необходимо, чтобы они расположились сразу после BUSY-экстента.
Выполните реорганизацию:
$ prostrct reorder ai sports
Prostrct reorder ai may affect roll forward operations based on extent name. Do you want to continue? (y/n) (12235) y Prostrct organize ai finished successfully. (12184) Please update your .st file with prostrct list and get the latest AI extents states with rfutil utilities. (12186)
С помощью RFUTIL AIMAGE EXTENT LIST посмотрите, как теперь стали располагаться AI-экстенты:
Extent: 1 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a1 Size: 2040 Used: 2040 Start: Thu May 29 13:12:42 2025 LastOp: N/A Seqno: 5 Extent: 2 Status: Busy Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a2 Size: 2040 Used: Unknown (4778) Start: Thu May 29 13:15:13 2025 LastOp: N/A Seqno: 6 Extent: 3 Status: Empty Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a3 Size: 10232 Used: 0 Start: N/A LastOp: N/A Seqno: 0 Extent: 4 Status: Empty Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a4 Size: 10232 Used: 0 Start: N/A LastOp: N/A Seqno: 0 Extent: 5 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a5 Size: 2040 Used: 2040 Start: Thu May 29 13:06:36 2025 LastOp: N/A Seqno: 3 Extent: 6 Status: Full Type: Fixed Length Path: /openedge/117/wrk/testdb/sports.a6 Size: 2040 Used: 2040 Start: Thu May 29 13:06:38 2025 LastOp: N/A Seqno: 4
Новые экстенты были перемещены сразу за BUSY-экстентом, поэтому теперь переключение станет возможно. Запустите базу данных.
Собственно говоря, утилита PROSTRCT REORDER AI не имеет никакого смысла в offline без включенного механизма OpenEdge Replication, поскольку FULL-экстенты можно легко заархивировать и пометить как EMPTY с помощью RFUTIL AIMAGE EXTRACT и RFUTIL AIMAGE EMPTY. Смысл в PROSTRCT REORDER AI был бы при включенной репликации, когда база находится в online и экстенты имеют статус LOCKED вместо FULL, т.к. статус LOCKED не позволит отработать командам RFUTIL AIMAGE EXTRACT и RFUTIL AIMAGE EMPTY. К сожалению, работа PROSTRCT REORDER AI в online пока не предусмотрена.
В этом плане экстенты переменного размера предпочтительнее использования экстентов фиксированного размера, так как в случае не возможности переключения, экстент переменного размера будет продолжать заполняться пока есть доступное дисковое пространство и при этом пользователи продолжат работать.
Так же важно выполнять мониторинг заполнения и переключения AI-экстентов, особенно если вы используете AI-экстенты фиксированного размера.