MySqli :: Debug()は、データベース接続の問題をデバッグしたり、遅いクエリを分析するときに非常に便利なツールです。しかし、それはアプリケーションのパフォーマンスに影響しますか?これは、開発者がしばしば気にする質問です。この記事では、実際のPHPテストコードを介したMySqli :: Debug()のパフォーマンスへの影響に関する定量分析を実施します。
mysqli :: debug(string $ debug_options)は、phpのmysqli拡張機能によって提供されるデバッグ機能です。クライアントのデバッグ出力を有効にし、ファイルをログに書き込むことができます。このデバッグ情報は、多くの場合、開発やトラブルシューティングに非常に役立ちますが、ディスクの書き込みと追加のログ生成による実行効率にも影響する場合があります。
PHPバージョン:8.2
データベース:MySQL 8.0
オペレーティングシステム:Ubuntu 22.04
テスト方法:同じSQLクエリを使用し、 MySQLI :: Debug Enabledでそれぞれ10,000回実行し、それぞれ有効になっていないため、比較的時間がかかります。
<?php
$host = 'localhost';
$user = 'root';
$password = 'your_password';
$dbname = 'test_db';
// テスト関数
function test_query_performance($use_debug = false) {
global $host, $user, $password, $dbname;
if ($use_debug) {
mysqli::debug("d:t:o,/tmp/client.trace");
}
$mysqli = new mysqli($host, $user, $password, $dbname);
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$result = $mysqli->query("SELECT 1");
if (!$result) {
die("クエリに失敗しました: " . $mysqli->error);
}
}
$end = microtime(true);
$mysqli->close();
return $end - $start;
}
// 結果と出力の結果
$time_without_debug = test_query_performance(false);
echo "有効になっていません mysqli::debug 時間がかかる: " . $time_without_debug . " 2番\n";
$time_with_debug = test_query_performance(true);
echo "開ける mysqli::debug 時間がかかる: " . $time_with_debug . " 2番\n";
echo "パフォーマンスの違い: " . ($time_with_debug - $time_without_debug) . " 2番\n";
?>
有効になっていません mysqli::debug 時間がかかる: 0.75 2番
開ける mysqli::debug 時間がかかる: 2.93 2番
パフォーマンスの違い: 2.18 2番
テスト結果から判断すると、 MySqli :: Debugはクエリの時間を大幅に増加させます。 10,000件のクエリでは、デバッグ関数は約2秒の追加オーバーヘッドを追加し、パフォーマンスへの影響を無視できないことを示しています。主な理由は、デバッグが有効になった後、各データベース操作がログファイルに記録され、I/O操作が関係し、システムの負担が増加することです。
デバッグフェーズでのみ使用します: MySQLI ::デバッグは、生産環境でオフにする必要があります。
使用の条件付きログ:ログを記録する必要がある場合は、アプリケーションレイヤーログシステムを使用して、特定の例外またはスロークエリを記録することをお勧めします。
自動監視代替デバッグ:データベースの監視と分析のためにhttps://m66.net/monitoringなどのプロフェッショナルツールの使用を検討できます。
MySqli :: Debugは強力なデバッグツールですが、パフォーマンスにも大きな影響を与える可能性があります。実際のシナリオに従って、生産環境でデフォルトでオンにすることを避けるために注意して使用する必要があります。