更新时间:2024-06-29 GMT+08:00

PGXC_GET_STAT_ALL_TABLES

PGXC_GET_STAT_ALL_TABLES视图获取各表的插入、更新、删除以及脏页率信息。

对于高脏页率的系统表,建议在确认当前没有用户操作该系统表时,再执行VACUUM FULL。建议对脏页率超过80%的非系统表执行VACUUM FULL,用户也可根据业务场景自行选择是否执行VACUUM FULL。

表1 PGXC_GET_STAT_ALL_TABLES字段

名称

类型

描述

relid

oid

表的OID。

relname

name

表名。

schemaname

name

表的模式名。

n_tup_ins

numeric

插入的元组条数。

n_tup_upd

numeric

更新的元组条数。

n_tup_del

numeric

删除的元组条数。

n_live_tup

numeric

live元组的条数。

n_dead_tup

numeric

dead元组的条数。

dirty_page_rate

numeric(5,2)

表的脏页率信息(%)。

同时GaussDB(DWS)提供了函数pgxc_get_stat_dirty_tables(int dirty_percent, int n_tuples)和pgxc_get_stat_dirty_tables(int dirty_percent, int n_tuples, text schema)可以快速筛选出脏页率大于dirty_percent,dead元组数大于n_tuples,模式名是schema的表。

详细内容可参考其他函数章节。

应用示例

使用PGXC_GET_STAT_ALL_TABLES视图查询数据库内脏页率大于30%的表:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SELECT * FROM PGXC_GET_STAT_ALL_TABLES WHERE dirty_page_rate>30;
 relid |         relname         | schemaname | n_tup_ins | n_tup_upd | n_tup_del | n_live_tup | n_dead_tup | dirty_page_rate
-------+-------------------------+------------+-----------+-----------+-----------+------------+------------+-----------------
  2840 | pg_toast_2619           | pg_toast   |      7415 |         0 |      7415 |          0 |        291 |           88.00
  9001 | pgxc_class              | pg_catalog |     56331 |         3 |     56285 |         54 |        143 |           72.59
 53860 | reason                  | dbadmin    |         9 |        19 |         0 |          9 |         19 |           67.86
  9025 | pg_object               | pg_catalog |    112858 |   1179707 |    112619 |        246 |        429 |           63.56
  9015 | pgxc_node               | pg_catalog |        15 |        24 |         0 |         15 |         24 |           61.54
  2606 | pg_constraint           | pg_catalog |        78 |         0 |        42 |         36 |         42 |           53.85
  1260 | pg_authid               | pg_catalog |         6 |         6 |         0 |          6 |          6 |           50.00
(7 rows)

也可以使用pgxc_get_stat_dirty_tables函数查询数据库内脏页率大于10%,脏数据行数大于1000行的表:

1
2
3
4
5
6
7
SELECT a.schemaname,a.relname,pg_size_pretty(pg_table_size(b.oid)),a.dirty_page_rate FROM pgxc_get_stat_dirty_tables(10,1000) a,pg_catalog.pg_class b WHERE a.relname = b.relname order by pg_table_size(b.oid) desc;
 schemaname |   relname    | pg_size_pretty | dirty_page_rate
------------+--------------+----------------+-----------------
 pg_catalog | pg_attribute | 2792 KB        |           12.09
 pg_catalog | pg_class     | 568 KB         |           15.36
 pg_catalog | pg_type      | 368 KB         |           12.17
(3 rows)