当前位置: 首页 > news >正文

Redshift历史SQL运行记录查询

Amazon Redshift提供了强大的系统表和视图来监控和分析SQL查询性能。本文将详细介绍如何查看Redshift的历史SQL运行记录,特别是通过STL_QUERY表及其相关查询。

通过以下方法,您可以有效地监控和分析Redshift集群中的SQL查询历史,识别性能问题,优化查询性能,并了解用户行为模式。

1. STL_QUERY表概述

STL_QUERY是Redshift中最基础的系统表之一,记录了集群中执行的所有SQL查询的详细信息。该表包含查询的元数据、执行统计信息和状态信息。

主要字段包括:

  • query - 查询的SQL文本(可能被截断)
  • querytxt - 完整的查询文本(在STL_QUERYTEXT中)
  • starttime - 查询开始时间
  • endtime - 查询结束时间
  • userid - 执行查询的用户ID
  • pid - 进程ID
  • aborted - 查询是否被中止
  • label - 查询标签(如果有)

2. 直接查看STL_QUERY记录

最基本的查询方式是直接查询STL_QUERY表并按开始时间倒序排列:

SELECT query,TRIM(querytxt) as query_text,starttime,endtime,userid,pid,aborted
FROM stl_query
WHERE starttime >= DATEADD(day, -1, GETDATE())  -- 最近一天的数据
ORDER BY starttime DESC
LIMIT 100;

注意事项:

  • STL_QUERY表只保留2-5天的数据,具体取决于集群的日志级别设置
  • query字段中的SQL文本可能被截断,完整内容需要查询STL_QUERYTEXT表
  • 建议使用时间范围过滤以避免返回过多数据

3. 按用户名筛选查询记录

为了将用户ID转换为可读的用户名,需要连接pg_user系统目录表:

SELECT u.usename as username,q.query,TRIM(q.querytxt) as query_text,q.starttime,q.endtime,(q.endtime - q.starttime) as duration,q.pid,q.aborted
FROM stl_query q
JOIN pg_user u ON q.userid = u.usesysid
WHERE q.starttime >= DATEADD(day, -1, GETDATE())AND u.usename = 'target_username'  -- 替换为目标用户名
ORDER BY q.starttime DESC
LIMIT 100;

4. 获取完整查询文本

由于STL_QUERY表中的query字段可能被截断,要获取完整的SQL查询文本,需要使用STL_QUERYTEXT表:

SELECT u.usename as username,q.query,LISTAGG(CASE WHEN LENGTH(RTRIM(t.text)) > 0 THEN RTRIM(t.text) ELSE '' END, '') WITHIN GROUP (ORDER BY t.sequence) as full_query_text,q.starttime,q.endtime,(q.endtime - q.starttime) as duration
FROM stl_query q
JOIN pg_user u ON q.userid = u.usesysid
JOIN stl_querytext t ON q.query = t.query
WHERE q.starttime >= DATEADD(hour, -6, GETDATE())AND u.usename = 'target_username'
GROUP BY u.usename, q.query, q.starttime, q.endtime
ORDER BY q.starttime DESC
LIMIT 50;

5. 高级查询示例

5.1 查询执行时间最长的SQL

SELECT u.usename,q.query,LISTAGG(CASE WHEN LENGTH(RTRIM(t.text)) > 0 THEN RTRIM(t.text) ELSE '' END, '') WITHIN GROUP (ORDER BY t.sequence) as full_query,q.starttime,q.endtime,DATEDIFF(seconds, q.starttime, q.endtime) as execution_seconds
FROM stl_query q
JOIN pg_user u ON q.userid = u.usesysid
JOIN stl_querytext t ON q.query = t.query
WHERE q.starttime >= DATEADD(day, -1, GETDATE())AND q.aborted = 0
GROUP BY u.usename, q.query, q.starttime, q.endtime
ORDER BY execution_seconds DESC
LIMIT 20;

5.2 查询被中止的SQL

SELECT u.usename,q.query,LISTAGG(CASE WHEN LENGTH(RTRIM(t.text)) > 0 THEN RTRIM(t.text) ELSE '' END, '') WITHIN GROUP (ORDER BY t.sequence) as full_query,q.starttime,q.endtime,q.aborted
FROM stl_query q
JOIN pg_user u ON q.userid = u.usesysid
JOIN stl_querytext t ON q.query = t.query
WHERE q.starttime >= DATEADD(day, -1, GETDATE())AND q.aborted = 1
GROUP BY u.usename, q.query, q.starttime, q.endtime, q.aborted
ORDER BY q.starttime DESC;

6. 权限和限制

  • 要查询STL系统表,用户需要具有超级用户权限或对相关表具有SELECT权限
  • STL表数据在集群重启后仍然保留,但会定期清理旧数据
  • 对于长期存储和分析,建议将日志数据导出到其他存储系统

7. 性能考虑

  • 在查询STL表时,始终使用时间范围过滤以减少扫描的数据量
  • 考虑在非高峰时段执行这些分析查询
  • 对于生产环境,建议创建物化视图或定期将数据导出到专门的监控表
http://www.dtcms.com/a/528080.html

相关文章:

  • 告别信息孤岛:工业无线网桥实现跨车间、跨厂区统一组网
  • 7.2 按钮实验
  • 多语言网站思路柳州市安全教育平台
  • 触摸未来2025-10-25:蓝图绘制
  • 面向对象——设计模式(行为型)
  • 06-MySQL基础查询
  • 蓬莱网站建设哪家专业苏州智能网站开发
  • 医院慢病管理软件系统问题域需求分析文档(示例)
  • Java 大视界 -- Java 大数据机器学习模型在舆情分析中的情感倾向判断与话题追踪
  • 用于小样本故障增量学习的多视图 Shapelet 原型网络
  • 动态规划思想的延伸:计数模式再升级——巧妙捕捉「优美子数组」
  • 徐州提供网站建设要多少钱杭州房产网我爱我家官网
  • 鸿蒙NEXT系列之NDK UI监听组件事件
  • 20251025 分治总结
  • CentOS上安装dpkg的方法
  • 【C++ 泛型编程】基于哈希表封装 unordered_set(附完整源码解析)
  • 【Docker】docker部署一个服务
  • 【C++】set map 的使用
  • mormot.net.sock.pas的总体设计分析
  • 上海企业网站制作哪家专业wordpress适合做大型网站吗
  • 建设银行网站怎么看不见余额数字展馆设计
  • 【数组二分查找+数组反转】2022-11-19
  • 【新版发布】标准版PHP v5.6.4正式版,优化部分用户体验
  • Spring Boot3零基础教程,Profile 环境隔离用法,笔记55
  • 【MATLAB例程】二维环境定位,GDOP和CRLB的计算,锚点数=4的情况(附代码下载链接)
  • 英语“近音“易混单词
  • 代码随想录Day62|总结篇
  • 基于VMware和Cent OS的Docker Engine安装与配置
  • 十七、OpenCV中HighGUI模块的介绍和使用
  • 【JVM】详解 编译器原理与优化技术