DataBase / MySQL / レポート取得ガイド
sys スキーマ(SQL)による取得とセクション定義
sys スキーマは Performance Schema の生データをわかりやすく加工した ビューとプロシージャの集合体です(MySQL 5.7.7 以降に標準搭載)。 Oracle AWR の各セクションに対応するビューが多数あり、 DBA が素早くパフォーマンスを把握するための最も手軽な入口です。
1. sys スキーマの概要
sys スキーマのビューには2種類の命名パターンがあります。
x$ プレフィックスなし = 人が読みやすい文字列(例: "3.46 s")、
x$ プレフィックスあり = 数値(ピコ秒など)でプログラム処理に適しています。
AWR セクション別 sys スキーマビュー早見表
- SQL Statistics:
statement_analysis,statements_with_full_table_scans,statements_with_sorting,statements_with_temp_tables - Top Timed Events:
wait_classes_global_by_avg_latency,waits_global_by_latency - File I/O:
io_global_by_file_by_latency,io_global_by_file_by_bytes - Lock / Blocking:
innodb_lock_waits,schema_table_lock_waits - Segment Statistics:
schema_table_statistics,schema_index_statistics - Memory:
memory_global_by_current_bytes
2. SQL 統計ビュー(AWR: SQL Statistics 相当)
ビュー: sys.statement_analysis
-- 合計実行時間の多い SQL 上位20
SELECT
query,
db,
exec_count,
total_latency,
avg_latency,
max_latency,
rows_examined_avg,
rows_sent_avg,
tmp_tables,
tmp_disk_tables,
full_scans
FROM sys.statement_analysis
ORDER BY total_latency DESC
LIMIT 20;
| 列名 | 説明 | Oracle AWR 対応 |
|---|---|---|
| query | 正規化されたクエリテキスト(リテラルは ? に置換)。 |
SQL Text |
| exec_count | 実行回数の合計。 | Executions |
| total_latency | 合計実行時間(人が読める形式、例: "3.46 s")。 | Elapsed Time (s) |
| avg_latency | 平均実行時間。 | Elapsed Time per Exec |
| rows_examined_avg | 1回あたりの平均スキャン行数。大きいほど非効率なアクセスパスの可能性。 | Buffer Gets per Exec |
| full_scans | フルテーブルスキャンが発生した実行回数。 | —(Full Scan 相当) |
| tmp_disk_tables | ディスク一時テーブルが作成された実行回数。 | —(Temp Segment 相当) |
フルスキャンを含む SQL
SELECT query, db, exec_count, total_latency, no_index_used_count, no_good_index_used_count
FROM sys.statements_with_full_table_scans
ORDER BY total_latency DESC
LIMIT 20;
ソートを含む SQL(一時ファイル使用)
SELECT query, db, exec_count, total_latency, sort_merge_passes, sort_rows
FROM sys.statements_with_sorting
ORDER BY sort_merge_passes DESC
LIMIT 20;
3. 待機イベントビュー(AWR: Top Timed Events 相当)
ビュー: sys.wait_classes_global_by_avg_latency
-- 待機クラス別(平均待機時間順)
SELECT event_class, total_waited, avg_latency, max_latency, total_waits
FROM sys.wait_classes_global_by_avg_latency
ORDER BY total_waited DESC;
-- 個別待機イベント(合計待機時間順)
SELECT events, total_waited, avg_latency, max_latency, total_waits
FROM sys.waits_global_by_latency
ORDER BY total_waited DESC
LIMIT 20;
| 列名 | 説明 | Oracle AWR 対応 |
|---|---|---|
| event_class | 待機クラス(例: wait/io・wait/lock・wait/synch)。 |
Wait Class |
| total_waited | そのクラスの合計待機時間(人が読める形式)。 | Total Wait Time |
| avg_latency | 平均待機時間。 | Avg Wait |
| total_waits | 待機発生回数。 | Waits |
4. I/O 統計ビュー(AWR: File I/O 相当)
ビュー: sys.io_global_by_file_by_latency
-- 待機時間の多いファイル順
SELECT file, total_latency, count_read, read_latency, count_write, write_latency
FROM sys.io_global_by_file_by_latency
ORDER BY total_latency DESC
LIMIT 20;
-- 転送バイト数の多いファイル順
SELECT file, total, read, write, misc
FROM sys.io_global_by_file_by_bytes
ORDER BY total DESC
LIMIT 20;
5. ロック・ブロッキング統計
ビュー: sys.innodb_lock_waits
-- 現在のロック待機状況
SELECT
wait_started,
wait_age,
waiting_trx_rows_locked,
waiting_query,
blocking_pid,
blocking_query,
blocking_trx_rows_locked,
blocking_trx_rows_modified
FROM sys.innodb_lock_waits;
-- スキーマ・テーブルロック待機
SELECT
waiting_pid,
waiting_query,
blocking_pid,
blocking_query,
wait_age,
waiting_lock_type
FROM sys.schema_table_lock_waits;
6. テーブル・インデックス統計(AWR: Segment 相当)
ビュー: sys.schema_table_statistics
-- テーブル別の合計 I/O 待機時間
SELECT
table_schema,
table_name,
total_latency,
rows_fetched,
fetch_latency,
rows_inserted,
rows_updated,
rows_deleted
FROM sys.schema_table_statistics
ORDER BY total_latency DESC
LIMIT 20;
-- インデックス別の使用状況
SELECT
table_schema,
table_name,
index_name,
rows_selected,
select_latency,
rows_inserted,
rows_updated,
rows_deleted
FROM sys.schema_index_statistics
ORDER BY select_latency DESC
LIMIT 20;
-- インデックスが使われていないテーブル(AWR Segment I/O 分析に対応)
SELECT * FROM sys.schema_unused_indexes
WHERE object_schema NOT IN ('performance_schema', 'sys', 'information_schema', 'mysql');
7. メモリ統計
ビュー: sys.memory_global_by_current_bytes
-- コンポーネント別現在使用メモリ
SELECT event_name, current_count, current_alloc, current_avg_alloc, high_alloc
FROM sys.memory_global_by_current_bytes
ORDER BY current_alloc DESC
LIMIT 20;
-- ユーザー別メモリ使用量
SELECT user, current_allocated, total_allocated
FROM sys.memory_by_user_by_current_bytes
ORDER BY current_allocated DESC;
8. sys スキーマのプロシージャ
-- Performance Schema 統計をすべてリセット
CALL sys.ps_truncate_all_tables(FALSE); -- FALSE=確認なし
-- 現在実行中の長時間クエリを表示
CALL sys.ps_check_lost_instrumentation();
-- 特定ステートメントの実行計画を取得(MySQL 8.0+)
CALL sys.ps_trace_statement_digest('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 10, 0.1, FALSE, FALSE);
-- スレッドの詳細情報
SELECT * FROM sys.session WHERE command != 'Sleep';
✅ sys スキーマは読み取り専用で使う
sys スキーマのビューは Performance Schema を参照しており、 参照コスト自体は軽量です。ただし
sys スキーマのビューは Performance Schema を参照しており、 参照コスト自体は軽量です。ただし
ps_truncate_all_tables のような
統計リセット系プロシージャは本番環境では慎重に使用してください。