【问题标题】:How to check which SQL query is so CPU intensive如何检查哪个 SQL 查询占用大量 CPU
【发布时间】:2016-07-02 12:03:28
【问题描述】:

是否有任何可能的方法来检查 _sqlsrv2 进程中哪个查询占用大量 CPU 资源? 可以为我提供有关在那一刻执行的查询的信息。

有什么方法可以在不终止 _sqlsrv2 进程的情况下终止该查询?

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

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    下面的代码示例假定您对环境具有 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.
    

    您需要首先通过 top 或其他程序识别您的进程。

    然后你可以这样做:

    /* 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

    【讨论】:

      【解决方案2】:

      您可以像这样使用 Select:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 2011-05-11
        相关资源
        最近更新 更多