如果查詢長時間沒有返回結果,則需要確認查詢是否處于鎖等待狀態。AnalyticDB PostgreSQL版新增鎖診斷功能,幫助您快速診斷數據庫中的鎖情況。

前提條件

  • 實例資源類型為存儲彈性模式。
  • 引擎版本為6.0。

操作步驟

  1. 登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺
  2. 在控制臺左上角,選擇實例所在地域。
  3. 找到目標實例,單擊實例ID。
  4. 在左側導航欄中,選擇診斷與優化 > 查詢分析
  5. 單擊鎖診斷頁簽。
  6. 鎖診斷頁面介紹如下。
    鎖診斷列表

    您可以根據關鍵字用戶名數據庫過濾條件查詢時間來過濾鎖診斷信息。

    鎖診斷列表信息如下:

    參數 說明
    SQL 查詢語句的SQL文本。
    開始時間 查詢語句開始執行的時間。
    進程ID 查詢語句所屬的進程ID。
    會話ID 查詢語句的會話ID。
    數據庫 執行該查詢語句的數據庫。
    狀態 查詢語句的狀態。
    等待時長 查詢語句的等待時長。
    用戶名 執行該查詢語句的用戶。
  7. 單擊目標診斷信息操作列的診斷,即可查看鎖等待屬性鎖診斷詳情
    鎖診斷屬性和詳情

處理方法

如果查詢長時間未返回結果且鎖診斷頁面顯示查詢狀態為鎖等待,您可以選擇等待之前的查詢完成后系統自動執行您的查詢任務,也可以結束造成阻塞的查詢任務。

您可以取消(Cancel)或結束(Kill)造成阻塞的查詢,方法如下。

說明 只有高權限(superuser權限)賬號才能取消或結束查詢。
  • 取消查詢

    查詢所屬的會話必須在運行中狀態才能取消該查詢,取消查詢后數據庫需要花費一定的時間來做清理和事務的回滾。取消查詢語句如下:

    SELECT pg_cancel_backend(<進程ID>);

    如果會話已經處于空閑(Idle)狀態,則需要使用結束查詢的方法。

  • 結束查詢

    結束查詢語句如下:

    SELECT pg_terminate_backend(<進程ID>);

相關文檔

AnalyticDB PostgreSQL版還支持通過pg_stat_activity視圖查看SQL的運行信息,詳細信息,請參見通過pg_stat_activity分析診斷正在執行的SQL

相關API

API 說明
DescribeWaitingSQLRecords 獲取鎖診斷列表。
DescribeWaitingSQLInfo 獲取鎖診斷詳細信息。