Quantcast
Channel: Magento – Ken Nguyen
Viewing all articles
Browse latest Browse all 14

Magento Deadlock error

$
0
0

I find a frequently error when working on Mangeto sites with high volume of transactions, a big catalog (ex. >20000 products) or a lot of cron jobs updating database with direct queries.

Exception SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction

First we need to rewrite the Pdo script to our local folder so we need to download the file /lib/Zend/Db/Statement/Pdo.php

and upload to /app/code/local/Zend/Db/Statement/Pdo.php

Now edit this new file inside local and replace the function _execute in line 224 with this :

public function _execute(array $params = null)
    {
        $max_tries = 3;
        $tries = 0;
        do
        {
            $retry = false;
            try
            {
                if ($params !== null)
                {
                    return $this->_stmt->execute($params);
                } else
                {
                    return $this->_stmt->execute();
                }
            }
            catch (PDOException $e)
            {
                if ($tries < $max_tries && preg_match('/SQLSTATE\[40001\]/', $e->getMessage()))
                {
                    //Mage::log('deadlock at '.date('Y-m-d h:i:s'), null, 'deadlock.log');
                    $retry = true;
                    sleep(1);
                } else
                {
                    throw new Zend_Db_Statement_Exception($e->getMessage(), (int)$e->getCode(), $e);
                }
                $tries++;
            }
        } while ($retry);
    }

 


Viewing all articles
Browse latest Browse all 14

Trending Articles