понедельник, 31 мая 2010 г.

Динамический запуск листенеров

Начиная с версии 11.50.xC6 в Informix появилась возможность динамического создания листенеров. Предыдущие версии позволяли конфигурировать и запускать новые листенеры только путем перезапуска всего экземпляра сервера, что иногда создавало определенные неудобства. Теперь можно проводить запуск-останов листенера без перезапуска всего сервера. Для этого используется команда  

onmode -P [start|stop|restart] servername

перед ее использованием надо чтобы в файле $INFORMIXDIR/etc/sqlhosts был определен необходимый алиас (алиас можно занести в файл sqlhosts также без перезапуска сервера). Т.е. сценарий работы такой: определяем необходимый алиас srvname в файле sqlhosts, если хотим запустить новый листенер, затем запускаем этот алиас с помощью команды onmode -P start srvname и подключаем к нему клиентские приложения. Если небходимо остановить этот алиас, то запускаем команду onmode -P stop srvname. В online.log при этом будут появлятся сообщения о запуске или останове этих алиасов.
Посмотреть какие листенеры запущены в данный момент можно с помощью команды onstat -g ntt.

суббота, 8 мая 2010 г.

День Победы - 65 лет Великой Победе

Пол-Европы прошагали, пол-Земли ...


Памяти всех, кто сражался за Победу и победил, благодаря которым мы есть на свете и можем жить в мире ...
Посвящаю двум моим дедам, прошедшим войну, и победившим. Они дошли до Берлина и вернулись. Вечная память.

вторник, 4 мая 2010 г.

Оптимизация использования буферных пулов и нагрузки на диски

В любой базе данных есть таблицы которые занимают много и даже очень много места на дисках. Также есть таблицы которые на дисках занимают места мало. В старой модели использования буферного пула в Informix, все таблицы должны были разделять один и тот же буферный пул. Существенный минус такой модели состоит в том, что при частом использовании больших таблиц, возникал эффект вытеснения страниц остальных таблиц в буферном пуле, в результате чего увеличивалась нагрузка на диски, поскольку требовалось повторное чтение страниц таблиц, которые были замещены страницами больших таблиц. Частично эта проблема в Informix решалась с помощью использования Light Scan, когда страницы больших таблиц считывались в специальные пулы в разделяемом сегменте памяти, но не в буферный пул. Однако такое поведение работает далеко не всегда, должен соблюдатся целый ряд условий, чтобы Light Scan работал. Начиная с 10 версии Informix появилась возможность размещать таблицы в dbspace с размером страницы 2, 4, 8, 16, 32Кб, и назначать таким dbspace соответствующий буферный пул. Таким образом можно разделить большие таблицы и все остальные, и снизить конкуренцию за буферный пул между таблицами.
На практике это делается так. Сначала анализируем базу на предмет наличия больших таблиц, которые часто читаются или модифицируются. Либо на этапе проектирования выявляем таблицы, которые в будущем существенно вырастут по сравнению с остальными. Затем создаем непосредственно хранилище для таких таблиц. Допустим на данной платформе размер страницы по умолчанию в Informix 4Кб. Для больших таблиц надо создать dbspace с размером страницы например 8Кб а также создать буферный пул с таким же размером страницы 8Кб.

Предварительно конфигурируем буферный пул, например размером 512Мб или 65536 буферов по 8Кб в файле $ONCONFIG:

BUFFERPOOL size=8K,buffers=65536,lrus=127,lru_min_dirty=50,lru_max_dirty=60

Создаем dbspace с именем bigdata8k, размером страницы 8Кб и размером первого чанка 25 Gb:

onspaces -c -d bigdata8k -k 8 -p /informix/data/bigdata8k.000 -o 8 -s 26214384

Теперь можно либо перенести в новый dbspace большие таблицы, либо создать в нем новые.

Upd. Для версии Informix начиная с 11.50.UC6 можно глобально включить Light Scans с помощью параметра конфигурации BATCHEDREAD_TABLE, или же то же самое можно сделать для отдельной сессии с помощью set environment IFX_BATCHEDREAD_TABLE "1";
Это конечно же не отменяет преимуществ использования больших таблиц в отдельных dbspace с буферными пулами, а прекрасно дополняет эту возможность.