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
コメント