Redshift中无法查询CREATE OR REPLACE VIEW执行记录及时长问题求助
Redshift查不到CREATE OR REPLACE VIEW执行记录?试试这些方案
问题根源与解决办法
1. 换查系统表STL_DDLTEXT
Redshift中,CREATE/REPLACE VIEW这类DDL语句的执行记录大多存储在STL_DDLTEXT表,而非STL_QUERY。直接查询这张表:
select database, ddltext, starttime, endtime, datediff(seconds, starttime, endtime) as duration from STL_DDLTEXT where database = 'mydb' and ddltext like '%CREATE OR REPLACE VIEW%' limit 10;
2. 语句过长被截断?关联STL_QUERYTEXT
如果视图定义语句较长,STL_QUERY的querytxt字段(默认4000字符)会被截断,导致LIKE匹配失效。关联STL_QUERYTEXT获取完整语句:
select q.database, qt.querytxt, q.starttime, q.endtime, datediff(seconds, q.starttime, q.endtime) as duration from STL_QUERY q join STL_QUERYTEXT qt on q.queryid = qt.queryid where q.database = 'mydb' and qt.querytxt like '%CREATE OR REPLACE VIEW%' limit 10;
3. 权限不足?换超级用户或申请权限
当前查询账号可能没有系统表的访问权限,可以切换超级用户账号执行查询,或联系管理员开通SELECT ON STL_QUERY、SELECT ON STL_DDLTEXT等权限。
4. 历史记录被清理?缩小时间范围
Redshift系统表的历史数据会定期清理,若语句执行时间较早,可能已被删除。添加时间过滤条件缩小查询范围:
select database, querytxt, starttime, endtime, datediff(seconds, starttime, endtime) as duration from STL_QUERY where database = 'mydb' and querytxt like '%CREATE OR REPLACE VIEW%' and starttime >= current_date - interval '7 days' -- 仅查询近7天的记录 limit 10;
分析执行时长稳定性的方法
获取到记录后,按语句分组统计即可看出执行时长的波动情况:
select ddltext, count(*) as 执行次数, avg(datediff(seconds, starttime, endtime)) as 平均时长, max(datediff(seconds, starttime, endtime)) as 最长时长, min(datediff(seconds, starttime, endtime)) as 最短时长, stddev(datediff(seconds, starttime, endtime)) as 时长标准差 from STL_DDLTEXT where database = 'mydb' and ddltext like '%CREATE OR REPLACE VIEW%' group by ddltext order by 执行次数 desc;
其中时长标准差越大,说明该语句的执行时长波动越明显。
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

