分析查询资源消耗

Vertica 收集所有查询(包括那些失败的查询)的资源使用情况数据,并将这些数据汇总到系统表 QUERY_CONSUMPTION 中。这些数据包括有关每个查询的以下信息:

  • 时钟持续时间

  • 消耗的 CPU 周期

  • 保留和分配的内存

  • 发送和接收的网络字节数

  • 读取和写入的磁盘字节数

  • 溢出的字节数

  • 分配的线程数

  • 输出到客户端的行数

  • 读取和写入的行数

可以通过查询的事务和语句 ID 获取有关各查询的信息。TRANSACTION_IDSTATEMENT_ID 列为每个查询语句提供唯一的键。

例如,会分析以下查询:

=> PROFILE SELECT pd.category_description AS 'Category', SUM(sf.sales_quantity*sf.sales_dollar_amount) AS 'Total Sales'
     FROM store.store_sales_fact sf
     JOIN public.product_dimension pd ON pd.product_version=sf.product_version AND pd.product_key=sf.product_key
     GROUP BY pd.category_description;
NOTICE 4788:  Statement is being profiled
HINT:  Select * from v_monitor.execution_engine_profiles where transaction_id=45035996274751822 and statement_id=1;
NOTICE 3557:  Initiator memory for query: [on pool general: 256160 KB, minimum: 256160 KB]
NOTICE 5077:  Total memory required by query: [256160 KB]
             Category             | Total Sales
----------------------------------+-------------
 Non-food                         |  1147919813
 Misc                             |  1158328131
 Medical                          |  1155853990
 Food                             |  4038220327
(4 rows)

可以使用 Vertica 返回的事务和语句 ID 从 QUERY_CONSUMPTION 获取分析数据,例如,通过网络为给定查询发送的总字节数:

=> SELECT NETWORK_BYTES_SENT FROM query_consumption WHERE transaction_id=45035996274751822 AND statement_id=1;
 NETWORK_BYTES_SENT
--------------------
             757745
(1 row)

QUERY_CONSUMPTION 与 EXECUTION _ENGINE_PROFILES

QUERY_CONSUMPTION 包括它从 执行_引擎_配置文件 中的计数器汇总的数据。在前面的示例中,NETWORK_BYTES_SENT 汇总了可通过 EXECUTION_ENGINE_PROFILES 中的多个计数器访问的数据。EXECUTION_ENGINE_PROFILES 的等效查询如下所示:

=> SELECT operator_name, counter_name, counter_tag, SUM(counter_value) FROM execution_engine_profiles
     WHERE transaction_id=45035996274751822 AND statement_id=1 AND counter_name='bytes sent'
     GROUP BY ROLLUP (operator_name, counter_name, counter_tag) ORDER BY 1,2,3, GROUPING_ID();
 operator_name | counter_name |          counter_tag           |  SUM
---------------+--------------+--------------------------------+--------
 NetworkSend   | bytes sent   | Net id 1000 - v_vmart_node0001 | 252471
 NetworkSend   | bytes sent   | Net id 1000 - v_vmart_node0002 | 251076
 NetworkSend   | bytes sent   | Net id 1000 - v_vmart_node0003 | 253717
 NetworkSend   | bytes sent   | Net id 1001 - v_vmart_node0001 |    192
 NetworkSend   | bytes sent   | Net id 1001 - v_vmart_node0002 |    192
 NetworkSend   | bytes sent   | Net id 1001 - v_vmart_node0003 |      0
 NetworkSend   | bytes sent   | Net id 1002 - v_vmart_node0001 |     97
 NetworkSend   | bytes sent   |                                | 757745
 NetworkSend   |              |                                | 757745
               |              |                                | 757745
(10 rows)

QUERY_CONSUMPTIONEXECUTION_ENGINE_PROFILES 也有如下不同:

  • QUERY_CONSUMPTION 保存来自所有查询的数据,无论其持续时间如何,也无论是否显式分析它们。它还包括有关不成功查询的数据。

  • EXECUTION_ENGINE_PROFILES 仅包括来自执行长度超过设定阈值或您显式分析的查询的数据。它也不包括不成功查询的数据。