summaryrefslogtreecommitdiffstats
path: root/models/db
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2023-06-03 22:03:41 +0800
committerGitHub <noreply@github.com>2023-06-03 22:03:41 +0800
commit520eb57d7642a5fca3df319e5b5d1c7c9018087c (patch)
treea697c0be092c2fba660336a6bbebcee47e56c407 /models/db
parent4486dd39e7f6062926d72e0d104ed303eb01a400 (diff)
downloadgitea-520eb57d7642a5fca3df319e5b5d1c7c9018087c.tar.gz
gitea-520eb57d7642a5fca3df319e5b5d1c7c9018087c.zip
Use a separate admin page to show global stats, remove `actions` stat (#25062)
Before, Gitea shows the database table stats on the `admin dashboard` page. It has some problems: * `count(*)` is quite heavy. If tables have many records, this blocks loading the admin page blocks for a long time * Some users had even reported issues that they can't visit their admin page because this page causes blocking or `50x error (reverse proxy timeout)` * The `actions` stat is not useful. The table is simply too large. Does it really matter if it contains 1,000,000 rows or 9,999,999 rows? * The translation `admin.dashboard.statistic_info` is difficult to maintain. So, this PR uses a separate page to show the stats and removes the `actions` stat. ![image](https://github.com/go-gitea/gitea/assets/2114189/babf7c61-b93b-4a62-bfaa-22983636427e) ## :warning: BREAKING The `actions` Prometheus metrics collector has been removed for the reasons mentioned beforehand. Please do not rely on its output anymore.
Diffstat (limited to 'models/db')
-rw-r--r--models/db/context.go25
1 files changed, 0 insertions, 25 deletions
diff --git a/models/db/context.go b/models/db/context.go
index 670f6272aa..59be1e1389 100644
--- a/models/db/context.go
+++ b/models/db/context.go
@@ -9,7 +9,6 @@ import (
"xorm.io/builder"
"xorm.io/xorm"
- "xorm.io/xorm/schemas"
)
// DefaultContext is the default context to run xorm queries in
@@ -241,30 +240,6 @@ func TableName(bean interface{}) string {
return x.TableName(bean)
}
-// EstimateCount returns an estimate of total number of rows in table
-func EstimateCount(ctx context.Context, bean interface{}) (int64, error) {
- e := GetEngine(ctx)
- e.Context(ctx)
-
- var rows int64
- var err error
- tablename := TableName(bean)
- switch x.Dialect().URI().DBType {
- case schemas.MYSQL:
- _, err = e.Context(ctx).SQL("SELECT table_rows FROM information_schema.tables WHERE tables.table_name = ? AND tables.table_schema = ?;", tablename, x.Dialect().URI().DBName).Get(&rows)
- case schemas.POSTGRES:
- // the table can live in multiple schemas of a postgres database
- // See https://wiki.postgresql.org/wiki/Count_estimate
- tablename = x.TableName(bean, true)
- _, err = e.Context(ctx).SQL("SELECT reltuples::bigint AS estimate FROM pg_class WHERE oid = ?::regclass;", tablename).Get(&rows)
- case schemas.MSSQL:
- _, err = e.Context(ctx).SQL("sp_spaceused ?;", tablename).Get(&rows)
- default:
- return e.Context(ctx).Count(tablename)
- }
- return rows, err
-}
-
// InTransaction returns true if the engine is in a transaction otherwise return false
func InTransaction(ctx context.Context) bool {
_, ok := inTransaction(ctx)