我们最近升级了操作系统:
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.6 (Maipo)
升级后,我们在 GitLab(主要是 Postgres)方面面临很多问题。
我们的 GitLab 是 dockerized 即 GitLab(及其所有内部服务,包括 PostgreSQL)在单个容器中运行。容器没有它自己的glibc
,所以它使用来自操作系统的容器。
错误:由于语句超时而取消语句
声明:
选择 relnamespace::regnamespace 作为 schemaname,relname 作为 relname,pg_total_relation_size(oid) bytes FROM pg_class WHERE relkind = 'r';
超时消息不断出现,这导致用户在访问 GitLab 时面临 502 错误。
我检查了数据库上设置的语句超时。
gitlabhq_production=# show statement_timeout;
statement_timeout
-------------------
1min
(1 row)
我不知道该怎么做。这可能是默认设置。这是postgres的问题吗?这是什么意思?我能做些什么来解决这个问题?
编辑:
检查pg_stat_activity
并没有看到任何锁,因为服务器之前已重新启动。相同的查询现在运行良好,但我们间歇性地看到这个问题。
跑来\d pg_class
检查表是否使用任何索引并检查字符串列。
gitlabhq_production=# \d pg_class
Table "pg_catalog.pg_class"
Column | Type | Modifiers
---------------------+-----------+-----------
relname | name | not null
relnamespace | oid | not null
reltype | oid | not null
reloftype | oid | not null
relowner | oid | not null
relam | oid | not null
relfilenode | oid | not null
reltablespace | oid | not null
relpages | integer | not null
reltuples | real | not null
relallvisible | integer | not null
reltoastrelid | oid | not null
relhasindex | boolean | not null
relisshared | boolean | not null
relpersistence | "char" | not null
relkind | "char" | not null
relnatts | smallint | not null
relchecks | smallint | not null
relhasoids | boolean | not null
relhaspkey | boolean | not null
relhasrules | boolean | not null
relhastriggers | boolean | not null
relhassubclass | boolean | not null
relrowsecurity | boolean | not null
relforcerowsecurity | boolean | not null
relispopulated | boolean | not null
relreplident | "char" | not null
relfrozenxid | xid | not null
relminmxid | xid | not null
relacl | aclitem[] |
reloptions | text[] |
Indexes:
"pg_class_oid_index" UNIQUE, btree (oid)
"pg_class_relname_nsp_index" UNIQUE, btree (relname, relnamespace)
"pg_class_tblspc_relfilenode_index" btree (reltablespace, relfilenode)
重新索引所有表和可能的alter
表会有所帮助吗?