Defect #11678
closed
MySQL locks and Redmine collapsing
Added by Petr Pospisil over 12 years ago.
Updated almost 10 years ago.
Description
Hello
Our heavily used Redmine often dies during update or create a new issue:
ActiveRecord::StatementInvalid: Mysql::Error: Lock wait timeout exceeded; try restarting transaction: SELECT `issues`.* FROM `issues` WHERE `issues`.`root_id` IS NULL ORDER BY `rgt` desc LIMIT 1 FOR UPDATE
Ruby 1.8.7, MySql 5.5.4, Redmine 2.0.3, OS FreeBSD, WebServer is Passenger. Every 5 minutes is running rake redmine:email:receive_pop3.
No errors in production.log.
It is imposible to simulate this behaviour, but it occurs if more than 5-10 peoples are working. We had no problems on older Redmine < 2.0.
It's frustrating...
Files
I should you provide more information, but i dont know which... I think the hint is in upgrade Redmine from 1.9.x to 2.0.3. Others systems are same.
deleting issue: ActiveRecord::StatementInvalid: Mysql::Error: Lock wait timeout exceeded; try restarting transaction: SELECT id FROM `issues` WHERE (`lft` >= 1) FOR UPDATE
Petr Pospisil wrote:
I should you provide more information, but i dont know which...
Told you, blocking transactions. Because the SQL you've been writing down here is the blocked one, not the blocking one.
Try to execute a SHOW ENGINE INNODB STATUS\G
as soon as the issue occurs again?
SHOW ENGINE INNODB STATUS attached
Added to database.yml:
pool: 20
wait_timeout: 30
Petr Pospisil wrote:
SHOW ENGINE INNODB STATUS attached
Not sure but you might have to create a innodb_lock_monitor
table teporarily to get lock information by issuing the SHOW ENGINE INNODB STATUS
command.
As I said, I'm not a MySQL expert.
You can identify long running requests:
BTW, by default there should not be such "FOR UPDATE" part at the end of statement unless specified in code and there's no such thing.
Could that be a tuned parameter or a plugin behavior?
Nobody uses FOR UPDATE statement. But the problem seems to be solved. We bought better server and we changed ruby to 1.9.3... :o)
Petr Pospisil wrote:
Nobody uses FOR UPDATE statement. But the problem seems to be solved. We bought better server and we changed ruby to 1.9.3... :o)
Did you change adapter from mysql
to mysql2
too?
Of course. The original adapter mysql is not compatible with ruby 1.9.3.
There are other benefits - Rails 3.x.y is much faster with new Ruby. E.g. /issues - up to 4 times!
(And FreeBSD were replaced by Debian)
Petr Pospisil wrote:
Of course. The original adapter mysql is not compatible with ruby 1.9.3.
And do you still have FOR UPDATE
clause appended to the end of the SELECT
statement?
Nop. As I wrote earlier. After upgrading HW and migrating to mysql2 and ruby 193 the locks not occured yet.
related to Defect #8143 Problem to update subtask.
I am also having the same issue - it is caused with large parent-child hierarchies and the consequent cascading updates of status, priority and other checks.
Environment:
Redmine version 2.6.0.stable
Ruby version 1.9.3-p484 (2013-11-22) [x86_64-linux]
Rails version 3.2.19
Environment production
Database adapter Mysql2
- Status changed from New to Closed
- Resolution set to Duplicate
- Is duplicate of Defect #6579: Tree hierachy being currupted on multiple submissions of an issue added
Also available in: Atom
PDF