Amazon Redshift 中某个表的未排序百分比很高,但 vacuum_sort_benefit 值却为 0。
简短描述
Amazon Redshift 会计算 SVV_TABLE_INFO 中未排序的列,以显示与排序键顺序不匹配的表数据的百分比。如果未排序百分比较高,则 VACUUM 排序操作可能会提升查询性能。
vacuum_sort_benefit 值决定了排序操作是否可以提升性能。当该值为 0 时,Amazon Redshift 将无法从 VACUUM 操作中受益,因为排序不会优化查询。
由于以下原因,可能会出现未排序百分比较高但 vacuum_sort_benefit 值为 0 的情况:
- Amazon Redshift 根据最近的查询计划确定排序带来的好处微乎其微。查询仅访问表的一小部分,或者极少数查询访问该表。
- 查询不按排序键列进行筛选或排序。即使表显示为未排序,但排序所带来的好处微乎其微。
- 表上未运行任何查询,因此 Amazon Redshift 无需优化排序顺序。
有关详细信息,请参阅对表执行 vacuum 操作。
解决方法
要确定排序是否可以提升性能,请同时查看 vacuum_sort_benefit 值和 unsorted 值。
如果 vacuum_sort_benefit 值等于 0 且 unsorted 值较高,则查询模式不会从数据排序中受益。vacuum_sort_benefit 指标会根据您的工作负载模式计算排序可能带来的查询性能提升。
运行以下查询以获取值:
SELECT "schema", "table", sortkey1, sortkey_num, unsorted, vacuum_sort_benefit
FROM SVV_TABLE_INFO
WHERE "table" = 'table_name';
**注意:**请将 table_name 替换为表的名称。
确保排序键与频繁查询的筛选列保持一致。如果排序键与查询模式不相关,则较高的未排序百分比不会对性能产生显著影响。
如果您确定排序可以提升性能,请运行以下 VACUUM 排序命令,以手动对表执行 vacuum 操作:
VACUUM SORT ONLY table_name;
**注意:**请将 table_name 替换为表的名称。
相关信息
自动表排序