Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга по БД(Вальке А.А.).doc
Скачиваний:
27
Добавлен:
29.04.2019
Размер:
4.5 Mб
Скачать

7.6. Мониторинг текущего состояния сервера базы данных

В процессе функционирования информационной системы сервер базы данных обрабатывает запросы, поступающие от пользователей. Для обработки запросов сервер использует ресурсы, выделенные ему операционной системой. Для того, чтобы узнать, насколько сервер базы данных в данный момент загружен работой, какие ресурсы ему сейчас доступны, существуют специальные средства. К этим средствам относятся утилиты onperf, oncockpit, onstat, oncheck, внутри сервера БД также имеются специальные системные таблицы, в которые автоматически заносится информация о текущем состоянии.

Рассмотрим, как получать наиболее часто используемую информацию о состоянии сервера БД.

7.6.1. Кто работает с сервером базы данных

Запустив утилиту onstat –u, можно получить список всех нитей находящихся в обработке. В листинге указывается, кто сейчас работает с сервером базы данных (колонка под названием user), на каком компьютере находится данный пользователь или с какого терминала запущено приложение (колонка tty), номер пользовательской сессии (колонка sessid) и т.д. Пример листинга данной утилиты:

Userthreads address flags sessid user tty wait tout locks nreads nwrites c0eee018 ---P--D 1 informix - 0 0 0 20 5 c0eee53c ---P--F 0 informix - 0 0 0 0 2 c0eeea60 ---P--- 5 informix - 0 0 0 0 0 c0eeef84 ---P--B 6 informix - 0 0 0 0 0 c0eef4a8 ---P--D 8 informix - 0 0 0 0 0 c0eefef0 Y--P--- 10 andrey ttyp3 c0fc 0 1 10 0 6 active, 128 total, 9 maximum concurrent

Часть нитей являются системными, эти системные (служебные) нити всегда принадлежат пользователю informix, для них не указывается колонка tty и в седьмой позиции колонки flag находится значение B, D или F. Так, на приведенном выше листинге только пользователь andrey (точнее, его нить с номером сессии 10), запустивший приложение с терминала ttyp3 является «настоящим пользователем», остальные нити принадлежат пользователю informix и являются служебными.

7.6.2. Сколько памяти использует сервер бд

Память, которую экземпляр сервера БД Informix забирает у ОС состоит из следующих основных частей (напомним, что одновременно может быть запущено несколько экземпляров сервера базы данных на одной машине):

  • сегмент кода – память, выделенная операционной системой под размещение программного кода сервера БД;

  • сегмент данных и стек – память, выделенная операционной системой под для размещение локальных данных, с которыми работает программный код сервера БД;

  • разделяемая память – память, запрошенная сервером базы данных у ОС в процесса запуска и работы для обработки запросов пользователей и для внутренних нужд (для обмена информацией между разными нитями внутри сервера БД).

Суммарный размер сегмента кода и сегмента данных и стека обычно невелик по сравнению с размером разделяемой памяти. Так, размер сегмента кода для процесса oninit обычно составляет от 2-х до 4-х мегабайт. Более точно узнать объем памяти, выделенной операционной системой можно с помощью команды ОС Unix

ps –lu informix

которая в поля “sz” покажет число выделенных страниц памяти (стоит помнить, что все процессы oninit внутри одного экземпляра сервера использую общий сегмент кода и, поэтому, надо не суммировать общее число страниц, а посмотреть число страниц для любого отдельного процесса oninit).

Разделяемая память используется сервером БД Informix для обмена информацией между нитями (процессами oninit), составляющими сервер и для хранения буферов, используемых для обработки запросов пользователей. На размер требуемой разделяемой памяти влияет количество буферов, количество замков, размер логов и другие параметры, которые задаются в конфигурационном файле при запуске сервера Informix. Узнать текущий размер выделенной разделяемой памяти можно утилитой

onstat – -

Пример листинга данной утилиты:

> echo $INFORMIXSERVER tcp_serv1

> onstat - - INFORMIX-Dynamic Server/UD Version 9.13.UC1 -- On-Line -- Up 37 days 23:41:53 -- 8896 Kbytes

По приведенному здесь листингу видно, что размер разделяемой памяти для данного экземпляра сервера составляет 8896 КБт (напомним, что переменная окружения INFORMIXSERVER определяет экземпляр сервера, с которым производится работа, в данном случае, это сервер по имени «tcp_serv1»).