前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >打造次世代分析型数据库(五):复杂查询分析工具

打造次世代分析型数据库(五):复杂查询分析工具

作者头像
腾讯云大数据
发布2022-09-09 12:10:16
4760
发布2022-09-09 12:10:16
举报
文章被收录于专栏:腾讯云大数据腾讯云大数据

作者介绍

shuobjli(李硕),腾讯云数据库专家工程师,主要研究方向为数据库优化器、执行器、索引管理等,目前主要负责CDW PG优化器方面的研发工作。

背景介绍

本文主要介绍CDW PG全局视图工具的最佳实践。CDW PG作为分布式数据库,执行query需要多个CN和DN交互运行,对于复杂查询,甚至会出现多层调用的情况。CN和DN出现生产者以及消费者之间的依赖关系,问题相对比较复杂,例如死锁、程序挂起、节点报错等情况。在没有有力定位工具的情况,很难在运维过程中在短时间内定位相关问题。本工具适用于以下场景:

  1. 定位问题 Query 所在的 CN 节点
  2. 通过错误 ID 定位对应的 DN 节点
  3. 出现进程挂起的状况,定位相关的问题节点

总体介绍

CDW PG在运行过程中有多个节点参与,全局视图通过内部消息将所有节点的运行信息统一展示,并可以通过不同的过滤条件来定位相关的问题。每行显示一个服务器进程,同时详细描述与之关联的用户会话和查询,可以有效帮助用户分析排查当前运行的SQL任务以及异常问题。

全局视图表介绍

全局视图 pg_stat_cluster_activity 由以下各列构成:

注意事项

在使用全局视图的时候,以下问题需要注意:

  • 全局对内存表列以及系统视图进行了修改,因此需要修改每个节点的- postgresql.conf,然后重启集群,extension才可生效。
  • 只有superuser用户或者是正在报告的进程的拥有者,才可以使用pg_stat_activity视图。

使用场景

本节针对一些特定场景介绍全局视图的使用方法,用户可不局限于以下的介绍。

查看连接信息

通过下述SQL确认当前的连接用户和对应的连接机器。

代码语言:javascript
复制
SELECT datname,usename,client_addr,client_portFROM pg_stat_cluster_activitywhere client_addr is not null;

查看SQL运行信息

获取当前用户执行SQL信息。

代码语言:javascript
复制
SELECT queryid, nodename, datname,pid,queryFROM pg_stat_cluster_activitywhere query <> ''order by queryid, nodename;

可以得到如下结果:

其中同一个 Query 在不同的 CN 以及 DN 上有相同的 queryid,其中列 query 可以表示 CN 或 DN 上正在执行的查询或者查询片段。

查看耗时较长的查询

查看当前运行中的耗时较长的SQL语句。

代码语言:javascript
复制
select current_timestamp - query_start as runtime,queryid, nodename, datname, state, queryfrom pg_stat_cluster_activitywhere state != 'idle' and query <> ''order by runtime desc;

其中 runtime 表示查询执行的时间,可以根据目前查询执行的时间进行排序,找出目前执行时间最长的查询。

Query执行过程中挂起

Query在执行过程中挂起,定位出现问题的节点信息。利用前面的办法定位到挂起的Query的PID,然后利用下面的Query,把有问题Query的PID填到?处。

代码语言:javascript
复制
select queryid, nodename, datid AS datid, datname AS datname, pid,wait_event_type, wait_event, wait_event_info, local_fid, state, queryfrom pg_stat_cluster_activitywhere queryid = (select queryidfrom pg_stat_cluster_activitywhere pid= ? )

第一行表示 cn001 的数据,wait_event_type 为 FN 说明 cn001 在等待 FN 类型 event,wait_event 为 FnRecieveData 表 cn001 在等待数据,wait_event_info为40,说明在等待 FID40 的数据;

第三行表示dn001的数据,dn001的local_fid是40,且wait_event_type以及wait_event为空,说明dn001没有任何事件等待,所以dn001可能为有问题的节点。

第四行表示dn002的数据,dn002等待事件为ClientRead说明已经完成Fragment的执行正在等待新的命令,所以为正常节点。

推荐阅读

关注腾讯云大数据公众号

邀您探索数据的无限可能

点击“阅读原文”,了解相关产品最新动态

↓↓↓

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • 总体介绍
  • 全局视图表介绍
  • 注意事项
  • 使用场景
    • 查看连接信息
      • 查看SQL运行信息
        • 查看耗时较长的查询
          • Query执行过程中挂起
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档