ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
MySQL のクエリログ
一般クエリログ(全 SQL 記録)
-- 現在の状態確認
SHOW VARIABLES LIKE 'general_log%';
-- general_log | OFF
-- general_log_file | /var/lib/mysql/host.log
-- 動的に有効化(再起動不要)
SET GLOBAL general_log_file = '/tmp/mysql_query.log';
SET GLOBAL general_log = 'ON';
-- 確認
SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 10;
-- ログ出力先をテーブルに(FILE / TABLE / NONE)
SET GLOBAL log_output = 'TABLE';
-- 無効化
SET GLOBAL general_log = 'OFF';
パフォーマンスに影響するので本番では一時的にのみ使用。
スロークエリログ
-- 状態確認
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';
-- 1 秒以上かかるクエリを記録
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
-- インデックス未使用も記録
SET GLOBAL log_queries_not_using_indexes = 'ON';
-- 確認
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
my.cnf で恒久設定
# /etc/mysql/my.cnf or /etc/my.cnf
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
# 再起動が必要
# systemctl restart mysql
PostgreSQL のクエリログ
# postgresql.conf
log_destination = 'stderr'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
# 何をログに出すか
log_statement = 'all' # all / ddl / mod / none
log_min_duration_statement = 1000 # ms。1秒以上のクエリ
# 詳細フォーマット
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '
log_duration = on # 実行時間も記録
# 反映
# SELECT pg_reload_conf();
セッション単位での有効化
-- セッション中だけ詳細ログ
SET log_statement = 'all';
SET log_min_duration_statement = 0;
-- pg_stat_statements 拡張で集計
CREATE EXTENSION pg_stat_statements;
SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
Laravel での SQL ログ
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
// 方法1: enableQueryLog + getQueryLog
DB::enableQueryLog();
User::where('id', 1)->get();
$queries = DB::getQueryLog();
// [['query' => 'select * from users where id = ?', 'bindings' => [1], 'time' => 1.23]]
// 方法2: DB::listen でリアルタイムログ
DB::listen(function ($query) {
Log::info('[SQL] ' . $query->sql, [
'bindings' => $query->bindings,
'time_ms' => $query->time,
]);
});
// AppServiceProvider::boot() で常時有効化(開発環境のみ)
public function boot(): void
{
if (app()->environment('local')) {
DB::listen(function ($q) {
$sql = vsprintf(str_replace('?', '%s', $q->sql), array_map(
fn($v) => is_string($v) ? "'$v'" : $v,
$q->bindings
));
Log::channel('sql')->info("[{$q->time}ms] $sql");
});
}
}
Telescope / Debugbar 利用
# Laravel Telescope(公式デバッグツール)
composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrate
# → /telescope で全 SQL 確認可能
# Laravel Debugbar(画面下に表示)
composer require barryvdh/laravel-debugbar --dev
# .env で APP_DEBUG=true なら自動表示
Spring Boot / Hibernate での SQL ログ
# application.yml
spring:
jpa:
show-sql: true # 標準出力に SQL
properties:
hibernate:
format_sql: true # 整形
use_sql_comments: true # JPQL コメント付き
logging:
level:
org.hibernate.SQL: DEBUG # SQL 本体
org.hibernate.orm.jdbc.bind: TRACE # バインドパラメータ (Hibernate 6+)
org.hibernate.type.descriptor.sql.BasicBinder: TRACE # バインド (Hibernate 5)
org.springframework.jdbc.core.JdbcTemplate: DEBUG # Spring JDBC
org.springframework.jdbc.core.StatementCreatorUtils: TRACE # JDBC バインド
P6Spy で更に詳細
p6spy
p6spy
3.9.1
# application.properties
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/mydb
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
Node.js (Sequelize / Prisma / TypeORM)
// Sequelize
const sequelize = new Sequelize(uri, {
logging: console.log, // 全 SQL を console に
logging: (sql, time) => logger.debug({ sql, time }),
});
// TypeORM
new DataSource({
type: 'mysql',
logging: ['query', 'error', 'schema'],
logger: 'advanced-console',
});
// Prisma (schema.prisma で datasource 設定後)
const prisma = new PrismaClient({
log: [{ emit: 'event', level: 'query' }],
});
prisma.$on('query', (e) => {
console.log('Query: ' + e.query);
console.log('Duration: ' + e.duration + 'ms');
});
本番環境での注意
- 全クエリログはI/O が増えて性能劣化、本番では一時的に or スロークエリのみ
- 個人情報(メール / パスワードハッシュ)がログに乗る可能性 → アクセス権限管理を厳格に
- ログローテーションを設定(
logrotate等)してディスク満杯を防ぐ - 本番で詳細ログを取るなら pg_stat_statements / performance_schema のような集計型がベター
FAQ
Q: ORM のログでバインド変数が ? のままで実値が見えない
A: フレームワーク別に詳細ログレベルが用意されています(Hibernate: BasicBinder=TRACE、Laravel: DB::listen で bindings を取れる)。
Q: クエリの実行計画も見たい
A: EXPLAIN SELECT ...(MySQL/PostgreSQL)。本番遅延調査には必須です。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- 環境構築とプロジェクト/アプリの作成
- MVC(MVT)のそれぞれの使い方と説明
- データベースへの接続と操作
- Django Administration
- git管理
- エラー一覧
- バージョンの確認方法
- ログ出力方法
- SQLのログ出力方法
- ログのローテート設定
- settings.pyの定数にアクセスする方法
- 本番環境へのインストールとアプリのデプロイ(apache編)
- 本番環境へのインストールとアプリのデプロイ(nginx編)
- djangoアプリの本番の開始URLを変更する
- 静的(static)ファイルの置き場所と読み込み(画像、css、js )
- CSRFトークンをAjaxで使用する方法
- ajaxの使用例(POST編)
- ファイルのアップロードとファイルの名前
- クイックスタート/チュートリアル
- ログイン機能
- テンプレート側のログイン判定
- ビュー側のログイン判定
- 管理者ユーザーの作成/判定と管理画面
- モデルのjson化とレスポンス
- runserverでポートを指定する方法
- cronによるバッチ実行
- テンプレートで利用する共通のcontextを定義する方法
- プログラムが本番サーバーで反映されない場合の対処法
- APIの作成
- cron用コマンド・ファイルの作成
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?