Вход/Регистрация
Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil
вернуться

Востриков С М

Шрифт:

Мониторинг состояния сервера

Любители исследовать исходный код InterBase б часто говорят, что в нем скрыта масса интереснейших идей, которые были не доведены до конца по каким-либо причинам. Одной из таких идей, извлеченных и реализованных в InterBase 7, является мониторинг внутреннего состояния сервера.

В InterBase предыдущих версий сервер производил постоянный мониторинг своего состояния — отслеживал выполняющиеся запросы, подключенных пользователей и т. д. Но все эти данные были для внутреннего использования - пользователи не могли получить к ним доступ. Теперь ситуация изменилась - в InteiBase 7 появился удобный интерфейс для доступа к данным о мгновенном состоянии сервера.

InterBase 7 предоставляет механизм "временных системных таблиц" для доступа к данным о своем состоянии. Не надо путать эти временные таблицы с временными таблицами в других СУБД, которые используются для оптимизации выполнения SQL-запросов.

В данном случае временные системные таблицы лишь представление мгновенного снимка состояния сервера и баз данных. Чтобы избавить разработчиков приложений баз данных от необходимости использовать специальные вызовы API для получения (и даже изменения') информации о состоянии сервера, в семерке создан SQL-интерфейс для этих целей. Не правда ли, очень удобно - формируете стандартными средствами SQL-запрос и получаете нужную статистику в виде привычного набора данных.

Выполняя запросы к временным таблицам, можно получить свежие (на момент выполнения запроса) данные о том, какие запросы выполняет конкретный подключенный пользователь, какие таблицы использует Чтобы обновить полученные данные, надо подтвердить транзакцию, в рамках которой выполнялся запрос к временным системным таблицам, и выполнить запрос снова.

Можно также узнать, какие запросы в данный момент выполняются на сервере и какой из этих запросов самый длительный. Помимо этого, существует еще множество видов информации, которую можно извлечь из системных таблиц.

Вот список временных системных таблиц для мониторинга в InterBase 7 с краткими описаниями, взятый с сайта www.ibase.ru:

Табл 2. Системные таблицы для мониторинга в InterBase 7

Доступные системные временные таблицы

Название таблицы

Что содержит

TMPSATTACHMENTS

По записи на каждое соединение к базе данных

TMP$DATABASE

По записи на каждую базу данных, к которой вы подсоединились

TMP$POOL_BLOCKS

По записи на каждый блок памяти в каждом пуле

TMP$POOLS

По записи на каждый пул памяти

TMP$PROCEDURES

По записи на каждую выполненную в данном соединении процедуру

TMP$RELATIONS

По записи на каждую таблицу, к которой было обращение в данном соединении

TMPSSTATEMENTS

По записи на каждый выполняемый в данный момент запрос, для всех соединений

TMP$TRANSACTIONS

По записи на каждую активную (или в состоянии limbo) транзакцию

Модификация системных таблиц

Помимо чтения статистики, есть ряд случаев, когда системные таблицы можно менять! Прежде всего, это тот важный случай, когда необходимо снять очень длительный, зависший запрос.

Чтобы влиять на состояние запросов, транзакций, соединений и т.д., нужно изменить столбец TMP$STATE в соответствующей временной системной таблице. Например, вы можете произвести следующие изменения:

* Отключить соединение.

UPDATE TMP$ATTACHMENTS SET TMP$STATE = 'SHUTDOWN' WHERE (TMP$ATTACHMENT_ID = 12345)

* Принудительно отменить активную в данный момент или "застрявшую" 2РС (т. е. в состоянии in limbo) транзакцию.

UPDATE TMP$TRANSACTION SET TMP$STATE = 'ROLLBACK' WHERE (TMP$TRANSACTION_ID = 12345)

* Остановить выполняемый в данный момент запрос.

UPDATE TMP$STATEMENTS

SET TMP$STATE = 'CANCEL'

WHERE (TMP$STATEMENT_ID = 12345)

Примеры получения статистики

Примерами использования системных таблиц для получения полезной статистики могут являться следующие запросы:

* 10 самых длительно выполняющихся запросов.

SELECT a.tmp$user, s.tmp$timestamp/ s.tmp$sql, s.tmp$quantum

FROM tmp$statements s, tmp$attachments a

WHERE a.tmp$attachment_id = s.tmp$attachment_id

ORDER BY s.tmp$quantum DESC

ROWS 10;

* Активность пользователя SYSDBA.

SELECT TMP$USER, TMP$USER_IP_ADDR,

TMP$TIMESTAMP, TMP$STATE, TMP$TRANSACT10NS, TMP$RECORD_SELECTS, TMP$RECORD_INSERTS,

TMP$RECORD_UPDATES, TMP$RECORD_DELETES FROM TMP$ATTACHMENTS WHERE TMP$USER = 'SYSDBA'

Безопасность временных таблиц

Чтобы предотвратить возможность использования мощных возможностей временных таблиц в неблаговидных целях, на них введены ограничения прав доступа - по умолчанию таблицы видимы и могут изменяться только владельцем базы данных или SYSDBA. В случае необходимости можно выдать права на чтение (и только на чтение) для других пользователей - обычным образом, с помощью оператора GRANT и отобрать их с помощью REVOKE.

  • Читать дальше
  • 1
  • ...
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: