Логирование медленных запросов и транзакций
В 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
}
}
}
}'