После запуска АСР «Гидра» в промышленную эксплуатацию необходимо в обязательном порядке настроить мониторинг экземпляра БД АСР «Гидра».
Контроль должен отслеживать следующие группы параметров:
- Базовые параметры сервера АСР (load avg, использование CPU и RAM, I/O массива, количество процессов).
- Показатели экземпляра БД (количество сессий, текущая нагрузка, состояние SGA и т.д.).
- Состояние заданий АСР «Гидра».
- Контроль количества нетарифицированных CDR и дату последней загрузки.
- Количество строк в жизненноважных таблицах EX_CALL_DATA_REC, EX_DATA_COLLECT, EX_TRAFFIC_COLLECT_C, SD_GOOD_MOVES.
Для мониторинга АСР «Гидра» можно использовать любую распространенную систему, которая позволяет получать данные с помощью скриптов, запускаемых из командной строки. Наиболее популярными системами мониторинга среди российских операторов связи являются бесплатные Zabbix и Nagios.
Для мониторинга показателей экземпляра БД можно использовать скрипты (раздел Oracle), разработанные для Zabbix.
Контроль заданий
Чтобы настроить контроль выполнения заданий АСР «Гидра», можно воспользоваться одним из специально разработанных скриптов (1, 2).
Различаются 7 состояний:
Код | Состояние | Норма |
---|---|---|
1034 | В ожидании | Д |
2034 | Выполняется | Д |
3034 | К запуску | Д |
4034 | Блокировано | Н |
5034 | Удалено | Н |
6034 | Ошибка запуска | Н |
7034 | Не запущено | Д |
Не нормальными являются состояния, помеченные буквой Н. Исключение: задание, заблокированное принудительно.
Контроль табличных пространств
Необходимо мониторить состояние табличных пространств (tablespaces) БД. Нужную информацию даёт следующий SQL-запрос:
WITH TBLSP_TOTALSPACE AS ( SELECT TABLESPACE_NAME, ROUND(SUM(BYTES/(1024*1024))) TOTALSPACE, ROUND(SUM(DECODE(MAXBYTES, 0, BYTES, MAXBYTES))/(1024*1024)) TOTALMAXSPACE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME ), TBLSP_USEDSPACE AS ( SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*1024)) TOTALUSEDSPACE FROM DBA_SEGMENTS GROUP BY TABLESPACE_NAME ) SELECT TS.TABLESPACE_NAME "TABLESPACE", US.TOTALUSEDSPACE "Used MB", (TS.TOTALSPACE - US.TOTALUSEDSPACE) "Free MB", TS.TOTALSPACE "Total MB", TS.TOTALMAXSPACE "Total Max MB", ROUND(100*((TS.TOTALMAXSPACE - US.TOTALUSEDSPACE)/ TS.TOTALMAXSPACE)) "Pct. Free" FROM TBLSP_TOTALSPACE TS, TBLSP_USEDSPACE US WHERE US.TABLESPACE_NAME = TS.TABLESPACE_NAME;
В результате запроса получится таблица приблизительно следующего вида:
# | TABLESPACE | Used MB | Free MB | Total MB | Total Max MB | Pct. Free |
---|---|---|---|---|---|---|
1 | SYSAUX | 713 | 32055 | 750 | 32768 | 98 |
2 | HYDRA | 5182 | 15010 | 8222 | 20192 | 74 |
3 | HYDRA_INDEX | 12418 | 11870 | 13150 | 24288 | 49 |
4 | UNDOTBS1 | 294 | 32474 | 11450 | 32768 | 99 |
5 | SYSTEM | 768 | 31982 | 790 | 32768 | 98 |
Здесь особое внимание нужно уделить показателям Free MB и Pct. Free для пространств HYDRA
и HYDRA_INDEX
. При слишком маленьких значениях (менее 20%) необходимо автоматически информировать администратора о проблеме со свободным местом. В противном случае в БД могут остановиться важные системные задания, например, с такой ошибкой:
Ошибка при запуске JB_DATA_COLLECT_PKG.EX_DATA_COLLECT_ACCOUNTING [ORA-01654: unable to extend index AIS_NET.EX_TRAFFIC_COL_C_FIRM_IDX by 8192 in tablespace HYDRA_INDEX]
Значение Total MB показывает фактически выделенное место под табличное пространство, а Total Max MB показывает максимально возможное место, которое СУБД разрешено захватить под данное пространство при увеличении его размера. Следует учитывать, что значение Total Max MB может быть больше объема доступного дискового пространства.
Контроль нетарифицированных телефонных звонков
Приведенный ниже запрос возвращает количество нетарифицированных телефонных звонков за текущий час:
SELECT COUNT(*) FROM EX_V_CDR WHERE N_CDR_TYPE_ID = SYS_CONTEXT('CONST', 'CDR_TYPE_PhoneCall') AND N_CDR_STATE_ID = SYS_CONTEXT('CONST', 'CDR_Status_Finished') AND D_BEGIN_ACC >= TRUNC(SYSDATE, 'HH') AND (N_SUM_A IS NULL AND N_SUM_B IS NULL);
Нормой считается 0, т.е. полное отсутствие нетарифицированных звонков.
Мониторинг даты последней загрузки CDR
Запрос показывает в какое время была произведена последняя загрузка CDR в АСР:
SELECT MAX(D_BEGIN) FROM EX_V_CDR WHERE N_CDR_TYPE_ID = SYS_CONTEXT('CONST', 'CDR_TYPE_PhoneCall') AND N_CDR_STATE_ID = SYS_CONTEXT('CONST', 'CDR_Status_Finished');
Триггер настраивается в зависимости от настроек периодичности загрузки.
Контроль количества строк в таблицах
Данный контроль необходимо осуществлять, т.к. превышение пороговых значение влияет на производительность БД.
Пример запроса:
SQL> SELECT COUNT(*) FROM SD_GOOD_MOVES;
Таблица пороговых значений
Таблица | Порог |
---|---|
EX_CALL_DATA_REC | 15 миллионов |
EX_DATA_COLLECT | 5 миллионов |
EX_TRAFFIC_COLLECT_C | 2 миллиона |
SD_GOOD_MOVES | 15 миллионов |
Приложение: скрипт для создания пользователя БД для мониторинга и выдачи ему необходимых прав
CREATE USER &&username PROFILE DEFAULT IDENTIFIED BY &&password DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK; / GRANT SELECT ON V_$LOG_HISTORY TO &&username; GRANT CONNECT TO &&username; GRANT RESOURCE TO &&username; GRANT SELECT ON SS_V_JOBS TO &&username; GRANT SELECT ON SI_V_USERS TO &&username; GRANT EXECUTE ON SI_SUBJECTS_PKG_S TO &&username; GRANT EXECUTE ON SI_OBJECTS_PKG_S TO &&username; GRANT EXECUTE ON SI_REF_PKG_S TO &&username; -- count.cdr; count.lastcdr GRANT SELECT ON EX_V_CDR TO &&username; -- count.gm GRANT SELECT ON SD_GOOD_MOVES TO &&username; -- count.ecrd GRANT SELECT ON EX_CALL_DATA_REC TO &&username; -- count.edc GRANT SELECT ON EX_DATA_COLLECT TO &&username; -- count.etcc GRANT SELECT ON EX_TRAFFIC_COLLECT_C TO &&username; -- count.active GRANT SELECT ON SI_SUBJ_GOODS TO &&username; -- tblspace.discovery GRANT SELECT ON DBA_SEGMENTS TO &&username; -- tblspace.pcf GRANT SELECT ON DBA_DATA_FILES TO &&username; GRANT SELECT ON DBA_SEGMENTS TO &&username; -- checkactive GRANT SELECT ON V_$INSTANCE TO &&username; -- rcachehit GRANT SELECT ON V_$SYSSTAT TO &&username; -- activeusercount GRANT SELECT ON V_$SESSION TO &&username; -- dbsize GRANT SELECT ON DBA_FREE_SPACE TO &&username; GRANT SELECT ON DBA_TABLESPACES TO &&username; -- lastarclog GRANT SELECT ON V_$LOG TO &&username; -- freebufwaits GRANT SELECT ON V_$SYSTEM_EVENT TO &&username; GRANT SELECT ON V_$EVENT_NAME TO &&username; / QUIT;