SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Механизмы
мониторинга
баз данных:
взгляд изнутри
Дмитрий Еманов
Firebird Project
Чего не будет в этом докладе

Как использовать top / iostat / perf / etc

Сравнения Zabbix / Cacti / Graphite / whatever

Красивых графиков с визуализацией ахтунгов в
продакшне с разных ракурсов

Нюансов интеграции с StatsD, CollectD или PerfMon
О чем будем говорить

Какая информация нужна DBA/DevOps от СУБД

Какими способами СУБД может ее предоставить

Какие тут присутствуют подводные камни

Немного поговорим про метрики

Поглядим на MySQL, PostgreSQL, Firebird

Байки из жизни: собственный опыт
Что имеет смысл мониторить

Доступность и целостность

Кто и что делает

Качественные и количественные данные

Пиковые и предельные ситуации

Системные и прикладные ошибки
Доступность и целостность

Доступность — извне, на разных уровнях

Целостность — изнутри

Критические ошибки в логах СУБД

Опционально: контрольные суммы

Возможность онлайн-валидации физической структуры
Кто и что делает

Активность (а также псевдо-активность) юзеров

Привязка к коннектам, транзакциям, SQL-запросам

Идентификация клиентов

Привязка к процессам / потокам ОС

Фоновые задачи СУБД
Идентификация клиентов

С какого хоста пришел запрос:
host/IP, MAC, протокол

С какого приложения пришел запрос:
port, PID, pathname, tag

Каким API пользовался клиент:
версия клиентской либы, версия протокола
Какая информация бывает
Executor Statistics
manager
Log manager
Рантайм-
статистика
Журналы
Какая информация бывает

Снэпшот — что происходит прямо сейчас
(на момент обращения), текущие значения метрик,
иногда пиковые значения метрик

История — полная или частичная хронология
событий мониторинга
Какая информация бывает

Снэпшот — требует периодического опроса;
может пропускать события; высокочастотный опрос
может сильно нагружать СУБД

История — при злоупотреблении нагружает СУБД;
быстро забивает дисковое пространство;
надо четко понимать, что именно хотим знать
Какая информация бывает

Штатные логи СУБД — история

Специальные утилиты — обычно снэпшот

SQL интерфейс — снэпшот

Через штатный API — снэпшот

Через низкоуровневую интеграцию (плагины) —
возможны варианты
Метрики

Обычно это текущие значения счетчиков

С одной стороны, считать надо много событий

Лучше перебдеть, чем недобдеть (с)

Но их детализация может стоить недешево
Детализация метрик

Только для сессии?
Или еще и для каждой транзакции?
Или еще и для каждого запроса?
А может, еще ниже уровнем?
Пытаемся считать на разных уровнях

Вот так — очень быстро
session→stats→record_backouts++;

Вот так — не очень быстро
query→stats→record_backouts++;
query→txn→stats→record_backouts++;
query→txn→session→stats→record_backouts++;
query→txn→session→db→stats→record_backouts++;
Пытаемся считать на разных уровнях

Но некоторые уровни могут и отсутствовать,
это надо проверять!

Вот так — совсем тормоза :-(
if (object)
object→stats→record_backouts++;
// и еще три раза
Как мы выкручиваемся
// Thread specific context data
struct Context : public ThreadData
{
Database* database;
Attachment* attachment;
Transaction* transaction;
Request* request;
RuntimeStatistics *reqStat, *traStat, *attStat, *dbbStat;
}
Как мы выкручиваемся
explicit Context(ISC_STATUS* status)
: ThreadData(ThreadData::tddDBB),
database(NULL), attachment(NULL),
transaction(NULL), request(NULL)
{
reqStat = traStat = attStat = dbbStat =
RuntimeStatistics::getDummy();
}
Как мы выкручиваемся
void setAttachment(Attachment* val)
{
attachment = val;
attStat = val ? &val->att_stats : RuntimeStatistics::getDummy();
}
void bumpStats(const RuntimeStatistics::StatType index)
{
reqStat->bumpValue(index);
traStat->bumpValue(index);
attStat->bumpValue(index);
dbbStat->bumpValue(index);
}
Детализация метрик

Глобальные счетчики — это просто, но неинтересно

Кое-что надо бы потаблично
Еще для индексов
А если помечтать, то...
… и тут Остапа понесло (с)
Детализация метрик

Счетчик надо сначала найти!

Хэш-таблица?
Сортированный массив?
Или, может, бинарное дерево?

Это все временные затраты, их надо оценивать
Детализация метрик
#if defined(REL_COUNTS_TREE)
typedef Firebird::BePlusTree<RelationCounts, ULONG,
Firebird::MemoryPool, RelationCounts> RelCounters;
#elif defined(REL_COUNTS_PTR)
typedef Firebird::PointersArray<RelationCounts,
Firebird::EmptyStorage<RelationCounts>,
ULONG, RelationCounts> RelCounters;
#else // sorted array
typedef Firebird::SortedArray<RelationCounts,
Firebird::EmptyStorage<RelationCounts>,
ULONG, RelationCounts> RelCounters;
#endif
Мониторинг ожиданий

I/O, блокировки разных видов

Кто, кого и на чем ждет

Интересен также контекст

Графы ожиданий, дэдлоки
Мониторинг ожиданий

I/O, блокировки разных видов

Кто, кого и на чем ждет

Интересен также контекст

Графы ожиданий, дэдлоки

Но самое интересное — время ожидания

Однако, тут могут быть сюрпризы!
Метрики: советы

Больше метрик, хороших и разных

Детализация стоит дорого, трижды подумайте над
реализацией (и надо ли оно вам вообще)

Если накладные расходы велики —
можно использовать отложенную запись

Самую тяжелую статистику имеет смысл
делать опциональной
Как выдавать данные наружу

Регулярно обновлять состояние и счетчики
в общей памяти — накладные расходы,
зато возможен высокочастотный мониторинг

Предоставлять состояние по запросу, метрики считать
локально и предоставлять также по запросу —
снэпшот слегка отстает, больше задержки при запросах
к мониторингу
Снэпшот-мониторинг в MySQL

performance_schema

Не такой уж и снэпшот

Можно включать/выключать (требуется перезапуск)

Настраивать можно «на лету»

Помимо счетчиков содержит также *_summary
Снэпшот-мониторинг в PostgreSQL

Statistics collector

Включать/выключать можно «на лету», по группам

Динамические представления pg_stat_* и pg_locks

Обновляется периодически

Снэпшот на время жизни транзакции
Наш опыт: снэпшот-мониторинг в Firebird

Виртуальные таблицы мониторинга

Метрики (локально) считаем всегда,
время замеряем опционально

Информация собирается по запросу

Снэпшот на время жизни транзакции
Наш опыт: снэпшот-мониторинг в Firebird

MON$DATABASE

MON$ATTACHMENTS

MON$TRANSACTIONS

MON$STATEMENTS

MON$CALL_STACK
+

MON$*_STATS

MON$*_USAGE
Наш опыт: снэпшот-мониторинг в Firebird

MON$DATABASE

MON$ATTACHMENTS

MON$TRANSACTIONS

MON$STATEMENTS

MON$CALL_STACK
+

MON$*_STATS

MON$*_USAGE
Считаются для каждого
объекта выше
Наш опыт: снэпшот-мониторинг в Firebird

MON$DATABASE

MON$ATTACHMENTS

MON$TRANSACTIONS

MON$STATEMENTS

MON$CALL_STACK
+

MON$*_STATS

MON$*_USAGE
Считаются для каждого
объекта выше
Агрегируются
снизу вверх
Логирование

Критические ошибки

Алерты — логические ошибки и пиковые ситуации
(медленные запросы, временные файлы)

Интерактивная трассировка

Аудит — постоянное логирование
Логирование в MySQL

Error log

General query log

Slow query log

Audit API + плагины
Логирование в PostgreSQL

Разные варианты — stderr / syslog / eventlog / файл

Есть функционал slow query log — через
log_min_duration_statement

Кастомизация логируемых запросов, умеет писать
долгие блокировки, временные файлы и т.п.

Динамическая трассировка для DTrace / SystemCap
(требует компиляции c --enable-dtrace)
Наш опыт: логирование в Firebird

Trace API + плагины

Системный аудит — управляется ядром, настраивается
конфигом, пишется в лог на диске (по умолчанию)
с ротацией (архивированием)

Пользовательская трассировка — управляется юзером
(start-pause-resume-stop), конфиг задается в рантайме,
лог пишется во временные файлы и удаляется по мере
вычитывания клиентом
Наш опыт: логирование в Firebird

Везде логируем ID объектов

Большинство событий спаренные — начало и конец

По завершении можем выдавать статистику — время
выполнения и детализированные метрики

Есть функционал slow query log — через time_threshold

Дополнительная кастомизация — через include/exclude
фильтры (regexp)
Наш опыт: логирование в Firebird
# трассируем медленные запросы
database = myslowdb
{
log_statement_finish = true
print_perf = true
time_threshold = 10000 # 10 seconds
}
# трассируем изменения метаданных
database = mycooldb
{
log_statement_start = true
include_filter = %(CREATE|ALTER|DROP)%
}
В реальной жизни надо сочетать

В логах — только алерты или подробно

От этого зависит частота снэпшот-мониторинга

Совсем интересно становится,
если их можно связать вместе
Вопросы?
dimitr@firebirdsql.org

Mais conteúdo relacionado

Mais procurados

Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Ontico
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)Ontico
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practiceAlexey Lesovsky
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Fwdays
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XCPostgreSQL-Consulting
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Ontico
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationAlexey Lesovsky
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Ontico
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Ontico
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на GoAndrey Smirnov
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Ontico
 

Mais procurados (20)

Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
 

Semelhante a Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird Project)

анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Media Gorod
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)Sergey Skvortsov
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
мониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonмониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonSlach
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus0leGG
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»DevDay
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9HighLoad2009
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHighLoad2009
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsBadoo Development
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхNikolay Samokhvalov
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Ontico
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 

Semelhante a Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird Project) (20)

анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
мониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonмониторинг производительности Web приложений на python
мониторинг производительности Web приложений на python
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9
 
JSSDK: Начало
JSSDK: НачалоJSSDK: Начало
JSSDK: Начало
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana Labs
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
PowerShell
PowerShellPowerShell
PowerShell
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 

Mais de Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Ontico
 
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)Ontico
 

Mais de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
 
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
 

Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird Project)

  • 2. Чего не будет в этом докладе  Как использовать top / iostat / perf / etc  Сравнения Zabbix / Cacti / Graphite / whatever  Красивых графиков с визуализацией ахтунгов в продакшне с разных ракурсов  Нюансов интеграции с StatsD, CollectD или PerfMon
  • 3. О чем будем говорить  Какая информация нужна DBA/DevOps от СУБД  Какими способами СУБД может ее предоставить  Какие тут присутствуют подводные камни  Немного поговорим про метрики  Поглядим на MySQL, PostgreSQL, Firebird  Байки из жизни: собственный опыт
  • 4. Что имеет смысл мониторить  Доступность и целостность  Кто и что делает  Качественные и количественные данные  Пиковые и предельные ситуации  Системные и прикладные ошибки
  • 5. Доступность и целостность  Доступность — извне, на разных уровнях  Целостность — изнутри  Критические ошибки в логах СУБД  Опционально: контрольные суммы  Возможность онлайн-валидации физической структуры
  • 6. Кто и что делает  Активность (а также псевдо-активность) юзеров  Привязка к коннектам, транзакциям, SQL-запросам  Идентификация клиентов  Привязка к процессам / потокам ОС  Фоновые задачи СУБД
  • 7. Идентификация клиентов  С какого хоста пришел запрос: host/IP, MAC, протокол  С какого приложения пришел запрос: port, PID, pathname, tag  Каким API пользовался клиент: версия клиентской либы, версия протокола
  • 8. Какая информация бывает Executor Statistics manager Log manager Рантайм- статистика Журналы
  • 9. Какая информация бывает  Снэпшот — что происходит прямо сейчас (на момент обращения), текущие значения метрик, иногда пиковые значения метрик  История — полная или частичная хронология событий мониторинга
  • 10. Какая информация бывает  Снэпшот — требует периодического опроса; может пропускать события; высокочастотный опрос может сильно нагружать СУБД  История — при злоупотреблении нагружает СУБД; быстро забивает дисковое пространство; надо четко понимать, что именно хотим знать
  • 11. Какая информация бывает  Штатные логи СУБД — история  Специальные утилиты — обычно снэпшот  SQL интерфейс — снэпшот  Через штатный API — снэпшот  Через низкоуровневую интеграцию (плагины) — возможны варианты
  • 12. Метрики  Обычно это текущие значения счетчиков  С одной стороны, считать надо много событий  Лучше перебдеть, чем недобдеть (с)  Но их детализация может стоить недешево
  • 13. Детализация метрик  Только для сессии? Или еще и для каждой транзакции? Или еще и для каждого запроса? А может, еще ниже уровнем?
  • 14.
  • 15. Пытаемся считать на разных уровнях  Вот так — очень быстро session→stats→record_backouts++;  Вот так — не очень быстро query→stats→record_backouts++; query→txn→stats→record_backouts++; query→txn→session→stats→record_backouts++; query→txn→session→db→stats→record_backouts++;
  • 16. Пытаемся считать на разных уровнях  Но некоторые уровни могут и отсутствовать, это надо проверять!  Вот так — совсем тормоза :-( if (object) object→stats→record_backouts++; // и еще три раза
  • 17. Как мы выкручиваемся // Thread specific context data struct Context : public ThreadData { Database* database; Attachment* attachment; Transaction* transaction; Request* request; RuntimeStatistics *reqStat, *traStat, *attStat, *dbbStat; }
  • 18. Как мы выкручиваемся explicit Context(ISC_STATUS* status) : ThreadData(ThreadData::tddDBB), database(NULL), attachment(NULL), transaction(NULL), request(NULL) { reqStat = traStat = attStat = dbbStat = RuntimeStatistics::getDummy(); }
  • 19. Как мы выкручиваемся void setAttachment(Attachment* val) { attachment = val; attStat = val ? &val->att_stats : RuntimeStatistics::getDummy(); } void bumpStats(const RuntimeStatistics::StatType index) { reqStat->bumpValue(index); traStat->bumpValue(index); attStat->bumpValue(index); dbbStat->bumpValue(index); }
  • 20. Детализация метрик  Глобальные счетчики — это просто, но неинтересно  Кое-что надо бы потаблично Еще для индексов А если помечтать, то... … и тут Остапа понесло (с)
  • 21. Детализация метрик  Счетчик надо сначала найти!  Хэш-таблица? Сортированный массив? Или, может, бинарное дерево?  Это все временные затраты, их надо оценивать
  • 22. Детализация метрик #if defined(REL_COUNTS_TREE) typedef Firebird::BePlusTree<RelationCounts, ULONG, Firebird::MemoryPool, RelationCounts> RelCounters; #elif defined(REL_COUNTS_PTR) typedef Firebird::PointersArray<RelationCounts, Firebird::EmptyStorage<RelationCounts>, ULONG, RelationCounts> RelCounters; #else // sorted array typedef Firebird::SortedArray<RelationCounts, Firebird::EmptyStorage<RelationCounts>, ULONG, RelationCounts> RelCounters; #endif
  • 23. Мониторинг ожиданий  I/O, блокировки разных видов  Кто, кого и на чем ждет  Интересен также контекст  Графы ожиданий, дэдлоки
  • 24. Мониторинг ожиданий  I/O, блокировки разных видов  Кто, кого и на чем ждет  Интересен также контекст  Графы ожиданий, дэдлоки  Но самое интересное — время ожидания  Однако, тут могут быть сюрпризы!
  • 25. Метрики: советы  Больше метрик, хороших и разных  Детализация стоит дорого, трижды подумайте над реализацией (и надо ли оно вам вообще)  Если накладные расходы велики — можно использовать отложенную запись  Самую тяжелую статистику имеет смысл делать опциональной
  • 26. Как выдавать данные наружу  Регулярно обновлять состояние и счетчики в общей памяти — накладные расходы, зато возможен высокочастотный мониторинг  Предоставлять состояние по запросу, метрики считать локально и предоставлять также по запросу — снэпшот слегка отстает, больше задержки при запросах к мониторингу
  • 27. Снэпшот-мониторинг в MySQL  performance_schema  Не такой уж и снэпшот  Можно включать/выключать (требуется перезапуск)  Настраивать можно «на лету»  Помимо счетчиков содержит также *_summary
  • 28. Снэпшот-мониторинг в PostgreSQL  Statistics collector  Включать/выключать можно «на лету», по группам  Динамические представления pg_stat_* и pg_locks  Обновляется периодически  Снэпшот на время жизни транзакции
  • 29. Наш опыт: снэпшот-мониторинг в Firebird  Виртуальные таблицы мониторинга  Метрики (локально) считаем всегда, время замеряем опционально  Информация собирается по запросу  Снэпшот на время жизни транзакции
  • 30. Наш опыт: снэпшот-мониторинг в Firebird  MON$DATABASE  MON$ATTACHMENTS  MON$TRANSACTIONS  MON$STATEMENTS  MON$CALL_STACK +  MON$*_STATS  MON$*_USAGE
  • 31. Наш опыт: снэпшот-мониторинг в Firebird  MON$DATABASE  MON$ATTACHMENTS  MON$TRANSACTIONS  MON$STATEMENTS  MON$CALL_STACK +  MON$*_STATS  MON$*_USAGE Считаются для каждого объекта выше
  • 32. Наш опыт: снэпшот-мониторинг в Firebird  MON$DATABASE  MON$ATTACHMENTS  MON$TRANSACTIONS  MON$STATEMENTS  MON$CALL_STACK +  MON$*_STATS  MON$*_USAGE Считаются для каждого объекта выше Агрегируются снизу вверх
  • 33. Логирование  Критические ошибки  Алерты — логические ошибки и пиковые ситуации (медленные запросы, временные файлы)  Интерактивная трассировка  Аудит — постоянное логирование
  • 34. Логирование в MySQL  Error log  General query log  Slow query log  Audit API + плагины
  • 35. Логирование в PostgreSQL  Разные варианты — stderr / syslog / eventlog / файл  Есть функционал slow query log — через log_min_duration_statement  Кастомизация логируемых запросов, умеет писать долгие блокировки, временные файлы и т.п.  Динамическая трассировка для DTrace / SystemCap (требует компиляции c --enable-dtrace)
  • 36. Наш опыт: логирование в Firebird  Trace API + плагины  Системный аудит — управляется ядром, настраивается конфигом, пишется в лог на диске (по умолчанию) с ротацией (архивированием)  Пользовательская трассировка — управляется юзером (start-pause-resume-stop), конфиг задается в рантайме, лог пишется во временные файлы и удаляется по мере вычитывания клиентом
  • 37. Наш опыт: логирование в Firebird  Везде логируем ID объектов  Большинство событий спаренные — начало и конец  По завершении можем выдавать статистику — время выполнения и детализированные метрики  Есть функционал slow query log — через time_threshold  Дополнительная кастомизация — через include/exclude фильтры (regexp)
  • 38. Наш опыт: логирование в Firebird # трассируем медленные запросы database = myslowdb { log_statement_finish = true print_perf = true time_threshold = 10000 # 10 seconds } # трассируем изменения метаданных database = mycooldb { log_statement_start = true include_filter = %(CREATE|ALTER|DROP)% }
  • 39. В реальной жизни надо сочетать  В логах — только алерты или подробно  От этого зависит частота снэпшот-мониторинга  Совсем интересно становится, если их можно связать вместе