从 JDBC 连接获取有关 SQL 查询的元数据(例如扫描的总数据)?
Getting metadata about a SQL query (eg total data scanned) from JDBC connection?
我有兴趣从与 Teradata DB 的 JDBC 连接中获取特定于查询的元数据数据。
查询后,我可以查询 ResultSetMetadata
的游标,它会提供有关 ResultSet
本身的信息(列名称和类型、列属性等),但不会告诉我我知道查询做了什么。
我能想到的最接近的事情是执行第二个查询,在主查询前面加上 EXPLAIN
,然后解析这个解释的结果以获得 estimates(非真实数据)用于线轴使用和时间成本。
有什么方法可以指定我希望跟踪查询对资源的使用情况吗?
对于任何对此感兴趣的人,答案是不,这不能通过相同的连接来完成。
我最终采用的方法可能是 enable query logging
begin query logging with objects, sql, usecount, utilityinfo LIMIT SQLTEXT=0 on all;
begin query logging with objects, sql limit threshold = 5 elapsedsec and sqltext=0 on VIEWPOINT;
然后使用类似于 this forum post 中概述的方法查询 DBC.DBQLogTbl
和 DBC.DBQLSQLTbl
,如果可能的话流式传输或简单地半定期批量查询以获得 'real time-ish' 指标。
select top 50
ProcID
, QueryID
, AMPCPUTime
, MaxAMPCPUTime * (hashamp () + 1) CPUImpact
, CAST (100 - ((AmpCPUTime / (hashamp () + 1)) * 100 / NULLIFZERO (MaxAMPCPUTime)) AS INTEGER) "CPUSkew%"
, TotalIOCount
, MaxAMPIO * (hashamp () + 1) IOImpact
, CAST (100 - ((TotalIOCount / (hashamp () + 1)) * 100 / NULLIFZERO (MaxAMPIO) ) AS INTEGER) "IOSkew%"
, AMPCPUTime * 1000 / nullifzero (TotalIOCount) LHR
, TotalIOCount / nullifzero (AMPCPUTime * 1000) RHL
, ParserCPUTime
, Queryband
, Substr(QueryText,1,2000) QueryText
from
/* For archived DBQL
dbql_arch.dbqlogtbl_hst where logdate=1131201
and ampcputime>0
*/
/* For online DBQL*/
dbc.dbqlogtbl where
cast(cast(starttime as char(10)) as date) = '2013-12-18' (date)
and ampcputime>0
order by CPUImpact desc;
我有兴趣从与 Teradata DB 的 JDBC 连接中获取特定于查询的元数据数据。
查询后,我可以查询 ResultSetMetadata
的游标,它会提供有关 ResultSet
本身的信息(列名称和类型、列属性等),但不会告诉我我知道查询做了什么。
我能想到的最接近的事情是执行第二个查询,在主查询前面加上 EXPLAIN
,然后解析这个解释的结果以获得 estimates(非真实数据)用于线轴使用和时间成本。
有什么方法可以指定我希望跟踪查询对资源的使用情况吗?
对于任何对此感兴趣的人,答案是不,这不能通过相同的连接来完成。
我最终采用的方法可能是 enable query logging
begin query logging with objects, sql, usecount, utilityinfo LIMIT SQLTEXT=0 on all;
begin query logging with objects, sql limit threshold = 5 elapsedsec and sqltext=0 on VIEWPOINT;
然后使用类似于 this forum post 中概述的方法查询 DBC.DBQLogTbl
和 DBC.DBQLSQLTbl
,如果可能的话流式传输或简单地半定期批量查询以获得 'real time-ish' 指标。
select top 50
ProcID
, QueryID
, AMPCPUTime
, MaxAMPCPUTime * (hashamp () + 1) CPUImpact
, CAST (100 - ((AmpCPUTime / (hashamp () + 1)) * 100 / NULLIFZERO (MaxAMPCPUTime)) AS INTEGER) "CPUSkew%"
, TotalIOCount
, MaxAMPIO * (hashamp () + 1) IOImpact
, CAST (100 - ((TotalIOCount / (hashamp () + 1)) * 100 / NULLIFZERO (MaxAMPIO) ) AS INTEGER) "IOSkew%"
, AMPCPUTime * 1000 / nullifzero (TotalIOCount) LHR
, TotalIOCount / nullifzero (AMPCPUTime * 1000) RHL
, ParserCPUTime
, Queryband
, Substr(QueryText,1,2000) QueryText
from
/* For archived DBQL
dbql_arch.dbqlogtbl_hst where logdate=1131201
and ampcputime>0
*/
/* For online DBQL*/
dbc.dbqlogtbl where
cast(cast(starttime as char(10)) as date) = '2013-12-18' (date)
and ampcputime>0
order by CPUImpact desc;