分析查询资源消耗
Vertica 收集所有查询(包括那些失败的查询)的资源使用情况数据,并将这些数据汇总到系统表
QUERY_CONSUMPTION
中。这些数据包括有关每个查询的以下信息:
-
时钟持续时间
-
消耗的 CPU 周期
-
保留和分配的内存
-
发送和接收的网络字节数
-
读取和写入的磁盘字节数
-
溢出的字节数
-
分配的线程数
-
输出到客户端的行数
-
读取和写入的行数
可以通过查询的事务和语句 ID 获取有关各查询的信息。TRANSACTION_ID
和 STATEMENT_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
保存来自所有查询的数据,无论是否显式分析。
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_CONSUMPTION
和 EXECUTION_ENGINE_PROFILES
也有如下不同:
-
QUERY_CONSUMPTION
保存来自所有查询的数据,无论其持续时间如何,也无论是否显式分析它们。它还包括有关不成功查询的数据。 -
EXECUTION_ENGINE_PROFILES
仅包括来自执行长度超过设定阈值或您显式分析的查询的数据。它也不包括不成功查询的数据。