
# 数据库对象尺寸函数
数据库对象尺寸函数计算数据库对象使用的实际磁盘空间。
#### pg_column_size(any)
描述：存储一个指定的数值需要的字节数（可能压缩过）。
返回值类型：int
备注：pg_column_size显示用于存储某个独立数据值的空间。
```
gaussdb=# SELECT pg_column_size(1);
 pg_column_size 
----------------
              4
(1 row)
```
#### pg_database_size(oid)
描述：指定OID代表的数据库使用的磁盘空间。
返回值类型：bigint
#### pg_database_size(name)
描述：指定名称的数据库使用的磁盘空间。
返回值类型：bigint
备注：pg_database_size接受一个数据库的OID或者名称，然后返回该对象使用的全部磁盘空间。
示例：
```
gaussdb=# SELECT pg_database_size('testdb');
 pg_database_size 
------------------
         51590112
(1 row)
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
pg_database_size(oid/name)函数的查询耗时与该oid/name所对应数据库中的对象文件数目相关，基本呈线性关系。如需进行耗时评估，可参考以下步骤：
1. 由于耗时与软硬件环境有关，因此需要以某个库（所选择库的对象文件数目不宜过多）的测试结果为基准。根据查询耗时和库中对象文件数目，计算出单个对象文件的耗时database_size_t。
2. 使用select oid,\* from pg_database where datname = 'database';查询获取需要查询库的OID，在表空间base和pg_tblspc目录下统计该OID目录下的所有文件数目database_obj_num。如果该目录中包含子目录，则需要进入查看对象文件数目，依次类推；使用ls \| wc -l查询目录下文件数目。
3. 根据基准测试结果中的单文件耗时database_size_t和数据库下所有对象文件数目database_obj_num计算预估总耗时，总耗时 = database_size_t \* database_obj_num。如果预估时延过长，需考虑调整执行超时阈值，避免出现不必要的告警。
4. 以上步骤评估的是DN上获取数据库大小的耗时，在分布式环境中，总耗时取决于DN中对象文件数目最多或耗时最大的节点。
 
#### pg_relation_size(oid)
描述：指定OID代表的表或者索引所使用的磁盘空间。
返回值类型：bigint
#### get_db_source_datasize()
描述：估算当前数据库非压缩态的数据总容量。
返回值类型：bigint
备注：调用该函数前需要做analyze。
示例：
```
gaussdb=# analyze;
ANALYZE
gaussdb=# SELECT get_db_source_datasize();
 get_db_source_datasize
------------------------
            35384925667
(1 row)
```
#### pg_relation_size(text)
描述：指定名称的表或者索引使用的磁盘空间。表名称可以用模式名修饰。
返回值类型：bigint
#### 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)
描述：将以64位整数表示的字节值转换为具有单位的易读格式。
返回值类型：text
#### pg_size_pretty(numeric)
描述：将以数值表示的字节值转换为具有单位的易读格式。
返回值类型：text
备注：pg_size_pretty用于把其他函数的结果格式化成一种易读的格式，可以根据情况使用kB 、MB 、GB 、TB。
#### pg_table_size(regclass)
描述：指定的表使用的磁盘空间，不计索引（但是包含TOAST，自由空间映射和可见性映射）。
返回值类型：bigint
#### pg_tablespace_size(oid)
描述：指定OID代表的表空间使用的磁盘空间。
返回值类型：bigint
#### pg_tablespace_size(name)
描述：指定名称的表空间使用的磁盘空间。
返回值类型：bigint
备注：
pg_tablespace_size接受一个数据库的OID或者名称，然后返回该对象使用的全部磁盘空间。
#### pg_total_relation_size(oid)
描述：指定OID代表的表使用的磁盘空间，包括索引和压缩数据。
返回值类型：bigint
#### pg_total_relation_size(regclass)
描述：指定的表使用的总磁盘空间，包括所有的索引和TOAST数据。
返回值类型：bigint
#### pg_total_relation_size(text)
描述：指定名称的表所使用的全部磁盘空间，包括索引和压缩数据。表名称可以用模式名修饰。
返回值类型：bigint
备注：pg_total_relation_size接受一个表或者一个压缩表的OID或者名称，然后返回以字节计的数据和所有相关的索引和压缩表的尺寸。
#### 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                   | n                         |
| 字符类型 | 字符类型  | CHAR(n)                | n                         |
| 字符类型 | 字符类型  | CHARACTER(n)           | n                         |
| 字符类型 | 字符类型  | NCHAR(n)               | n                         |
| 字符类型 | 字符类型  | VARCHAR(n)             | n                         |
| 字符类型 | 字符类型  | CHARACTER              | 字符实际字节数。                  |
| 字符类型 | 字符类型  | VARYING(n)             | 字符实际字节数。                  |
| 字符类型 | 字符类型  | VARCHAR2(n)            | 字符实际字节数。                  |
| 字符类型 | 字符类型  | NVARCHAR2(n)           | 字符实际字节数。                  |
| 字符类型 | 字符类型  | TEXT                   | 字符实际字节数。                  |
| 字符类型 | 字符类型  | CLOB                   | 字符实际字节数。                  |
| 时间类型 | 时间类型  | DATE                   | 8                         |
| 时间类型 | 时间类型  | TIME                   | 8                         |
| 时间类型 | 时间类型  | TIMEZ                  | 12                        |
| 时间类型 | 时间类型  | TIMESTAMP              | 8                         |
| 时间类型 | 时间类型  | TIMESTAMPZ             | 8                         |
| 时间类型 | 时间类型  | SMALLDATETIME          | 8                         |
| 时间类型 | 时间类型  | INTERVAL DAY TO SECOND | 16                        |
| 时间类型 | 时间类型  | INTERVAL               | 16                        |
| 时间类型 | 时间类型  | RELTIME                | 4                         |
| 时间类型 | 时间类型  | ABSTIME                | 4                         |
| 时间类型 | 时间类型  | TINTERVAL              | 12                        |
   
