作者介绍
shuobjli(李硕),腾讯云数据库专家工程师,主要研究方向为数据库优化器、执行器、索引管理等,目前主要负责CDW PG优化器方面的研发工作。
本文主要介绍CDW PG全局视图工具的最佳实践。CDW PG作为分布式数据库,执行query需要多个CN和DN交互运行,对于复杂查询,甚至会出现多层调用的情况。CN和DN出现生产者以及消费者之间的依赖关系,问题相对比较复杂,例如死锁、程序挂起、节点报错等情况。在没有有力定位工具的情况,很难在运维过程中在短时间内定位相关问题。本工具适用于以下场景:
CDW PG在运行过程中有多个节点参与,全局视图通过内部消息将所有节点的运行信息统一展示,并可以通过不同的过滤条件来定位相关的问题。每行显示一个服务器进程,同时详细描述与之关联的用户会话和查询,可以有效帮助用户分析排查当前运行的SQL任务以及异常问题。
全局视图 pg_stat_cluster_activity 由以下各列构成:
在使用全局视图的时候,以下问题需要注意:
本节针对一些特定场景介绍全局视图的使用方法,用户可不局限于以下的介绍。
通过下述SQL确认当前的连接用户和对应的连接机器。
SELECT datname,usename,client_addr,client_portFROM pg_stat_cluster_activitywhere client_addr is not null;
获取当前用户执行SQL信息。
SELECT queryid, nodename, datname,pid,queryFROM pg_stat_cluster_activitywhere query <> ''order by queryid, nodename;
可以得到如下结果:
其中同一个 Query 在不同的 CN 以及 DN 上有相同的 queryid,其中列 query 可以表示 CN 或 DN 上正在执行的查询或者查询片段。
查看当前运行中的耗时较长的SQL语句。
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的PID,然后利用下面的Query,把有问题Query的PID填到?处。
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的执行正在等待新的命令,所以为正常节点。
推荐阅读
关注腾讯云大数据公众号
邀您探索数据的无限可能
点击“阅读原文”,了解相关产品最新动态
↓↓↓