更新时间:2022-08-16 GMT+08:00

TopSQL查询示例

本章节以查询TPC-DS样例数据的作业为例,演示如何查看实时TopSQL历史TopSQL

配置集群参数

查询TopSQL资源监控信息之前,需要先配置相关的GUC参数,以便能查询到作业的资源监控历史信息或归档信息。步骤如下:

  1. 登录GaussDB(DWS)管理控制台。
  2. 在“集群管理”页面,找到所需要的集群,单击集群名称,进入集群详情页面。
  3. 单击“参数修改”标签页,可以看到当前集群的参数值。
  4. 修改参数resource_track_duration值为合适的值,单击“保存”按钮进行保存。

    enable_resource_record开关打开后,会引起存储空间膨胀及轻微性能影响,不用时请关闭。

  5. 返回集群管理页面,单击右上角的刷新按钮,等待集群参数配置完成。

TopSQL查询示例

本示例以TPC-DS样例数据为例。

  1. 打开SQL客户端工具,连接到您的数据库。
  2. 使用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或者一个比较合理的值,否则参数值太小会影响数据库性能。

  3. 执行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;
    

  4. 在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

  5. 等待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

  6. 等待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;