現在の位置: ホーム> 最新記事一覧> mysqli ::デバッグからより強力なデバッグツール(Xdebug + mysqlスロークエリログなど)への移行

mysqli ::デバッグからより強力なデバッグツール(Xdebug + mysqlスロークエリログなど)への移行

M66 2025-05-31

毎日のPHP開発では、 MySqli :: Debugは通常、データベース接続プロセスと実行の詳細を単純に表示するために使用されます。デバッグの初期段階では十分かもしれませんが、プロジェクトが徐々に複雑になると、 MySqli :: Debugのみに依存すると、パフォーマンスボトルネックまたは複雑なクエリの詳細な分析ニーズを満たすことができません。したがって、この記事では、 mysqli :: debugからより強力なデバッグツール - xdebugおよびmysqlスロークエリログにスムーズに移行する方法を説明し、それによりデータベースのデバッグ効率を体系的に改善します。

1.なぜmysqli :: debugが十分ではないのですか?

mysqli :: debug()の機能は比較的単純です。 MySQLクライアントライブラリレベルでのデバッグ情報出力のみを有効にします。これは、接続や実行などの低レベルの情報を記録するために使用されますが、:

  • SQL実行時間は提供されていません

  • ビジネスロジックに対応するのは簡単ではありません

  • 出力コンテンツは乱雑で分析が困難です

  • 通話スタックまたはメモリの使用量は自動的に追跡できません

サンプルコード:

 mysqli::debug("d:t:o,/tmp/client.trace");
$db = new mysqli("localhost", "user", "password", "dbname");

/tmp/client.traceに出力できますが、読み取りと分析は非効率的です。

2。XDEBUG:コードレベルのデバッグ +パフォーマンス分析

XDebugは、PHPの最も強力なデバッグエクステンションの1つであり、ブレークポイントデバッグ、機能コールトレース、パフォーマンス分析などの高度な関数を実装できます。

Xdebugをインストールします(例としてPHP 8を取得):

 pecl install xdebug

次に、 php.iniを追加します:

 zend_extension=xdebug
xdebug.mode=develop,trace,profile
xdebug.output_dir=/tmp

プロファイリング

xdebug.mode =プロファイルをオンにした後、各リクエストは.cachegrindファイルを生成します。 QCachegrindWebGrindなどのツールを使用して、データベースクエリ関数を含む分析関数実行時間を開くことができます。

 $mysqli = new mysqli("localhost", "user", "password", "dbname");
$result = $mysqli->query("SELECT * FROM users WHERE email LIKE '%@m66.net'");

時間のかかる、呼び出し場所、およびQuery()のその他の情報をはっきりと見ることができます。これは、頻繁に実行されるスロークエリのトラブルシューティングに非常に適しています。

3。MySQLスロークエリログ:SQL実行効率に焦点を当てる

MySQLスロークエリログは、実行時間が指定されたしきい値を超えるSQLステートメントを記録するデータベースネイティブ機能であり、データベースのボトルネックの分析に最適です。

スロークエリログを有効にします(my.cnfの例):

 [mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

セットアップ後、MySQLサービスを再起動します。

 sudo systemctl restart mysql

推奨分析ツール:

  • mysqldumpslow :コマンドラインでスロークエリ分布をすばやく表示します。

  • PT-Query-Digest :Percona Toolkitが提供する高度な分析ツール。

  • Webツール:視覚分析のためにhttps://m66.net/analyze-log (たとえば、自分で構築したツールページ)にログをアップロードすることもできます。

4.組み合わせた使用のためのベストプラクティス

  1. 開発段階:Xdebugを使用して、呼び出し関係とデータベース呼び出しを表示します。

  2. テストフェーズ:パフォーマンスサンプリングのためのXdebugプロファイリングモードをオンにします。

  3. 生産段階:MySQLスロークエリログと定期分析をオンにします。