如何查询Redshift集群占用存储空间及结果与控制台不一致问题
问题1&2:查询结果与控制台数值差异原因及准确查询方法
二者数值不一致的核心原因是统计口径不同:
svv_table_info系统表的size字段仅统计用户创建的永久表占用的磁盘块总大小,未包含以下存储消耗项,所以总和会比控制台数值小:- 用户会话创建的临时表占用空间,这部分需要单独查询
svv_temp_table_info系统表统计 - Redshift内置系统表、运行日志占用的存储空间
- 执行DELETE/UPDATE操作后产生的、还未被
VACUUM回收的死元组占用空间 - 运行中的事务、排序运算等产生的临时缓存空间
- 如果你使用的是RA3架构集群,还包含集群本地缓存的冷数据占用空间
- 用户会话创建的临时表占用空间,这部分需要单独查询
- 控制台统计的是整个集群所有已分配的磁盘块总大小,包含上述所有未被
svv_table_info统计的空间,所以二者会有差异。
要获取和控制台对齐的集群总占用空间,可以用以下SQL查询:
SELECT sum(used) AS total_used_mb FROM svv_diskusage;
如果要查询单表的准确占用空间(包含索引、死元组等所有关联占用),可以用:
SELECT pg_total_relation_size('你的表名') AS total_used_bytes;
问题3:MB转TB的换算方式说明
- 除以两次1024的换算方式是**二进制单位(MiB转TiB)**的正确算法:1 TiB = 1024 GiB = 1024 * 1024 MiB,如果你要统计的是二进制单位的存储空间,这个换算没有问题。
- 目前大部分公有云存储产品的容量标注用的是十进制单位(MB转TB),换算规则是1 TB = 1000 GB = 1000 * 1000 MB,如果要和控制台的容量单位对齐,可以用这个换算规则。
- 你本次查询到的数值差异主要来自统计口径不同,换算带来的差异占比很小。
内容的提问来源于stack exchange,提问作者Sree Neher Peguda
相关产品推荐
相关产品推荐

