PHPでは、 Connect_ErrnoはMySQLI拡張機能によって提供されるプロパティで、MySQLデータベースに接続するときに発生するエラーの数を取得します。 mysqli_connect()またはmysqli :: __ construct()を呼び出すと、データベース接続を確立すると、 connect_errnoは値を自動的に割り当てます。接続が成功した場合、 connect_errnoの値は0になります。接続エラーが発生した場合、 Connect_Errnoは対応するエラーコードを返します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"接続に失敗しました: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"データベースに正常に接続します!"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
上記のコードでは、データベース接続が成功した場合、 $ mysqli-> connect_errnoは0になります。接続が失敗した場合、 $ mysqli-> connect_errnoは特定のエラーコードを返します。
Connect_Errnoは、データベース接続プロセス中に問題が発生した場合にのみ情報を提供することに注意してください。
データベースサーバーは到達できません
間違ったユーザー名またはパスワード
データベースは存在しません
ただし、 Connect_Errnoは、データベースの負荷が高すぎるかどうかを直接判断するのに直接役立ちません。データベースの負荷は、通常、遅いクエリ応答時間、接続プールの枯渇、または過度のサーバーリソース(CPU、メモリなど)として現れます。これらのケースは、 connect_errnoで検出することはできません。
データベースの負荷を監視するには、次のような他の手段を使用する必要があります。
MySQLは、データベースの負荷ステータスを監視するのに役立つシステム変数とコマンドを提供します。
表示ステータス:このコマンドは、接続の数、クエリ時間、スロークエリなどを含むMySQLの実行ステータスを表示できます。
変数の表示:接続の最大数、メモリ使用量などを含むMySQL構成のパラメーターを確認します。
show processlist :現在実行中のクエリを表示します。これは、過度のシステム負荷を引き起こす長期にわたるクエリがあるかどうかを判断するのに役立ちます。
<span><span><span class="hljs-keyword">SHOW</span></span><span> STATUS </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'Threads_connected'</span></span><span>;
</span><span><span class="hljs-keyword">SHOW</span></span><span> STATUS </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'Questions'</span></span><span>;
</span><span><span class="hljs-keyword">SHOW</span></span><span> PROCESSLIST;
</span></span>
これらのコマンドは、データベース接続の数とクエリ条件の数をリアルタイムで監視するのに役立ち、それによりデータベースが過負荷になっているかどうかを判断します。
Prometheus 、 Grafana 、 Percona Monitoring and Management(PMM)などのプロフェッショナルデータベース監視ツールを使用して、データベースの負荷ステータスを詳細に分析します。これらのツールは、詳細なチャートとアラーム機能を提供することができ、データベースの負荷が高すぎる時期を知ることができ、タイムリーな測定値をとることができます。
遅いクエリログを有効にすると、どのクエリが多くの時間を消費するかを特定するのに役立ちます。これにより、データベースの過負荷が発生する可能性があります。次のMySQL構成で、スロークエリログを有効にすることができます。
<span><span><span class="hljs-keyword">SET</span></span><span> </span><span><span class="hljs-keyword">GLOBAL</span></span><span> slow_query_log </span><span><span class="hljs-operator">=</span></span><span> </span><span><span class="hljs-string">'ON'</span></span><span>;
</span><span><span class="hljs-keyword">SET</span></span><span> </span><span><span class="hljs-keyword">GLOBAL</span></span><span> long_query_time </span><span><span class="hljs-operator">=</span></span><span> </span><span><span class="hljs-number">2</span></span><span>; </span><span><span class="hljs-comment">-- クエリを超える設定 2 秒単位のクエリは遅いクエリです</span></span><span>
</span></span>
遅いクエリログは、データベースでの効率の低いクエリを発見するのに役立ち、これらのクエリまたはデータベース構造を最適化し、データベースの負荷を削減できます。
監視がデータベースの負荷が高すぎることがわかった場合、問題を最適化および解決するために次の方法をとることができます。
スロークエリログを分析して、クエリステートメントの効率を確保し、複雑で時間のかかるSQLクエリを最適化します。たとえば、適切なインデックスを使用して、完全なテーブルスキャンを回避し、ページングクエリを使用してクエリごとのデータの量を減らします。
データベース接続の数が高い負荷の理由である場合、データベースが要求されるたびに、データベース接続プールのサイズを大きくするために接続オーバーヘッドを減らすことを検討できます。
高い並行性の場合、データベースの読み取りと書き込み分離を介して、読み取りリクエストと書き込み要求を異なるデータベースサーバーに割り当てることができ、それにより単一のデータベースサーバーの負荷が削減されます。
非常に大きなデータベースの場合、データベースの水平分割を検討し、データを複数のデータベースインスタンスに散乱させ、負荷をさらに共有できます。