如何检查哪个SQL查询是如此CPU密集型

时间:2016-03-16 14:27:19

标签: odbc progress-4gl openedge progress-db

有没有办法在_sqlsrv2进程中检查哪个查询是如此CPU密集型? 在那个时刻给我提供有关该过程中已执行查询的信息的东西。

有没有办法在不杀死_sqlsrv2进程的情况下终止该查询?

我找不到该主题的任何官方资料。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以查看客户端数据库请求缓存。

以下代码示例假设您具有对环境的ABL访问权限。如果不是,你将不得不使用SQL,但它不应该难以翻译"

下面的代码

我自己没有经常使用这个,但如果它对性能产生一些影响,我不会感到惊讶。

您需要在活动连接中开始缓存。这可以在连接本身中完成,也可以通过VST表远程完成(只要您的远程会话连接到同一个数据库),因此您需要能够识别您的连接。这可以通过进程ID完成。

一般如何启用缓存:

/* "_myconnection" is your current connection. You shouldn't do this */
FIND _myconnection NO-LOCK.

FIND  _connect WHERE _connect-usr = _myconnection._MyConn-userid.

/* Start caching */
_connect._Connect-CachingType = 3.

DISPLAY _connect WITH FRAME x1 SIDE-LABELS WIDTH 100 1 COLUMN.

/* End caching */
_connect._Connect-CachingType = 0.

您需要先通过顶级或其他计划识别您的流程。

然后你可以做类似的事情:

/* Assuming pid 21966 */
FIND FIRST _connect NO-LOCK WHERE _Connect._Connect-Pid = 21966 NO-ERROR.
IF AVAILABLE _Connect THEN
    DISPLAY _connect.

您还可以查看_Connect-Type。 It should be 'SQLC' for SQL connections.

FOR EACH _Connect NO-LOCK WHERE _Connect._connect-type = "SQLC":
    DISPLAY _connect._connect-type.
END.  

最重要的是在单独的环境中执行此操作。如果你不能在测试环境中首先尝试它。

这是一个很好的guide

答案 1 :(得分:0)

您可以使用像这样的选择:

select
    c."_Connect-type",
    c."_Connect-PID" as 'PID',
    c."_connect-ipaddress" as 'IP',
    c."_Connect-CacheInfo"
from
    pub."_connect" c
where
    c."_Connect-CacheInfo" is not null 

但首先您需要启用连接缓存,请遵循此example