Vote #74839
完了Deadlock when delete issues in same time on multiple sessions
0%
説明
Dear team,
When we have multiple sessions try to delete issues in same times, we encounter this internal error:
ActiveRecord::StatementInvalid (Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction: SELECT
issues
.* FROMissues
WHEREissues
.root_id
= 145786 AND (issues
.lft
>= 1 ANDissues
.rgt
<= 2) AND (issues
.id != 145786) ORDER BYissues
.lft
):
The trace:
Started DELETE "/issues/17669" for 127.0.0.1 at 2014-01-23 16:34:09 +0700
Processing by IssuesController#destroy as HTML
Parameters: {"authenticity_token"=>"tlayCB7PIEzTrauenLr7g4HoeWkjz6S43YG6tZBRQE0=", "id"=>"17669"}
(3.0ms) SELECT MAX(settings
.updated_on
) AS max_id FROMsettings
User Load (3.0ms) SELECTusers
.* FROMusers
WHEREusers
.type
IN ('User', 'AnonymousUser') ANDusers
.status
= 1 ANDusers
.id
= 1454 LIMIT 1
Current user: ttanthanh (id=1454)
Issue Load (3.0ms) SELECTissues
.* FROMissues
WHEREissues
.id
= 17669
Project Load (2.0ms) SELECTprojects
.* FROMprojects
WHEREprojects
.id
= 10 LIMIT 1
EnabledModule Load (3.0ms) SELECT name FROMenabled_modules
WHEREenabled_modules
.project_id
= 10
(2.0ms) SELECT SUM(time_entries
.hours
) AS sum_id FROMtime_entries
WHERE (issue_id IN (17669))
Issue Load (4.0ms) SELECTissues
.* FROMissues
WHEREissues
.id
= 17669 LIMIT 1
(2.0ms) BEGIN
Journal Load (3.0ms) SELECTjournals
.* FROMjournals
WHEREjournals
.journalized_id
= 17669 ANDjournals
.journalized_type
= 'Issue'
SQL (2.0ms) DELETE FROMjournal_details
WHEREjournal_details
.journal_id
= 343792
SQL (3.0ms) DELETE FROMjournals
WHEREjournals
.id
= 343792
SQL (2.0ms) DELETE FROMtime_entries
WHEREtime_entries
.issue_id
= 17669
SQL (2.0ms) DELETE FROMissue_relations
WHEREissue_relations
.issue_from_id
= 17669
SQL (3.0ms) DELETE FROMissue_relations
WHEREissue_relations
.issue_to_id
= 17669
Issue Load (2.0ms) SELECTlft
,rgt
,parent_id
FROMissues
WHEREissues
.id
= 17669 LIMIT 1 FOR UPDATE
Issue Load (725.0ms) SELECT id FROMissues
WHERE (lft
>= 1) FOR UPDATE
Issue Load (3.0ms) SELECTissues
.* FROMissues
WHEREissues
.root_id
= 17669 AND (issues
.lft
>= 1 ANDissues
.rgt
<= 2) AND (issues
.id != 17669) ORDER BYissues
.lft
SQL (3.0ms) UPDATEissues
SETlft
= (lft
- 2) WHEREissues
.root_id
= 17669 AND (lft
> 2) ORDER BYissues
.lft
SQL (2.0ms) UPDATEissues
SETrgt
= (rgt
- 2) WHEREissues
.root_id
= 17669 AND (rgt
> 2) ORDER BYissues
.lft
Issue Load (4.0ms) SELECTissues
.* FROMissues
WHEREissues
.id
= 17669 LIMIT 1
Attachment Load (3.0ms) SELECTattachments
.* FROMattachments
WHEREattachments
.container_id
= 17669 ANDattachments
.container_type
= 'Issue' ORDER BY attachments.created_on ASC, attachments.id ASC
SQL (5.0ms) DELETE FROMcustom_values
WHEREcustom_values
.customized_id
= 17669 ANDcustom_values
.customized_type
= 'Issue'
SQL (2.0ms) DELETE FROMwatchers
WHEREwatchers
.watchable_id
= 17669 ANDwatchers
.watchable_type
= 'Issue'
Changeset Load (10.0ms) SELECTchangesets
.* FROMchangesets
INNER JOINchangesets_issues
ONchangesets
.id
=changesets_issues
.changeset_id
WHEREchangesets_issues
.issue_id
= 17669 ORDER BY changesets.committed_on ASC, changesets.id ASC
SQL (3.0ms) DELETE FROMissues
WHERE (issues
.id
= 17669 ANDissues
.lock_version
= 1)
(9.0ms) COMMIT
Redirected to http://localhost:3001/projects/demoproject/issues
Completed 302 Found in 36813ms (ActiveRecord: 808.0ms)
We have two lines may be cause deadlock (I guess that)
Issue Load (725.0ms) SELECT id FROM
issues
WHERE (lft
>= 1) FOR UPDATE
This query lock table and cost too much time.Issue Load (3.0ms) SELECT
issues
.* FROMissues
WHEREissues
.root_id
= 17669 AND (issues
.lft
>= 1 ANDissues
.rgt
<= 2) AND (issues
.id != 17669) ORDER BYissues
.lft
And this query always return empty result.
Thanks for your support.
journals
This was fixed in r12445 for 2.5.0. Only the deleted issues are now locked:
<pre>
SELECT id FROM `issues` WHERE `issues`.`root_id` = 13167 AND (`lft` >= 1) ORDER BY `issues`.`lft` FOR UPDATE
</pre>
instead of:
<pre>
SELECT id FROM `issues` WHERE (`lft` >= 1) FOR UPDATE
</pre>
--------------------------------------------------------------------------------