Логирование медленных запросов и транзакций
В Reindexer реализован механизм логирования медленных запросов и транзакций.
Логирование настраивается отдельно для SELECT, UPDATE и DELETE запросов, транзакций.
Управлять настройками логирования можно с помощью HTTP-запросов к системному неймспейсу #config (примеры запросов — ниже) или через графический интерфейс Reindexer Face (подробнее — в разделе «Конфигурирование баз данных и неймспейсов»).
Настройка логирования медленных SELECT запросов
Настройки логирования медленных SELECT запросов хранятся в системном неймспейсе #config, в следующих полях объекта profiling.long_queries_logging.select:
threshold_us(integer) — время выполненияSELECTзапроса в микросекундах, при превышении которого он будет записан в corelog. При отрицательном значении параметра логирование отключено.normalized(boolean) — флаг, включающий логированиеSELECTзапросов в нормализованном виде.
Запросы в нормализованном виде — это запросы без конкретных значений в условиях. При логировании медленных запросов нормализованный вид используется чтобы исключить попадание конкретных значений в логи (например, по соображениям безопасности).
Медленные SELECT запросы записываются в corelog с префиксом [slowlog] и уровнем логирования warning.
Пример:
[W28/09 09:05:05.763 21] [slowlog] Long execution query: sql - SELECT media_items.id, media_items.name, favorites.id, favorites.content_id FROM media_items LEFT JOIN favorites ON media_items.id = favorites.content_id; (168us)
Пример изменения настроек логирования медленных SELECT запросов
curl --location --request PUT 'http://127.0.0.1:7000/api/v1/db/new/namespaces/%23config/items' \
--header 'Content-Type: application/json' \
--data '{
"type": "profiling",
"profiling": {
"queriesperfstats": false,
"queries_threshold_us": 10,
"perfstats": false,
"memstats": true,
"activitystats": false,
"long_queries_logging": {
"select": {
"threshold_us": 2,
"normalized": true
},
"update_delete": {
"threshold_us": -1,
"normalized": false
},
"transaction": {
"threshold_us": -1,
"avg_step_threshold_us": -1
}
}
}
}'
Настройка логирования медленных UPDATE и DELETE запросов
Настройки логирования медленных UPDATE и DELETE запросов хранятся в системном неймспейсе #config, в следующих полях объекта profiling.long_queries_logging.update_delete:
threshold_us(integer) — время выполненияUPDATEилиDELETEзапроса в микросекундах, при превышении которого он будет записан в corelog. При отрицательном значении параметра логирование отключено.normalized(boolean) — флаг, включающий логированиеUPDATEилиDELETEзапросов в нормализованном виде.
Запросы в нормализованном виде — это запросы без конкретных значений в условиях. При логировании медленных запросов нормализованный вид используется чтобы исключить попадание конкретных значений в логи (например, по соображениям безопасности).
Медленные UPDATE и DELETE запросы записываются в corelog с префиксом [slowlog] и уровнем логирования warning.
Также для них возвращаются параметры:
Namespace— время ожидания блокировки неймспейса,Data flush— время записи данных в асинхронный сторадж.
Пример:
[W28/09 12:33:17.153 13] [slowlog] Long execution query: sql - DELETE FROM media_items WHERE id > 1; (2736us)
[slowlog] Waiting for a mutex lock:
Namespace: 13us
Data flush: 11us
Пример изменения настроек логирования медленных UPDATE и DELETE запросов
curl --location --request PUT 'http://127.0.0.1:7000/api/v1/db/new/namespaces/%23config/items' \
--header 'Content-Type: application/json' \
--data '{
"type": "profiling",
"profiling": {
"queriesperfstats": false,
"queries_threshold_us": 10,
"perfstats": false,
"memstats": true,
"activitystats": false,
"long_queries_logging": {
"select": {
"threshold_us": -1,
"normalized": false
},
"update_delete": {
"threshold_us": 1,
"normalized": true
},
"transaction": {
"threshold_us": -1,
"avg_step_threshold_us": -1
}
}
}
}'
Настройка логирования медленных транзакций
Настройки логирования медленных транзакций хранятся в системном неймспейсе #config, в следующих полях объекта profiling.long_queries_logging.transaction:
threshold_us(integer) — время выполнения транзакции в микросекундах, при превышении которого она будет записана в corelog. При отрицательном значении параметра логирование отключено.avg_step_threshold_us(integer) — среднее время выполнения шага транзакции в микросекундах, при превышении которого транзакция будет записана в corelog. Рассчитывается какобщее время транзакции/число шагов. При отрицательном значении параметра логирование по этому параметру отключено.
Медленные транзакции записываются в corelog с префиксом [slowlog] и уровнем логирования warning.
Также для них возвращаются параметры/сведения:
- О копировании неймспейса с атомарной подменой. Если копирование производилось —
was copied, если нет —was not copied. Namespace— время ожидания блокировки неймспейса,Data flush— время записи данных в асинхронный сторадж.
Пример:
[W29/09 06:20:48.044 60] [slowlog] Long tx apply: namespace - favorites; was not copied; 2 steps; Exceeded the average step execution time limit (200us); Exceeded the total time limit (401us);
[slowlog] Waiting for a mutex lock:
Namespace: 10us
Data flush: 8us
Пример изменения настроек логирования медленных транзакций
curl --location --request PUT 'http://127.0.0.1:7000/api/v1/db/new/namespaces/%23config/items' \
--header 'Content-Type: application/json' \
--data '{
"type": "profiling",
"profiling": {
"queriesperfstats": false,
"queries_threshold_us": 10,
"perfstats": false,
"memstats": true,
"activitystats": false,
"long_queries_logging": {
"select": {
"threshold_us": -1,
"normalized": false
},
"update_delete": {
"threshold_us": -1,
"normalized": false
},
"transaction": {
"threshold_us": 1,
"avg_step_threshold_us": 1
}
}
}
}'