wpdb | close() でデータベースコネクションを適宜閉じる

WordPressのプラグイン開発等で wpdb を利用してデータベースへ接続する際、必要な処理が終わった後は適宜 close() でコネクションを閉じる必要があります。

コネクション数が増え続ける

以下のサンプルは、for ループの中で毎回コネクションを確立しているが、close() で閉じていないため2秒ごとにコネクション数が増えていってしまいます。(※現在の接続数の確認方法はコチラ

<?php
// コネクション数の増え方を確認しやすくするため for ループ毎と最後に sleep を入れています。

// wp-load.php 読み込み
require_once('/wp-load.php');


// DB接続情報
$dbi = [
    'user' => 'db_usr',
    'pass' => 'db_pass',
    'name' => 'db_name',
    'host' => 'localhost',
];


//
for ($i=0; $i<50; $i++) {
    $wpdb    = new wpdb($dbi['user'], $dbi['pass'], $dbi['name'], $dbi['host']);

    // $wpdb->flush(); // キャッシュのクリア
    // $wpdb->close(); // データベース接続を閉じます

    // 2秒スリープ
    sleep(2);
}


// 30秒スリープ
sleep(30);

コネクション数が増え続けない

forループの最後で close() でデータベースへのコネクションを閉じていますので、コネクション数が一定の数値を保ってくれます。

<?php
// コネクション数の増え方を確認しやすくするため for ループ毎と最後に sleep を入れています。

// wp-load.php 読み込み
require_once('/wp-load.php');


// DB接続情報
$dbi = [
    'user' => 'db_usr',
    'pass' => 'db_pass',
    'name' => 'db_name',
    'host' => 'localhost',
];


//
for ($i=0; $i<50; $i++) {
    $wpdb    = new wpdb($dbi['user'], $dbi['pass'], $dbi['name'], $dbi['host']);

    // $wpdb->flush(); // キャッシュのクリア
    $wpdb->close(); // データベース接続を閉じます

    // 2秒スリープ
    sleep(2);
}


// 30秒スリープ
sleep(30);

動作環境情報

"エックスサーバー" スタンダード(旧X10)
"PHP" 7.4.13
"MariaDB" 10.5
"WordPress" 6.2

関連記事

コメント

タイトルとURLをコピーしました