TopSQL查询示例
本章节以查询TPC-DS样例数据的作业为例,演示如何查看实时TopSQL和历史TopSQL。
配置集群参数
查询TopSQL资源监控信息之前,需要先配置相关的GUC参数,以便能查询到作业的资源监控历史信息或归档信息。步骤如下:
- 登录GaussDB(DWS)管理控制台。
- 在“集群管理”页面,找到所需要的集群,单击集群名称,进入集群详情页面。
- 单击“参数修改”标签页,可以看到当前集群的参数值。
- 修改参数resource_track_duration值为合适的值,单击“保存”按钮进行保存。
enable_resource_record开关打开后,会引起存储空间膨胀及轻微性能影响,不用时请关闭。
- 返回集群管理页面,单击右上角的刷新按钮,等待集群参数配置完成。
TopSQL查询示例
本示例以TPC-DS样例数据为例。
- 打开SQL客户端工具,连接到您的数据库。
- 使用explain语句查询所要执行的SQL语句的预估代价,从而可以确定该SQL语句是否会进行资源监控。
默认执行代价大于resource_track_cost(默认值为100000)的查询才会进行资源监控,用户才可以查询到相关的资源监控信息。
例如,执行如下语句查询该SQL语句的预估执行代价:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
SET CURRENT_SCHEMA = tpcds; EXPLAIN WITH customer_total_return AS ( SELECT sr_customer_sk as ctr_customer_sk, sr_store_sk as ctr_store_sk, sum(SR_FEE) as ctr_total_return FROM store_returns, date_dim WHERE sr_returned_date_sk = d_date_sk AND d_year =2000 GROUP BY sr_customer_sk, sr_store_sk ) SELECT c_customer_id FROM customer_total_return ctr1, store, customer WHERE ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2 FROM customer_total_return ctr2 WHERE ctr1.ctr_store_sk = ctr2.ctr_store_sk) AND s_store_sk = ctr1.ctr_store_sk AND s_state = 'TN' AND ctr1.ctr_customer_sk = c_customer_sk ORDER BY c_customer_id limit 100;
查询结果如下所示,第一行的E-costs列的值即为当前语句的预估代价。
图1 explain查询结果
本示例为了演示TopSQL的资源监控功能,需要将resource_track_cost参数设置为比explain查询结果中的预估代价小的一个值,例如100,设置方法请参见resource_track_cost。
在完成本示例后,仍然要将resource_track_cost设置为原始的默认值100000或者一个比较合理的值,否则参数值太小会影响数据库性能。
- 执行SQL语句。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
SET CURRENT_SCHEMA = tpcds; WITH customer_total_return AS (SELECT sr_customer_sk as ctr_customer_sk, sr_store_sk as ctr_store_sk, sum(SR_FEE) as ctr_total_return FROM store_returns,date_dim WHERE sr_returned_date_sk = d_date_sk AND d_year =2000 GROUP BY sr_customer_sk ,sr_store_sk) SELECT c_customer_id FROM customer_total_return ctr1, store, customer WHERE ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2 FROM customer_total_return ctr2 WHERE ctr1.ctr_store_sk = ctr2.ctr_store_sk) AND s_store_sk = ctr1.ctr_store_sk AND s_state = 'TN' AND ctr1.ctr_customer_sk = c_customer_sk ORDER BY c_customer_id limit 100;
- 在SQL语句执行期间,查询该条SQL语句在当前CN上的Memory峰值的实时信息。
1
SELECT query,max_peak_memory,average_peak_memory,memory_skew_percent FROM gs_wlm_session_statistics ORDER BY start_time DESC;
含义:查询query级别的SQL语句的Memory峰值实时信息(语句在所有DN上的每秒最大Memory峰值,在所有DN上的每秒平均Memory峰值,在DN间的Memory倾斜率)
实时TopSQL资源监控信息的更多查询示例,请参见实时TopSQL。
- 等待3中的SQL执行完成,然后查询该语句执行期间的资源监控历史信息。
1
select query,start_time,finish_time,duration,status from gs_wlm_session_history order by start_time desc;
含义:查询query级别的SQL语句执行期间的历史信息(语句执行的开始时间,结束时间,实际执行时间,执行状态),时间单位为ms。
历史TopSQL资源监控信息的更多查询示例,请参见历史TopSQL。
- 等待3中的SQL执行结束的三分钟后,在info视图中查询该语句的资源监控历史信息。
如果设置参数enable_resource_record为“on”,且3中SQL的执行时间不小于resource_track_duration所设置的值,该条语句的历史信息将会在三分钟后被归档到gs_wlm_session_info视图中。
对于info视图,只支持在连接gaussdb数据库时查询。因此,请切换为连接gaussdb数据库后,再执行以下语句进行查询:
1
select query,start_time,finish_time,duration,status from gs_wlm_session_info order by start_time desc;