mirror of
https://github.com/go-gitea/gitea.git
synced 2026-03-11 17:46:29 -05:00
Start page: "slow" response time #9502
Closed
opened 2025-11-02 08:40:52 -06:00 by GiteaMirror
·
33 comments
No Branch/Tag Specified
main
release/v1.25
release/v1.24
release/v1.23
release/v1.22
release/v1.21
release/v1.20
release/v1.19
release/v1.18
release/v1.17
release/v1.16
release/v1.15
release/v1.14
release/v1.13
release/v1.12
release/v1.11
release/v1.10
release/v1.9
release/v1.8
v1.25.3
v1.25.2
v1.25.1
v1.25.0
v1.24.7
v1.25.0-rc0
v1.26.0-dev
v1.24.6
v1.24.5
v1.24.4
v1.24.3
v1.24.2
v1.24.1
v1.24.0
v1.23.8
v1.24.0-rc0
v1.25.0-dev
v1.23.7
v1.23.6
v1.23.5
v1.23.4
v1.23.3
v1.23.2
v1.23.1
v1.23.0
v1.23.0-rc0
v1.24.0-dev
v1.22.6
v1.22.5
v1.22.4
v1.22.3
v1.22.2
v1.22.1
v1.22.0
v1.23.0-dev
v1.22.0-rc1
v1.21.11
v1.22.0-rc0
v1.21.10
v1.21.9
v1.21.8
v1.21.7
v1.21.6
v1.21.5
v1.21.4
v1.21.3
v1.21.2
v1.20.6
v1.21.1
v1.21.0
v1.21.0-rc2
v1.21.0-rc1
v1.20.5
v1.22.0-dev
v1.21.0-rc0
v1.20.4
v1.20.3
v1.20.2
v1.20.1
v1.20.0
v1.19.4
v1.21.0-dev
v1.20.0-rc2
v1.20.0-rc1
v1.20.0-rc0
v1.19.3
v1.19.2
v1.19.1
v1.19.0
v1.19.0-rc1
v1.20.0-dev
v1.19.0-rc0
v1.18.5
v1.18.4
v1.18.3
v1.18.2
v1.18.1
v1.18.0
v1.17.4
v1.18.0-rc1
v1.19.0-dev
v1.18.0-rc0
v1.17.3
v1.17.2
v1.17.1
v1.17.0
v1.17.0-rc2
v1.16.9
v1.17.0-rc1
v1.18.0-dev
v1.16.8
v1.16.7
v1.16.6
v1.16.5
v1.16.4
v1.16.3
v1.16.2
v1.16.1
v1.16.0
v1.15.11
v1.17.0-dev
v1.16.0-rc1
v1.15.10
v1.15.9
v1.15.8
v1.15.7
v1.15.6
v1.15.5
v1.15.4
v1.15.3
v1.15.2
v1.15.1
v1.14.7
v1.15.0
v1.15.0-rc3
v1.14.6
v1.15.0-rc2
v1.14.5
v1.16.0-dev
v1.15.0-rc1
v1.14.4
v1.14.3
v1.14.2
v1.14.1
v1.14.0
v1.13.7
v1.14.0-rc2
v1.13.6
v1.13.5
v1.14.0-rc1
v1.15.0-dev
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.6
v1.13.0-rc2
v1.14.0-dev
v1.13.0-rc1
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.11.8
v1.12.0
v1.11.7
v1.12.0-rc2
v1.11.6
v1.12.0-rc1
v1.13.0-dev
v1.11.5
v1.11.4
v1.11.3
v1.10.6
v1.12.0-dev
v1.11.2
v1.10.5
v1.11.1
v1.10.4
v1.11.0
v1.11.0-rc2
v1.10.3
v1.11.0-rc1
v1.10.2
v1.10.1
v1.10.0
v1.9.6
v1.9.5
v1.10.0-rc2
v1.11.0-dev
v1.10.0-rc1
v1.9.4
v1.9.3
v1.9.2
v1.9.1
v1.9.0
v1.9.0-rc2
v1.10.0-dev
v1.9.0-rc1
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.8.0-rc3
v1.7.6
v1.8.0-rc2
v1.7.5
v1.8.0-rc1
v1.9.0-dev
v1.7.4
v1.7.3
v1.7.2
v1.7.1
v1.7.0
v1.7.0-rc3
v1.6.4
v1.7.0-rc2
v1.6.3
v1.7.0-rc1
v1.7.0-dev
v1.6.2
v1.6.1
v1.6.0
v1.6.0-rc2
v1.5.3
v1.6.0-rc1
v1.6.0-dev
v1.5.2
v1.5.1
v1.5.0
v1.5.0-rc2
v1.5.0-rc1
v1.5.0-dev
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc3
v1.4.0-rc2
v1.3.3
v1.4.0-rc1
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc2
v1.3.0-rc1
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc3
v1.2.0-rc2
v1.1.4
v1.2.0-rc1
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.2
v1.0.1
v1.0.0
v0.9.99
Labels
Clear labels
$20
$250
$50
$500
backport/done
💎 Bounty
docs-update-needed
good first issue
hacktoberfest
issue/bounty
issue/confirmed
issue/critical
issue/duplicate
issue/needs-feedback
issue/not-a-bug
issue/regression
issue/stale
issue/workaround
lgtm/need 2
modifies/api
modifies/translation
outdated/backport/v1.18
outdated/theme/markdown
outdated/theme/timetracker
performance/bigrepo
performance/cpu
performance/memory
performance/speed
pr/breaking
proposal/accepted
proposal/rejected
pr/wip
pull-request
reviewed/wontfix
💰 Rewarded
skip-changelog
status/blocked
topic/accessibility
topic/api
topic/authentication
topic/build
topic/code-linting
topic/commit-signing
topic/content-rendering
topic/deployment
topic/distribution
topic/federation
topic/gitea-actions
topic/issues
topic/lfs
topic/mobile
topic/moderation
topic/packages
topic/pr
topic/projects
topic/repo
topic/repo-migration
topic/security
topic/theme
topic/ui
topic/ui-interaction
topic/ux
topic/webhooks
topic/wiki
type/bug
type/deprecation
type/docs
type/enhancement
type/feature
type/miscellaneous
type/proposal
type/question
type/refactoring
type/summary
type/testing
type/upstream
Mirrored from GitHub Pull Request
No Label
type/bug
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/gitea#9502
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @somera on GitHub (Sep 2, 2022).
Description
This is not a bug. But I try to understand what gitea is doing.
I'm using my gitea for mirror external projects. Means, I have a lot of data. Now I see, that the start page need ~1 second for the first response. Gitea is running in local network.
If I open the gitea start page for user with only one project I see this:
And this result
is for user with a lot of projects.
This is the log for the longer run:
This
2022/09/02 16:59:15 models/action.go:364:GetFeeds() [I] [63121a42] [SQL] SELECT "action".* FROM "action" INNER JOIN "repository" ON "repository".id = "action".repo_id WHERE user_id=$1 AND is_deleted=$2 ORDER BY "action"."created_unix" DESC LIMIT 20 [1 false] - 586.989343msquery is the trigger for the slowdown. And this https://explain.depesz.com/s/BEHk#html is the plan for the query on my instance.
My questions:
Gitea Version
1.17.1
Can you reproduce the bug on the Gitea demo site?
No
Log Gist
No response
Screenshots
No response
Git Version
2.25.1
Operating System
Ubuntu 20.04.4
How are you running Gitea?
Self hosted gitea-1.17.1-linux-amd64
Database
PostgreSQL
@somera commented on GitHub (Sep 2, 2022):
Answer for the first question: "Why is gitea exuting this query fot the start page?" -> this will be shown on the start page. Last 20 actions.
@zeripath commented on GitHub (Sep 2, 2022):
This is strange because it indicates that the indices are not being used correctly. The plan should look like:
What is the result of
\d actionon the psql console?It should look something like:
@somera commented on GitHub (Sep 2, 2022):
I'm using this
PostgreSQL 13.8 (Ubuntu 13.8-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 64-bit@somera commented on GitHub (Sep 2, 2022):
@zeripath commented on GitHub (Sep 2, 2022):
Ah... I've just seen that there are some "legacy" indices in my example above. I've just got the same schema as you and found the following query plan:
EDIT: I'd put up the wrong plan this is the right one
@zeripath commented on GitHub (Sep 2, 2022):
Damn I suspect this means that postgres needs different indices to that of MySQL and other DBs and I was led down the garden path by my previous testing with old indices present.
OK I guess we just need to twiddle with the indices until we find the quickest for this.
@somera commented on GitHub (Sep 2, 2022):
Ok. Sounds good.
@zeripath commented on GitHub (Sep 2, 2022):
Could you compare which is faster between doing:
And:
?
@somera commented on GitHub (Sep 2, 2022):
Not faster.
https://explain.depesz.com/s/6vv0
@zeripath commented on GitHub (Sep 2, 2022):
That's very weird because it should be using the index - which your explain does not show. Certainly it works for me.
You will likely need to drop those new indexes before restarting Gitea btw - (I've just discovered that there is a bug in xorm related to its schema reading.)
@zeripath commented on GitHub (Sep 2, 2022):
What version of postgres are you running?
@somera commented on GitHub (Sep 2, 2022):
Added CREATE INDEX ON action (user_id, is_deleted) -> https://explain.depesz.com/s/bqTF
Added CREATE INDEX ON action (user_id) -> https://explain.depesz.com/s/tJisn
Removed CREATE INDEX ON action (user_id, is_deleted) -> https://explain.depesz.com/s/oVKH
@somera commented on GitHub (Sep 2, 2022):
@zeripath here my PG Version.
@zeripath commented on GitHub (Sep 2, 2022):
I just don't understand why it isn't using any of the indices.
I mean this is the plan I get with the user_id and is_deleted index:
It just makes no sense to me that it would not use the index. That's why we have an index. Even the
"IDX_action_r_u_d" btree (repo_id, user_id, is_deleted)should have been enough.@zeripath commented on GitHub (Sep 2, 2022):
I mean you could try:
However, I note that even your no
ORDER BYquery still isn't using an index.@somera commented on GitHub (Sep 2, 2022):
The problem is order by ...
Here the plan without this: https://explain.depesz.com/s/ygq3
@somera commented on GitHub (Sep 2, 2022):
Looks better now (~600ms faster for the start page)
https://explain.depesz.com/s/K6u3
@somera commented on GitHub (Sep 2, 2022):
I remved
"action_user_id_idx" btree (user_id)now.
@zeripath commented on GitHub (Sep 2, 2022):
What the hell is going on:
Why would your db choose to use the index
action_created_unix_idx!!@somera commented on GitHub (Sep 2, 2022):
I don't know. ;)
My action table has 1.307.514 entries.
@zeripath commented on GitHub (Sep 2, 2022):
Maybe you'd benefit from:
Possibly even append an
INCLUDE (repo_id)there.@somera commented on GitHub (Sep 2, 2022):
https://explain.depesz.com/s/YJuyr
The start page feels better.
@zeripath commented on GitHub (Sep 2, 2022):
Is that fast enough now?
@somera commented on GitHub (Sep 2, 2022):
Yes! Thx.
@somera commented on GitHub (Sep 2, 2022):
Should I remove the index
"idx_action_c_u_d" btree (created_unix DESC, user_id, is_deleted)and wait for the fix release?
@zeripath commented on GitHub (Sep 2, 2022):
OK, now Gitea won't start up with those indexes like that due to a bug in xorm - so we have two problems:
My large "test" db "only" has 42569 rows in
actionso I guess this is why I didn't see this.Could you check if this is still fast:
If so that will make fixing this easier.
@zeripath commented on GitHub (Sep 2, 2022):
Yes you will need to remove the index or at least remove it in between restarts.
@zeripath commented on GitHub (Sep 2, 2022):
OK here's the XORM fix: https://gitea.com/xorm/xorm/pulls/2174
Now actually I think we should not drop irregular indices as it is likely that the user has added these deliberately but I guess we should discuss that in another PR.
@zeripath commented on GitHub (Sep 2, 2022):
@somera I've got a few more indexes to check:
and
If either of those are faster than
IDX_action_c_u_dit would be helpful to know.@somera commented on GitHub (Sep 2, 2022):
Sorry, I didn't see the question.
Here the plan for the index: https://explain.depesz.com/s/JfF9
But the speed is same like with: CREATE INDEX IDX_action_c_u_d ON action (created_unix DESC, user_id, is_deleted)
@zeripath commented on GitHub (Sep 2, 2022):
excellent so the DESC is unnecessary.
What about the repo_id containing ones?
@somera commented on GitHub (Sep 2, 2022):
You mean the user with only one repo?
Works too. Some ms slower.
The plan: https://explain.depesz.com/s/CfHx
@somera commented on GitHub (Sep 7, 2022):
Workx now fine with 1.17.2
