Skip to content

Commit c3b7120

Browse files
GiteaBotJakobDev
andauthored
Add index to issue_user.issue_id (#27154) (#27158)
Backport #27154 by @JakobDev This fixes a performance bottleneck. It was discovered by Codeberg. Every where query on that table (which has grown big over time) uses this column, but there is no index on it. See this part of the log which was posted on Matrix: ``` 2023/09/10 00:52:01 ...rs/web/repo/issue.go:1446:ViewIssue() [W] [Slow SQL Query] UPDATE `issue_user` SET is_read=? WHERE uid=? AND issue_id=? [true x y] - 51.395434887s 2023/09/10 00:52:01 ...rs/web/repo/issue.go:1447:ViewIssue() [E] ReadBy: Error 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 2023/09/10 00:52:01 ...eb/routing/logger.go:102:func1() [I] router: completed GET /Codeberg/Community/issues/1201 for [::ffff:xxx]:0, 500 Internal Server Error in 52384.2ms @ repo/issue.go:1256(repo.ViewIssue) ``` Co-authored-by: JakobDev <jakobdev@gmx.de>
1 parent 707c69f commit c3b7120

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

models/issues/issue_user.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
type IssueUser struct {
1616
ID int64 `xorm:"pk autoincr"`
1717
UID int64 `xorm:"INDEX"` // User ID.
18-
IssueID int64
18+
IssueID int64 `xorm:"INDEX"`
1919
IsRead bool
2020
IsMentioned bool
2121
}

models/migrations/migrations.go

+2
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,8 @@ var migrations = []Migration{
534534
NewMigration("Add ScheduleID for ActionRun", v1_21.AddScheduleIDForActionRun),
535535
// v276 -> v277
536536
NewMigration("Add RemoteAddress to mirrors", v1_21.AddRemoteAddressToMirrors),
537+
// v277 -> v278
538+
NewMigration("Add Index to issue_user.issue_id", v1_21.AddIndexToIssueUserIssueID),
537539
}
538540

539541
// GetCurrentDBVersion returns the current db version

models/migrations/v1_21/v277.go

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2023 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package v1_21 //nolint
5+
6+
import (
7+
"xorm.io/xorm"
8+
)
9+
10+
func AddIndexToIssueUserIssueID(x *xorm.Engine) error {
11+
type IssueUser struct {
12+
IssueID int64 `xorm:"INDEX"`
13+
}
14+
15+
return x.Sync(new(IssueUser))
16+
}

0 commit comments

Comments
 (0)