数据库对象函数
数据库对象尺寸函数
数据库对象尺寸函数计算数据库对象使用的实际磁盘空间。
- pg_column_size(any)
返回值类型:int
备注:pg_column_size显示用于存储某个独立数据值的空间。
1 2 3 4 5
gaussdb=# SELECT pg_column_size(1); pg_column_size ---------------- 4 (1 row)
- pg_database_size(oid)
返回值类型:bigint
- pg_database_size(name)
返回值类型:bigint
备注:pg_database_size接受一个数据库的OID或者名称,然后返回该对象使用的全部磁盘空间。
示例:
1 2 3 4 5 6 7
gaussdb=# CREATE DATABASE testdb; gaussdb=# SELECT pg_database_size('testdb'); pg_database_size ------------------ 51590112 (1 row) gaussdb=# DROP DATABASE testdb;
pg_database_size(oid/name)函数的查询耗时与该oid/name所对应数据库中的对象文件数目相关,基本呈线性关系。如需进行耗时评估,可参考以下步骤:
- 由于耗时与软硬件环境有关,因此需要以某个库(所选择库的对象文件数目不宜过多)的测试结果为基准。根据查询耗时和库中对象文件数目,计算出单个对象文件的耗时database_size_t。
- 使用select oid,* from pg_database where datname = 'database';查询获取需要查询库的OID,在表空间base和pg_tblspc目录下统计该OID目录下的所有文件数目database_obj_num。如果该目录中包含子目录,则需要进入查看对象文件数目,依次类推;使用ls | wc -l查询目录下文件数目。
- 根据基准测试结果中的单文件耗时database_size_t和数据库下所有对象文件数目database_obj_num计算预估总耗时,总耗时 = database_size_t * database_obj_num。如果预估时延过长,需考虑调整执行超时阈值,避免出现不必要的告警。
- get_db_source_datasize()
返回值类型:bigint
备注:调用该函数前需要做analyze。
示例:
1 2 3 4 5 6 7
gaussdb=# analyze; ANALYZE gaussdb=# SELECT get_db_source_datasize(); get_db_source_datasize ------------------------ 35384925667 (1 row)
- pg_relation_size(relation regclass, fork text)
描述:指定表或索引的指定分叉树('main','fsm'或'vm')使用的磁盘空间。
返回值类型:bigint
- pg_relation_size(relation regclass)
描述:pg_relation_size(..., 'main')的简写。
返回值类型:bigint
备注:pg_relation_size接受一个表、索引、压缩表的OID或者名称,然后返回它们的字节大小。
- pg_partition_size(oid, oid)
描述:指定OID代表的分区使用的磁盘空间。其中,第一个oid为表的OID,第二个oid为分区的OID。
返回值类型:bigint
- pg_partition_size(text, text)
描述:指定名称的分区使用的磁盘空间。其中,第一个text为表名,第二个text为分区名。
返回值类型:bigint
- pg_partition_indexes_size(oid, oid)
描述:指定OID代表的分区的索引使用的磁盘空间。其中,第一个oid为表的OID,第二个oid为分区的OID。
返回值类型:bigint
- pg_partition_indexes_size(text, text)
描述:指定名称的分区的索引使用的磁盘空间。其中,第一个text为表名,第二个text为分区名。
返回值类型:bigint
- pg_indexes_size(regclass)
返回值类型:bigint
- pg_size_pretty(bigint)
返回值类型:text
- pg_size_pretty(numeric)
返回值类型:text
备注:pg_size_pretty用于把其他函数的结果格式化成一种易读的格式,可以根据情况使用kB 、MB 、GB 、TB。
- pg_table_size(regclass)
描述:指定的表使用的磁盘空间,不计索引(但是包含TOAST,自由空间映射和可见性映射)。
返回值类型:bigint
- pg_tablespace_size(oid)
返回值类型:bigint
- pg_tablespace_size(name)
返回值类型:bigint
备注:
pg_tablespace_size接受一个数据库的OID或者名称,然后返回该对象使用的全部磁盘空间。
- pg_total_relation_size(regclass)
描述:指定的表使用的总磁盘空间,包括所有的索引和TOAST数据。
返回值类型:bigint
- dist_relation_size(nspname name, relname name)
返回值类型:float8
表1 参数说明 入参
类型
含义
nspname
name
表所在的模式名。
relname
name
表名。
1CN6DN数据库环境,可以看到6个DN上的relpage数:
gaussdb=# CREATE TABLE tab(col int); -- node_name与当前环境的节点名称保持一致。 gaussdb=# SELECT * FROM dist_relation_size('public','tab'); node_name | relpages -----------+---------- datanode1 | 0 datanode2 | 0 datanode3 | 0 datanode4 | 0 datanode6 | 0 datanode5 | 0 (6 rows) gaussdb=# DROP TABLE tab;
- 该函数不支持在升级观察期使用。
- 该函数不支持在DN上调用。
- dist_partition_size(nspname name, relname name, subname name)
描述:指定模式下的分区表的指定分区在每个DN上的relpage数。
返回值类型:float8
表2 参数说明 入参
类型
含义
nspname
name
表所在的模式名。
relname
name
表名。
subname
name
需要查询的分区名。
1CN6DN数据库环境,可以看到6个DN上的relpage数:
gaussdb=# CREATE TABLE test_part_table(col int) PARTITION BY RANGE(col) ( PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LESS THAN (20), PARTITION p3 VALUES LESS THAN (MAXVALUE) ); -- node_name与当前环境的节点名称保持一致。 gaussdb=# SELECT * FROM dist_partition_size('public','test_part_table','p1') ORDER BY node_name; node_name | relpages -----------+---------- datanode1 | 0 datanode2 | 0 datanode3 | 0 datanode4 | 0 datanode5 | 0 datanode6 | 0 (6 rows) gaussdb=# DROP TABLE test_part_table;
- 该函数不支持在升级观察期使用。
- 该函数不支持在DN上调用。
- datalength(any)
描述:计算一个指定的数据需要的字节数(不考虑数据的管理空间和数据压缩,数据类型转换等情况)。
返回值类型:int
备注:datalength用于计算某个独立数据值的空间。
示例:
gaussdb=# SELECT datalength(1); datalength ------------ 4 (1 row)目前支持的数据类型及计算方式见下表:
数据类型
存储空间
数值类型
整数类型
TINYINT
1
SMALLINT
2
INTEGER
4
BINARY_INTEGER
4
BIGINT
8
任意精度型
DECIMAL
每4位十进制数占两个字节,小数点前后数字分别计算。
NUMERIC
每4位十进制数占两个字节,小数点前后数字分别计算。
NUMBER
每4位十进制数占两个字节,小数点前后数字分别计算。
序列整型
SMALLSERIAL
2
SERIAL
4
BIGSERIAL
8
浮点类型
FLOAT4
4
DOUBLE PRECISION
8
FLOAT8
8
BINARY_DOUBLE
8
FLOAT[(p)]
每4位十进制数占两个字节,小数点前后数字分别计算。
DEC[(p[,s])]
每4位十进制数占两个字节,小数点前后数字分别计算。
INTEGER[(p[,s])]
每4位十进制数占两个字节,小数点前后数字分别计算。
布尔类型
布尔类型
BOOLEAN
1
字符类型
字符类型
CHAR
1
CHAR(n)
n
CHARACTER(n)
n
NCHAR(n)
n
VARCHAR(n)
字符实际字节数。
CHARACTER VARYING(n)
字符实际字节数。
VARCHAR2(n)
字符实际字节数。
NVARCHAR2(n)
字符实际字节数。
TEXT
字符实际字节数。
CLOB
字符实际字节数。
时间类型
时间类型
DATE
8
DATEA(仅在ORA模式下支持)
8
TIME
8
TIMETZ
12
TIMESTAMP
8
TIMESTAMPTZ
8
SMALLDATETIME
8
INTERVAL DAY TO SECOND
16
INTERVAL
16
RELTIME
4
ABSTIME
4
TINTERVAL
12
ROWID类型
ROWID类型
ROWID
24
数据库对象位置函数
- pg_relation_filenode(relation regclass)
返回值类型:oid
备注:pg_relation_filenode接受一个表、索引、序列或压缩表的OID或者名称,并且返回当前分配给它的“filenode”数。文件节点是关系使用的文件名称的基本组件。对大多数表来说,结果和pg_class.relfilenode相同,但对确定的系统目录来说, relfilenode为0而且这个函数必须用来获取正确的值。如果传递一个没有存储的关系,比如一个视图,那么这个函数返回NULL。
- pg_relation_filepath(relation regclass)
返回值类型:text
备注:pg_relation_filepath类似于pg_relation_filenode,但是它返回关系的整个文件路径名(相对于数据库集群的数据目录PGDATA)。
段页式关系建议使用段页式相关函数或视图,例如:
SELECT e.*, f.file_name FROM gs_seg_extents e, gs_seg_datafiles f WHERE e.tablespace_name = f.tablespace_name AND e.bucketnode = f.bucketnode AND e.file_id = f.file_id AND e.forknum = f.forknum;
- get_large_table_name(relfile_node text, threshold_size_gb int8)
描述:根据表的文件编码(relfile_node)查询对应的表大小(单位为GB)是否超过阈值(threshold_size_gb),如果超过则返回模式名和表名(形式为schemaname.tablename), 否则返回字符串'null'。
返回值类型:text
- pg_filenode_relation(tablespace oid, filenode oid)
描述:获取对应的tablespace和relfilenode所对应的表名。
返回类型:regclass
- pg_partition_filenode(partition_oid)
返回类型:oid
- pg_partition_filepath(partition_oid)
返回值类型:text
备注:段页式关系建议使用段页式相关函数或视图,例如:
SELECT e.*, f.file_name FROM gs_seg_extents e, gs_seg_datafiles f WHERE e.tablespace_name = f.tablespace_name AND e.bucketnode = f.bucketnode AND e.file_id = f.file_id AND e.forknum = f.forknum;