毎日のPHP開発では、 MySqli :: Debugは通常、データベース接続プロセスと実行の詳細を単純に表示するために使用されます。デバッグの初期段階では十分かもしれませんが、プロジェクトが徐々に複雑になると、 MySqli :: Debugのみに依存すると、パフォーマンスボトルネックまたは複雑なクエリの詳細な分析ニーズを満たすことができません。したがって、この記事では、 mysqli :: debugからより強力なデバッグツール - xdebugおよびmysqlスロークエリログにスムーズに移行する方法を説明し、それによりデータベースのデバッグ効率を体系的に改善します。
mysqli :: debug()の機能は比較的単純です。 MySQLクライアントライブラリレベルでのデバッグ情報出力のみを有効にします。これは、接続や実行などの低レベルの情報を記録するために使用されますが、:
SQL実行時間は提供されていません。
ビジネスロジックに対応するのは簡単ではありません。
出力コンテンツは乱雑で分析が困難です。
通話スタックまたはメモリの使用量は自動的に追跡できません。
サンプルコード:
mysqli::debug("d:t:o,/tmp/client.trace");
$db = new mysqli("localhost", "user", "password", "dbname");
/tmp/client.traceに出力できますが、読み取りと分析は非効率的です。
XDebugは、PHPの最も強力なデバッグエクステンションの1つであり、ブレークポイントデバッグ、機能コールトレース、パフォーマンス分析などの高度な関数を実装できます。
pecl install xdebug
次に、 php.iniを追加します:
zend_extension=xdebug
xdebug.mode=develop,trace,profile
xdebug.output_dir=/tmp
xdebug.mode =プロファイルをオンにした後、各リクエストは.cachegrindファイルを生成します。 QCachegrindやWebGrindなどのツールを使用して、データベースクエリ関数を含む分析関数実行時間を開くことができます。
$mysqli = new mysqli("localhost", "user", "password", "dbname");
$result = $mysqli->query("SELECT * FROM users WHERE email LIKE '%@m66.net'");
時間のかかる、呼び出し場所、およびQuery()のその他の情報をはっきりと見ることができます。これは、頻繁に実行されるスロークエリのトラブルシューティングに非常に適しています。
MySQLスロークエリログは、実行時間が指定されたしきい値を超えるSQLステートメントを記録するデータベースネイティブ機能であり、データベースのボトルネックの分析に最適です。
[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 (たとえば、自分で構築したツールページ)にログをアップロードすることもできます。
開発段階:Xdebugを使用して、呼び出し関係とデータベース呼び出しを表示します。
テストフェーズ:パフォーマンスサンプリングのためのXdebugプロファイリングモードをオンにします。
生産段階:MySQLスロークエリログと定期分析をオンにします。