質問
スロークエリログとはなんですか |
解答
「スロークエリログ(Slow Query Log)」とは、データベースにおいて実行に時間がかかったSQLクエリ(遅いクエリ)を記録するログです。 主にMySQLやMariaDBで使われる機能ですが、他のRDBMS(PostgreSQLなど)にも似た機能があります。 ◆ スロークエリログの目的 * 遅いクエリを特定し、パフォーマンスを改善するため * インデックス不足、不要なJOIN、大量データのスキャンなどの原因を見つける ◆ ログに記録される主な情報(MySQLの例) * 実行時間(何秒かかったか) * 実行されたSQL文 * ロック時間(テーブルをロックしていた時間) * 取得・スキャンした行数(Rows Examined) * 実行時のユーザーやホスト情報 ◆ どうやって使うの? 1. 有効化する(MySQLの例) ```sql SET GLOBAL slow_query_log = 1; SET GLOBAL long_query_time = 1; -- 1秒以上かかったクエリだけ記録 ``` 2. ログファイルの場所を確認 ```sql SHOW VARIABLES LIKE 'slow_query_log_file'; ``` 3. ログの分析 ログファイルはテキスト形式で読み取れますが、以下のようなツールで分析するのが一般的です: * `mysqldumpslow`(MySQLに付属) * `pt-query-digest`(Percona Toolkitの一部) ◆ 例(ログの内容) ``` # Time: 2025-06-07T13:45:12.234567Z # User@Host: user[user] @ localhost [] # Query_time: 3.456 Lock_time: 0.000 Rows_sent: 10 Rows_examined: 100000 SELECT * FROM users WHERE email LIKE '%@example.com'; ``` この例では、`users`テーブルからメールアドレスをあいまい検索しているクエリが3.4秒かかっていることが分かります。 インデックスが使われていない可能性があります。 ◆ 注意点 * 開発環境や本番環境で使い方が異なります。 本番で有効にするとディスクI/Oが増える可能性があるので注意が必要です。 * クエリチューニング(改善)の第一歩として非常に有効です。 ◆ 補足:PostgreSQLの場合 PostgreSQLではスロークエリログに相当する機能として、`log_min_duration_statement` という設定があります。 ```sql SET log_min_duration_statement = 1000; -- 1秒以上かかるSQLだけログ ``` |
|
|
ラベル:スロークエリログ クエリ 記録 MySQL PostgreSQL SQL SET 実行 時間 ログ 改善 スキャン GLOBAL ログファイル Like 分析 可能性 有効 slow Query Log データベース SQLクエリ MariaDB RDBMS パフォーマンス インデックス不足 JOIN 大量データ 原因 SQL文 ロック時間 テーブル ロック 取得 Rows Examined ユーザー ホスト情報 有効化 場所 show Variables テキスト形式 ツール 付属 toolkit Time UserHost chatgptに質問
【下記、広告です。クリックいただけると励みになります。】
【関連する記事】
- B-Treeインデックスをわかりやすい例で説明してください。
- PostgresSQLは他のDBと何が違いますか?
- データベースの三層スキーマ構造とは
- ボイスコッド正規化とは
- DBのVACUUMとはなんですか
- SQLのCHECK制約について
- データベースにおけるHAVING句の使い方
- データベースにおけるJOIN句の使い方をマスターしたいです。
- データベースを正規化する理由を説明してください。
- データベースにおけるGROUP BY句の使い方をマスターしたいです。
- データベースのインデックス機能がより効果を発揮するのはどのような場面ですか?
- グラフデータベースってなんぞや
- web上で無料で使えるDBはありますか。
- NoSQLとNewSQLについて
- SQLiteはどのような特徴がありますか。
- ストアドプロシージャは具体的にどういった場面で使用されますか
- SQLの実行計画をテキストで取得したい。
- DBの種類について




