如何查看Amazon Redshift中特定表的Vacuum和Analyze命令执行历史?
查看Amazon Redshift特定表的Vacuum和Analyze操作历史
当然可以!Redshift提供了几个系统视图和日志表,能帮你精准追踪特定表上执行过的Vacuum和Analyze命令,下面分两种实用方法来介绍:
方法1:使用专门的操作日志视图
Redshift内置了两个专门记录这类维护操作的系统表,直接查它们效率最高:
stl_vacuum:存储所有Vacuum操作的核心执行信息stl_analyze:存储所有Analyze操作的核心执行信息
这两个表默认只记录成功完成的操作(如果要排查失败的任务,可以关联stl_error表查询)。需要注意的是,它们用table_id标识表,所以得结合svv_table_info视图把表名转换成对应的ID,或者直接关联查询。
查询特定表的Vacuum历史示例:
SELECT v.starttime, v.endtime, v.status, v.rows_deleted, v.rows_reclaimed, t.table_name FROM stl_vacuum v JOIN svv_table_info t ON v.table_id = t.table_id WHERE t.table_name = 'your_target_table' -- 替换成你的目标表名 ORDER BY v.starttime DESC;
查询特定表的Analyze历史示例:
SELECT a.starttime, a.endtime, a.status, a.rows_processed, t.table_name FROM stl_analyze a JOIN svv_table_info t ON a.table_id = t.table_id WHERE t.table_name = 'your_target_table' -- 替换成你的目标表名 ORDER BY a.starttime DESC;
这些查询会返回操作的起止时间、执行状态、处理/回收行数等关键指标,能快速了解维护操作的效果。
方法2:通过查询日志追踪完整命令上下文
如果你需要查看带参数的完整命令(比如VACUUM FULL、ANALYZE specific_column这类带特殊参数的操作),可以结合stl_query和stl_querytext这两个视图——所有在Redshift上执行的SQL命令都会被记录在这里。
查询特定表的Vacuum/Analyze完整命令示例:
SELECT q.starttime, q.endtime, u.usename AS executor, qt.querytext FROM stl_query q JOIN stl_querytext qt ON q.queryid = qt.queryid JOIN pg_user u ON q.userid = u.usesysid WHERE qt.querytext ILIKE '%VACUUM%your_target_table%' -- 替换表名 OR qt.querytext ILIKE '%ANALYZE%your_target_table%' ORDER BY q.starttime DESC;
这个查询能帮你找到执行命令的用户、完整的SQL语句,甚至可以过滤出特定参数的操作,适合需要排查具体执行细节的场景。
额外注意事项
- 权限要求:你需要拥有这些系统表的
SELECT权限,通常超级用户或者被授予SELECT ON ALL TABLES IN SCHEMA pg_catalog权限的用户才能访问。 - 数据保留期限:Redshift的系统日志默认有保留时间(通常7-30天,取决于集群配置),超过期限的记录会被自动清理,若需长期留存,建议定期导出到S3或其他存储系统。
- 大小写问题:Redshift表名默认小写,查询时注意匹配,或者用
ILIKE忽略大小写避免遗漏。
内容的提问来源于stack exchange,提问作者dark horse
相关产品推荐
相关产品推荐

