Help us understand the problem. What is going on with this article?

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

More than 5 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());
}

とりあえず解決したと共に肩から脱力しました。
日々精進します。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away