Логирование медленных запросов и транзакций

В 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
      }
    }
  }
}'