毎日のPHP開発では、データベースのパフォーマンスの問題が最も厄介であることが多く、特に断続的なタイムアウトの問題が発生するため、開発者が迅速に見つけるのが難しくなります。幸いなことに、PHPのMySQLI拡張機能は、詳細なデータベース操作ログを記録するのに役立つ強力なツール-MySqli :: Debugを提供し、それにより遅いクエリまたは接続の問題を深く分析し、パフォーマンスのボトルネックを迅速に見つけることができます。
MySqli :: Debugは、 MySQLIクラスのメソッドであり、デバッグロギングを可能にします。このメソッドは、関連するMySQLクライアントの操作をログファイルに記録し、接続中の例外やパフォーマンスの問題、SQL実行のトラブルシューティングに役立ちます。
mysqli::debug(string $debug_options): bool
この方法は通常、データベース接続の前に呼び出され、 MySQLNDドライバーがPHPコンパイル時間で有効になることを要求し、デバッグが設定されます。
mysqli :: debugを使用するには、確認する必要があります。
PHPはmysqlndドライバーを使用します<br> phpinfo()を確認することで確認できます。
phpinfo();
mysqlndを検索してください。次の単語が表示されている場合は、次のことを意味します。
Client API library version => mysqlnd 8.x.x
PHP.ini構成を変更して、デバッグを有効にします
mysqlnd.debug = "/tmp/mysqlnd.log"
変更後、PHP-FPMまたはApacheサービスを再起動します。
PHPスクリプトで、 mysqli :: debug()を呼び出してから、データベース接続を作成し、クエリを正常に実行します。例えば:
<?php
// デバッグロギングを有効にします
mysqli::debug("d:t:o,/tmp/mysqlnd.log");
// データベース接続
$mysqli = new mysqli("localhost", "db_user", "db_pass", "db_name");
if ($mysqli->connect_errno) {
echo "接続に失敗しました: " . $mysqli->connect_error;
exit();
}
// クエリを実行します
$result = $mysqli->query("SELECT * FROM users WHERE status = 'active'");
while ($row = $result->fetch_assoc()) {
echo $row['username'] . "<br>";
}
$mysqli->close();
?>
で:
拒否可能なデバッグ
TADDタイムスタンプ
o、/tmp/mysqlnd.log出力ファイルを指定します
デバッグログは、指定した場所( /tmp/mysqlnd.logなど)に出力され、 Less 、 Tail 、またはText Editorを使用してコンテンツを表示できます。
tail -f /tmp/mysqlnd.log
一般的な分析ポイントは次のとおりです。
接続は時間がかかりますか?
クエリステートメントが繰り返し実行されるかどうか
キャッシュがヒットした場合、クエリ
遅いクエリには時間がかかります
SQLステートメントの説明分析により、インデックスを最適化する必要があるか、フルテーブルスキャンを避ける必要があるかをより正確に判断できます。
MySQLI :: Debugは豊富なクライアント情報を提供しますが、より深いスロークエリ分析にはMySQL独自のスロークエリログも必要です。
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
MySqli :: Debugのクライアントログと組み合わせたスロークエリログは、ボトルネックをすばやく見つけるために、両端からコラボレーションして分析できます。
パフォーマンスおよびセキュリティ上の理由から、開発環境またはテスト環境でデバッグを使用する必要があります。デバッグ後に閉じることを忘れないでください:
mysqli::debug(""); // シャットダウンに等しいデバッグパラメーターをクリアします
MySqli :: Debugを使用すると、PHPスクリプトとMySQLの間の相互作用プロセスを正確に記録および分析できます。これは、データベース接続の問題、断続的なタイムアウト、スロークエリ分析の処理に大きな価値があります。開発段階でこのツールを適切に使用すると、発売後に「鉱山を踏む」可能性を大幅に減らすことができます。