В то время, как производственные базы данных, содержащие важную информацию, все быстрее увеличиваются в размерах, автоматическое управление пространством хранения данных становится все более актуальным. Несмотря на то, что Informix Dynamic Server (IDS) не обладает встроенной возможностью управления пространствами хранения, в нем уже содержатся все необходимые инструменты, которые вы можете использовать, чтобы избежать простоев, вызванных нехваткой дискового пространства.
Ниже приведен обзор ключевых задач, которые вам необходимо выполнить для того, чтобы получить эту функциональность:
- В планировщике задач IDS установить задания для мониторинга доступного места во всех пространствах баз данных.
- Реализовать функцию проверки свободного места в виде хранимой процедуры SQL.
- Если свободное место в пространстве баз данных ниже установленного предела, автоматически добавлять чанк с помощью вызова функции
admin(), которая бы выполняла команду администрированияADD CHUNK.В качестве образца вы можете использовать программу RAWDEVSIZE из раздела Загрузок. Она позволяет определять размер и смещение всех свободных частей всех не размеченных (RAW) разделов, сохраняя эту информацию в таблицу базы данных. Хранимая процедура SQL, которая выполняет команду
ADD CHUNK, читает эти результаты.
Постоянный мониторинг пространств баз данных
Для реализации постоянного мониторинга пространств баз данных создайте обычное задание путем добавления записи в таблицу ph_task.
Рисунок 1 показывает пример, в котором задача, вызывающая хранимую процедуру SQL, запускается каждые 30 секунд. Если процедура обнаруживает, что свободное место в пространстве баз данных снизилось до определенной границы, то она расширяет dbspace. В примере, описываемом в данной статье, граница определена в системной таблице ph_threshold.
В разделеРесурсы содержатся ссылки, по которым вы можете получить детальную информацию о таблицах ph_task и ph_threahold.
Рисунок 1. Постоянный мониторинг пространств баз данных.
Добавление чанка к пространству баз данных
Для расширения пространства баз данных с помощью SQL вы можете использовать функцию администрирования admin() базы данных SYSADMIN.
Ниже приведен пример для добавления чанка к dbspace (в данном случае используется диск без файловой системы (raw device)):
EXECUTE FUNCTION admin ("ADD CHUNK", "dbs1a", "/dev/raw1/", "2GB", "1GB");
|
Таблица 1 описывает параметры, используемые в вышеуказанной команде.
Таблица 1. Параметры добавления чанка
| Значение параметра | Смысл |
|---|---|
dbs1a | имя пространства |
/dev/raw1/ | путь |
2GB | размер |
1GB | смещение |
Для того, чтобы расширить пространство баз данных, вам необходимо определить путь, размер и смещение для свободного чанка на существующем не размеченном устройстве хранения данных (raw device). В примере, описываемом в данной статье, это сделано с помощью программы RAWDEVSIZE.
Раздел ЗагрузкиРаздел загрузок содержит ссылку на исходный код программы RAWDEVSIZE. Программа написана на языке С. После того, как вы скачаете исходный код программы, вы можете скомпилировать ее для любой UNIX®-платформы.
Программа RAWDEVSIZE анализирует доступные raw-устройства хранения данных и сохраняет информацию о пути, размере и смещении свободных блоков в таблицу базы данных под названием free_chunks. Хранимая процедура SQL ищет соответствующий чанк в таблице free_chunks и использует эту информацию при вызове функции ADD CHUNK. При каждом расширении требуется обновить информацию о свободных чанках. Поэтому программа RAWDEVSIZE вызывается из хранимой процедуры SQL, следующей за каждым расширением.
Программа RAWDEVSIZE рассчитывает размеры следующих доступных устройств хранения данных, доступных для использования сервером Informix:
- Размеры используемых устройств хранения данных, которые не имеют свободного места
- Размеры устройств, которые все еще содержат свободные блоки
- Размеры полностью свободных устройств
Полученные данные сохраняются в таблице базы данных free_chunks, которая имеет следующий формат:
Таблица 2. Формат таблицы free_chunks
| name as LVARCHAR (1024) | offset as INT8 | freesize as INT8 |
Рисунок 2 показывает примерный набор из трех устройств хранения, которые содержат как используемые, так и свободные чанки. Устройства носят имена RD1, RD2 и RD3, и хранятся в директории /chunks. Для каждого чанка рисунок описывает смещение (в Гб). Для свободных чанков рисунок также указывает их размер (в Мб).
Рисунок 2. Анализ устройств хранения данных
Выполнение программы RAWDEVSIZE для устройств, описанных на Рисунке 2, приводит к добавлению следующей информации в таблицу free_chunks:
Таблица 3. Результат выполнения программы в таблице free_chunks
| /chunks/RD1 | 0 GB | 100 MB |
| /chunks/RD1 | 0,4 GB | 700 MB |
| /chunks/RD1 | 1,6 GB | 400 MB |
| /chunks/RD2 | 0 GB | 700 MB |
| /chunks/RD2 | 1,4 GB | 600 MB |
| /chunks/RD3 | 0 GB | 300 MB |
| /chunks/RD3 | 1,2 GB | 800 MB |
Содержимое таблицы free_chunks отсортировано по полю freesize. Хранимая процедура CHECK_DBSPACE_RD определяет какой из перечисленных в таблице free_chunks чанков должен быть использован для расширения пространства баз данных.
Ссылки на устройства хранения для программы RAWDEVSIZE
Программа RAWDEVSIZE изначально была разработана для окружения SAP-систем, поэтому прототип исходного кода основан на специфичческих для SAP правилах касательно ссылок на raw-устройства хранения.
Листинг 1. Ссылки на устройства хранения для программы RAWDEVSIZE
${SAPDBA_RAWDEV} =
/informix/QI1/sapdata
|
|
|--- physdev1
| |
| |
| |----- data1 -> /dev/rlvINF1
| |
| |
| ----- data2 -> /dev/rlvINF2
|
|
|--- physdev2
| |
| |
| |----- data1 -> /dev/rlvINF3
| |
| |
| ----- data2 -> /dev/rlvINF4
|
|
--- physdev3
|
|
|----- data1 -> /dev/rlvINF5
|
|
----- data2 -> /dev/rlvINF6
|
Список всех доступных устройств хранения определяется сканированием структуры поддиректорий в $SAPDBA_RAWDEV на предмет наличия ссылок к raw-устройствам. Затем выполняется запрос к базе данных Informix, с помощью которого определяется расположение уже используемых чанков на raw-устройствах.
Внимание: В другом окружении описанный выше механизм определения raw-устройств может быть неподходящим. Однако, в таком случае могут быть другие методы определения raw-устройств.
Пошаговый обзор работы RAWDEVSIZE
Ниже представлен обзор всех этапов работы программы RAWDEVSIZE:
- Проверка переменной окружения
$SAPDBA_RAWDEVи поиск директорий с содержащимися в них файлами. - Программа проверяет, являются ли найденные файлы ссыками на raw-устройства (character-special devices).
- Проверка размеров raw-устройств и запись результатов в файл raw_devs.unl
- Выполнение запроса к системной таблице SYSCHUNKS и добавление зеркальных чанков соответственно следующему критерию:
SELECT... like '%sapdata/physdev%/data%'
- Сохранение результатов предыдущего шага в файл syschnk.unl.
- Вычисление размеров свободных для использования raw-устройств и запись результатов в файл free_chunks.unl.
- Загрузка содержимого файла free_chunks.unl в результирующую таблицу free_chunks.
Использование "готовых" файлов в Linux и Windows
В случае использования "готовых" (cooked) файлов в Linux® или Windows®, информация об смещениях не существенна. Поэтому каждый добавляемый вами чанк должен иметь уникальный путь, который создается хранимой процедурой. Например, вы можете использовать имя пространства баз данных вместе с уникальным номером, как показано ниже:
EXECUTE FUNCTION admin ("ADD CHUNK", "mydbspace",
"c:/Informix/chunks/mydbspace.001", "2GB");
|
Пример настройки автоматического управления пространствами
Следуйте ниже описанными шагами, чтобы установить пример, рассматриваемый в данной статье.
- Создаем результирующие таблицы.
В качестве пользователя Informix создайте результирующие таблицы для программы RAWDEVSIZE в базе данных SYSADMIN, как указано в Листинге 2:
Листинг 2. Создаем результирующие таблицыCREATE TABLE raw_devs ( name LVARCHAR (1024), size INT8 ); CREATE TABLE free_chunks ( name LVARCHAR (1024), offset INT8, freesize INT8 );
- Заполняем системные таблицы планировщика задач
Вставляем строку в системную таблицу ph_threshold базы данных SYSADMIN, чтобы установить предельные значения свободного места в пространстве баз данных (Листинг 3):
Листинг 3. Вставляем значения в системную таблицу ph_threshold system tableINSERT INTO ph_threshold (name, task_name, value, value_type, description) VALUES ( 'DBSPACE ALERT', 'check_dbspace', '10000', 'NUMERIC', 'A dbspace should be extended if free space lower than 10 MB.' );
- Добавляем задание для планировщика путем вставки строки в системную таблицу ph_task базы данных SYSADMIN (Листинг 4):
Листинг 4. Вставляем запись в системную таблицу ph_taskINSERT INTO ph_task ( tk_name, tk_type, tk_group, tk_description, tk_execute, tk_frequency, tk_delete ) VALUES ( 'check_dbspace', 'TASK', 'SERVER', 'Checking of dbspaces, which should be min. 10 MB free.', 'check_dbspace_rd', <-- Name of the SQL stored procedure that should be called '0 0:00:30', <-- Calling interval - every 30 sec. '7 0:00:00' );
- Создаем хранимую процедуру SQL
Создаем хранимую процедуру check_dbspace_rd в базе данных SYSADMIN, как указано в Листинге 5:
Листинг 5. Создаем хранимую процедуру check_dbspace_rdCREATE PROCEDURE check_dbspace_rd (task_id INTEGER, task_seq INTEGER) DEFINE dbs_min_size INTEGER; DEFINE dbspace_name VARCHAR(128); DEFINE dbspace_free INT8; DEFINE i INTEGER; DEFINE path LVARCHAR(1024); DEFINE offs VARCHAR(64); SELECT value::INTEGER INTO dbs_min_size FROM ph_threshold WHERE name = 'DBSPACE ALERT'; FOREACH SELECT db.name, TRUNC (SUM (ch.nfree * ch.pagesize) / 1024, 0) free_size_KB INTO dbspace_name, dbspace_free FROM sysmaster:sysdbspaces db, sysmaster:syschunks ch WHERE db.dbsnum = ch.dbsnum AND db.name NOT IN ('logdbs', 'physdbs', 'rootdbs', 'psapsystem') AND db.name NOT LIKE 'tmpdbs%' GROUP BY 1 IF dbspace_free < dbs_min_size THEN INSERT INTO ph_alert (alert_task_id, alert_task_seq, alert_type, alert_color, alert_state, alert_object_type, alert_object_name, alert_message, alert_action) VALUES (task_id, task_seq, 'ERROR', 'red', 'ADDRESSED', 'DBSPACE', dbspace_name, 'Dbspace ['||TRIM (dbspace_name) ||' - '||dbspace_free::INTEGER ||' KB free] should be extended!', NULL ); FOREACH SELECT FIRST 1 name, offset INTO path, offs FROM free_chunks ORDER BY freesize LET offs = offs ||' B'; EXECUTE FUNCTION admin ('ADD CHUNK', dbspace_name, path, '200 MB', offs) INTO i; SYSTEM '/informix/QI1/etc/sysadmin/rawdevsize/rawdevsize.sh'; END FOREACH END IF END FOREACH END PROCEDURE;
- Создаем враппер.
Создаем враппер для программы RAWDEVSIZE. Например, вы можете создать скрипт rawdevsize.sh, который бы вызывал программу RAWDEVSIZE из хранимой процедуры (см. Листинг 6).
Листинг 6. Создаем враппер#!/bin/sh SAPDBA_RAWDEV=/informix/QI1/sapdata; export SAPDBA_RAWDEV; DIR=/informix/QI1/etc/sysadmin/rawdevsize; export DIR; cd ${DIR}; ${DIR}/rawdevsize.exe > ${DIR}/rawdevsize.txt
Данная статья описывает создание процедуры автоматического расширения пространств баз данных Informix 11.5. Процедура использует возможности базы данных sysadmin, мониторит доступное пространство, и автоматически добавляет чанк в пространство, место в котором начинает заканчиваться. Реализовав данный механизм на своей системе вы будете уверены, что не столкнетесь с нехваткой места в пространства баз данных. DB2 предоставляет несколько механизмов для автоматического расширения пространств данных, но на данный момент IDS не имеет подобных встроенных возможностей (версия IDS 11.70 будет содержать в себе такой встроенный функционал. - прим.пер.). Вы можете исправить этот недостаток с помощью процедуры, описанной в данный статье.
| Описание | Имя | Размер | Метод загрузки |
|---|---|---|---|
| Source code of RAWDEVSIZE.c | rawdevsize.zip | 8KB | HTTP |
Научиться
- Оригинал статьи: Automatically extend dbspaces in Informix Dynamic Server 11.5. (EN).
-
Узнайте больше о ph_task в Информационном Центре Informix Dynamic Server.(EN)
-
Узнайте больше о ph_threshold в Информационном Центре Informix Dynamic Server.(EN)
- Используете
раздел developerWorks, посвященный Informix, чтобы получить ресурсы, необходимые для развития ваших умений, связанных с Informix Dynamic Server.(EN)
Получить продукты и технологии
- Скачайте пробную версию Informix Dynamic Server для проверки концепции, изложенной в этой статье.(EN)
- Скачайте
пробные версии продуктов IBM,
или исследуйте онлайн-испытания в IBM SOA Sandbox и прикоснитесь к инструментам разработки и middleware-продуктам от DB2®, Lotus®, Rational®, Tivoli®, and
WebSphere®.(EN)
Обсудить
- Примите участие в обсуждении материала на форуме.
- Читайте блоги на developerWorks и станьте членом сообщества developerWorks. (EN)