DBAtlas · データベース運用アトラス

セッション/クエリをトレース(トレース/プロファイリングを有効化)

Oracle

-- For a specific session (10046 event tracing):
BEGIN
  DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => 123, serial_num => 4567, waits => TRUE, binds => TRUE);
END;
/
-- To disable: DBMS_MONITOR.SESSION_TRACE_DISABLE(123, 4567);

DBMS_MONITOR.SESSION_TRACE_ENABLE はセッションの 10046 トレースファイルを生成する。終了後は必ず無効にすること(トレースはオーバーヘッドとディスク使用を伴う)。

PostgreSQL

LOAD 'auto_explain';
SET auto_explain.log_min_duration = 0;
SET auto_explain.log_analyze = true;
-- Simple alternative: SET log_min_duration_statement = 0;

auto_explain はクエリの実行計画を、log_min_duration_statement は遅い/すべてのクエリをログファイルに書き込む。値 0 はすべてのクエリを記録するため、ログ量に注意する。

MySQL

-- performance_schema approach (recommended):
UPDATE performance_schema.setup_consumers SET ENABLED='YES' WHERE NAME LIKE 'events_statements%';
-- Legacy/simple method (being deprecated):
SET profiling = 1;
-- run the query, then:
SHOW PROFILES;

クエリのトレースは performance_schema の events_statements で行う。SET profiling の方法は古い(非推奨)が、セッション単位で手早く計測できる。

SQL Server

CREATE EVENT SESSION [trace_slow] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
  WHERE duration > 1000000)
ADD TARGET package0.event_file(SET filename=N'trace_slow.xel');
GO
ALTER EVENT SESSION [trace_slow] ON SERVER STATE = START;

Extended Events (XEvents) は最新のトレース方法。セッションを作成して START で開始し、終了後は STOP/DROP で停止する。

MongoDB

db.setProfilingLevel(2)
// 1 = slow operations only (slowms threshold), 0 = off
// Results: db.system.profile.find().sort({ ts: -1 }).limit(10)

setProfilingLevel(2) はすべての操作を system.profile コレクションに記録する。レベル 2 はオーバーヘッドを伴うため、本番環境では 1(遅いもののみ)が推奨される。

Redis

MONITOR
# Streams all commands arriving at the server in real time. Exit: Ctrl-C

MONITOR はすべてのコマンドをリアルタイムで表示するが、性能が大きく低下する。本番環境では短時間に限り慎重に使用する。代替手段: SLOWLOG GET。

Elasticsearch

GET my-index/_search
{
  "profile": true,
  "query": { "match": { "title": "elastic" } }
}
// Persistent slow query tracing: the index.search.slowlog.threshold.query.warn setting

"profile": true は単一の検索のクエリ/集計の所要時間の内訳を返す。継続的な監視には slowlog のしきい値を設定する。

DBAtlas で開く →