Posted at

PHPフレームワークのPhalconのTransactionでハマったこと

More than 3 years have passed since last update.

Phalconで開発をしているのですが、トランザクションを使ってたらMySQLのコネクション数が一気に上限を越えたので、起こったことと解決したことを書いていきます。


問題が発生したコード

こんな感じのコードを書いていると、DBからToo many connectionsエラーが返ってきました。

try{

use Phalcon\Mvc\Model\Transaction\Manager as TransactionManager;

for($i = 0; $i < 200; $i++){
$transactionManager = new TransactionManager();
$transaction = $transactionManager->get();

// DB更新処理など

$transaction->commit();
}
} catch(Phalcon\Mvc\Model\Transaction\Failed $e) {
error_log($e->getMessage());
}

コメントでDB更新処理と書いていますが、特に処理を書いてなくてもToo many connectionsエラーとなります。


解決したコード

至極単純な話でした(^_^;)

ループの中でTransactionManagerをnewしてたのが原因でした。。

try{

use Phalcon\Mvc\Model\Transaction\Manager as TransactionManager;

// ループの外にTransactionManagerを出す
$transactionManager = new TransactionManager();
for($i = 0; $i < 200; $i++){
$transaction = $transactionManager->get();

// DB更新処理など

$transaction->commit();
}
} catch(Phalcon\Mvc\Model\Transaction\Failed $e) {
error_log($e->getMessage());
}

とりあえず解決したと共に肩から脱力しました。

日々精進します。