如何检查哪个 SQL 查询如此占用 CPU 资源



有没有办法检查哪个查询在_sqlsrv2进程中如此占用 CPU 资源?为我提供有关该过程中执行查询的信息。

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

我找不到这方面的任何官方材料。

谢谢你的任何帮助。

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

下面的代码示例假定您对环境具有 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型。对于 SQL 连接,它应该是"SQLC"。

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

最好是在单独的环境中执行此操作。如果您不能至少先在测试环境中尝试一下。

这是一个很好的指南。

你可以像这样使用选择:

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 

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

最新更新