現在の位置: ホーム> 最新記事一覧> Webアプリケーションでの接続プーリングメカニズムを介してMySQL_Close関数の頻繁な呼び出しを減らす方法は?

Webアプリケーションでの接続プーリングメカニズムを介してMySQL_Close関数の頻繁な呼び出しを減らす方法は?

M66 2025-07-20

Web開発では、特にMySQLデータベース操作にPHPを使用する場合、 MySQL_Close()関数がデータベース接続を閉じるために使用されます。接続を閉じるとリソースが解放される可能性がありますが、 MySQL_Close()への頻繁な呼び出しは、特に短期間で大量のリクエストを伴う高い並行シナリオで、不必要なパフォーマンスオーバーヘッドをもたらし、データベース接続の頻繁な確立と破壊をもたらし、システムの応答速度に影響を与えます。

この問題を解決するために、接続プールメカニズムは共通の最適化方法になりました。この記事では、PHP Webアプリケーションでの接続プーリングを通じてMySQL_Close()の頻繁な呼び出しを削減する方法を紹介し、システムのパフォーマンスと安定性を改善します。


1. mysql_closeへの頻繁な呼び出しの問題

データベース接続が確立されるたびに、ネットワーク通信、アイデンティティ認証、リソース割り当てなどのオーバーヘッドが含まれます。接続を閉じた後、次にリクエストするときに新しい接続が確立され、多くの時間とリソースを無駄にします。短期間で多数のリクエストが生じます。

  • 接続は頻繁に作成され、閉じられ、CPUとメモリの負荷が増加します。

  • データベースサーバーは追加の圧力にさらされており、接続プールの枯渇が発生する場合があります。

  • ユーザーエクスペリエンスに影響を与え、応答を遅くします。

したがって、 mysql_close()呼び出しを減らし、データベース接続を合理的に再利用することが重要です。


2。接続プールとは何ですか?

接続プールは、一定数のデータベース接続を事前に確立するコンテナであり、これらの接続を再利用できます。アプリケーションは接続プールから接続を取得し、使用後に閉じませんが、再利用する次の要求のために接続プールへの接続を返します。

接続プーリングの利点:

  • 接続の確立と閉鎖時間の数を減らします。

  • データベースサーバーの負荷を削減します。

  • 応答速度と同時処理機能を改善します。


3。PHPで接続プーリングを実装するためのアイデア

PHP自体の典型的なWebリクエストは「短いライフサイクル」であり、すべてのリソースは、データベース接続を含む各リクエストの後にリリースされます。これは、当然、接続プーリングメカニズムと矛盾しています。ソリューションは次のとおりです。

  • 永続的な接続:PHPはMySQL_PConnect()関数を提供して永続的な接続を作成し、要求するたびに接続の確立と閉鎖を回避します。

  • ミドルウェアまたは拡張機能を使用します。PDOと接続プーリングミドルウェア、またはSwooleWorkerman 、その他の長い接続フレームワークを使用します。

  • アプリケーションレイヤー接続プーリングをシミュレート:キャッシュまたは共有メモリを使用して接続を管理します。

以下は、mysql_pconnect()を使用して単純な永続的な接続を実装し、 mysql_close()呼び出しを削減することに焦点を当てています。


4. mysql_pconnect()を使用して、永続的な接続を実現します

<?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()への頻繁な呼び出しと再確立の接続が回避されます。


5。注意事項と代替案

  • リソースリリース:永続的な接続はパフォーマンスを改善しますが、接続が長い間データベースリソースを占有するために接続を引き起こす可能性があります。データベース接続の最大数を合理的に設定する必要があります。

  • 互換性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();
}
?>

6。概要

接続プーリングメカニズム、特に永続的な接続テクノロジーを通じて、PHP Webアプリケーションは、 mysql_close()への頻繁な呼び出しを大幅に削減し、データベース接続の再利用を改善し、システムオーバーヘッドを削減し、パフォーマンスを強化し、処理機能を同時にすることができます。

mysql_pconnect()は永続的な接続を実装する簡単な方法ですが、実際のプロジェクトでは、 MysqliPDOなどの最新の拡張機能を使用して、ミドルウェアまたはサーバー側のフレームワークを組み合わせて、より完全な接続プール管理を実現することをお勧めします。