2011-07-20 88 views
4

使用vsql时,我想查看查询完成后需要多长时间才能运行。例如,当我运行:如何在Vertica中查询完成时显示查询时间?

select count(distinct key) from schema.table; 

我想看到这样的输出:

5678 
(1 row) 
total query time: 55 seconds.

如果这是不可能的,有没有衡量查询时间另一种方式?

回答

16

vsql类型:

\timing 

,然后按Enter键。你会喜欢你会看到:-)

重复这将关闭它。

+0

我假设你打算输入“vsql”而不是“vsqk”。 – geoffrobinson

+0

请注意,这是vsql客户端的本地时间安排(因此,这个时间也会包括您的查询花费排队等待其启动数据库服务器端的任何时间) – chinnychinchin

0

我不确定如何在vsql中启用该功能,或者如果可能的话。但是你可以从脚本中获得这些信息。

这里是伪代码(我用的perl):

print time 
system("vsql -c 'select * from table'"); 
print time 

或者把时间到一个变量,并做一些减法。

另一种选择是使用Toad等工具连接到Vertica,而不是使用vsql

3

关于你的问题的另一部分:

是有衡量查询时间另一种方式?

Vertica可以记录群集上执行的所有查询的历史记录,这是另一个查询时间源。在6.0之前,相关的系统表是QUERY_REPO,从6.0开始它是QUERY_REQUESTS

假设您在6.0或更高版本上,QUERY_REQUESTS.REQUEST_DURATION_MS将为您提供以毫秒为单位的查询持续时间。您可能如何使用QUERY_REQUESTS

例子:

 
    select * 
    from query_requests 
    where request_type = 'QUERY' 
    and user_name = 'dbadmin' 
    and start_timestamp >= CURRENT_DATE 
    and request ilike 'select%from%schema.table%' 
    order by start_timestamp; 

QUERY_PROFILES.QUERY_DURATION_USRESOURCE_ACQUISITIONS.DURATION_MS列也可能是你的兴趣。这里有情况下这些表的简短说明你还不熟悉:

RESOURCE_ACQUISITIONS - 保留有关系统中的每个资源池每个运行的请求获取的资源(内存,打开的文件句柄,线程)的信息。

QUERY_PROFILES - 提供有关已运行的查询的信息。