Web開発では、特にMySQLデータベース操作にPHPを使用する場合、 MySQL_Close()関数がデータベース接続を閉じるために使用されます。接続を閉じるとリソースが解放される可能性がありますが、 MySQL_Close()への頻繁な呼び出しは、特に短期間で大量のリクエストを伴う高い並行シナリオで、不必要なパフォーマンスオーバーヘッドをもたらし、データベース接続の頻繁な確立と破壊をもたらし、システムの応答速度に影響を与えます。
この問題を解決するために、接続プールメカニズムは共通の最適化方法になりました。この記事では、PHP Webアプリケーションでの接続プーリングを通じてMySQL_Close()の頻繁な呼び出しを削減する方法を紹介し、システムのパフォーマンスと安定性を改善します。
データベース接続が確立されるたびに、ネットワーク通信、アイデンティティ認証、リソース割り当てなどのオーバーヘッドが含まれます。接続を閉じた後、次にリクエストするときに新しい接続が確立され、多くの時間とリソースを無駄にします。短期間で多数のリクエストが生じます。
接続は頻繁に作成され、閉じられ、CPUとメモリの負荷が増加します。
データベースサーバーは追加の圧力にさらされており、接続プールの枯渇が発生する場合があります。
ユーザーエクスペリエンスに影響を与え、応答を遅くします。
したがって、 mysql_close()呼び出しを減らし、データベース接続を合理的に再利用することが重要です。
接続プールは、一定数のデータベース接続を事前に確立するコンテナであり、これらの接続を再利用できます。アプリケーションは接続プールから接続を取得し、使用後に閉じませんが、再利用する次の要求のために接続プールへの接続を返します。
接続プーリングの利点:
接続の確立と閉鎖時間の数を減らします。
データベースサーバーの負荷を削減します。
応答速度と同時処理機能を改善します。
PHP自体の典型的なWebリクエストは「短いライフサイクル」であり、すべてのリソースは、データベース接続を含む各リクエストの後にリリースされます。これは、当然、接続プーリングメカニズムと矛盾しています。ソリューションは次のとおりです。
永続的な接続:PHPはMySQL_PConnect()関数を提供して永続的な接続を作成し、要求するたびに接続の確立と閉鎖を回避します。
ミドルウェアまたは拡張機能を使用します。PDOと接続プーリングミドルウェア、またはSwoole 、 Workerman 、その他の長い接続フレームワークを使用します。
アプリケーションレイヤー接続プーリングをシミュレート:キャッシュまたは共有メモリを使用して接続を管理します。
以下は、mysql_pconnect()を使用して単純な永続的な接続を実装し、 mysql_close()呼び出しを削減することに焦点を当てています。
<?php
// データベースに接続します,永続的な接続を使用します
$link = mysql_pconnect('m66.net', 'username', 'password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
// データベースを選択します
mysql_select_db('database_name', $link);
// クエリを実行します
$result = mysql_query('SELECT * FROM table_name', $link);
while ($row = mysql_fetch_assoc($result)) {
echo $row['column_name'] . '<br>';
}
// 知らせ:永続的な接続では、呼び出しは必要ありません mysql_close()
// mysql_close($link); // この関数は呼び出されません,接続が再利用されます
?>
上記のコードでは、 mysql_pconnect()は、スクリプトの最後に閉じられていないが、PHP管理によって再利用される永続的な接続を作成します。これにより、mysql_close()への頻繁な呼び出しと再確立の接続が回避されます。
リソースリリース:永続的な接続はパフォーマンスを改善しますが、接続が長い間データベースリソースを占有するために接続を引き起こす可能性があります。データベース接続の最大数を合理的に設定する必要があります。
互換性: MySQL_*関数は非推奨です。MySQLIまたはPDOを使用することをお勧めします。これは、永続的な接続もサポートしています。
より高度な接続プーリング:並行性要件が高いプロジェクトの場合、 Swooleなどの接続プーリングをサポートするミドルウェアまたはサーバーフレームワークを使用して、 PDOと協力して、より柔軟な接続管理を実現することをお勧めします。
例:PDOを使用した永続的な接続
<?php
$dsn = 'mysql:host=m66.net;dbname=database_name;charset=utf8';
$options = [
PDO::ATTR_PERSISTENT => true, // 永続的な接続を有効にします
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, 'username', 'password', $options);
$stmt = $pdo->query('SELECT * FROM table_name');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['column_name'] . '<br>';
}
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
接続プーリングメカニズム、特に永続的な接続テクノロジーを通じて、PHP Webアプリケーションは、 mysql_close()への頻繁な呼び出しを大幅に削減し、データベース接続の再利用を改善し、システムオーバーヘッドを削減し、パフォーマンスを強化し、処理機能を同時にすることができます。
mysql_pconnect()は永続的な接続を実装する簡単な方法ですが、実際のプロジェクトでは、 MysqliやPDOなどの最新の拡張機能を使用して、ミドルウェアまたはサーバー側のフレームワークを組み合わせて、より完全な接続プール管理を実現することをお勧めします。