日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

連接數管理

更新時間:

本文將為您介紹如何對實例中的連接進行診斷和管理。

連接和Query管理概述

Hologres兼容PostgreSQL,可以通過查詢pg_stat_activity視圖信息來查看實例連接信息,以達到分析實例連接狀態和診斷運行SQL的目的。具體涉及的操作內容如下所示:

查詢pg_stat_activity視圖信息

pg_stat_activity是一個非常有用的視圖,可以分析排查當前運行的SQL任務以及一些異常問題。您可以執行如下命令查看實例連接和Query的運行信息。

select * from pg_stat_activity ;

pg_stat_activity視圖的參數說明如下所示。

字段

描述

datid

Hologres后端連接到的數據庫的OID。

datname

Hologres后端連接到的數據庫的名稱。

pid

Hologres后端的進程ID。

usesysid

登錄到Hologres后端的用戶OID。

usename

當前連接的用戶名。

application_name

客戶端的應用類型。

其中常見的應用類型如下:

  • 阿里云Flink(VVR版):{client_version}_ververica-connector-hologres

  • 開源Flink:{client_version}_hologres-connector-flink

  • DataWorks數據集成離線同步讀取Hologres:datax_{jobId}

  • DataWorks數據集成離線同步寫入Hologres:{client_version}_datax_{jobId}

  • DataWorks數據集成實時同步:{client_version}_streamx_{jobId}

  • HoloWeb:holoweb

  • 在MaxCompute中通過外部表的方式訪問Hologres:MaxCompute

  • Holo Client發起的讀Hologres Binlog進程:holo_client_replication。該類型的任務不會顯示Query內容。

  • 其余應用建議業務上在連接Hologres時連接串上顯式指定application_name

client_addr

客戶端的IP地址。

顯示的IP地址可能是被解析過的,不保證一定是源端IP。

client_hostname

客戶端的主機名。

client_port

客戶端的端口。

backend_start

后臺進程開始的時間。

xact_start

該進程的當前事務被啟動的時間。

  • 如果沒有活動事務,則為空。

  • 如果當前查詢是該進程的第一個事務,這一列等于query_start

query_start

當前活動查詢開始的時間,如果當前連接狀態不是active,取值為上一個查詢開始的時間。

state_change

連接的狀態(state)上一次被改變的時間。

wait_event_type

后端正在等待的事件類型,如果不存在則為NULL。可能的取值有:

  • LWLock:后端正在等待一個輕量級鎖。

  • Lock:后端正在等待一個重量級鎖。wait_event將標識等待的鎖的類型。

  • BufferPin:服務器進程正在等待訪問一個數據緩沖區,而此時沒有其他進程正在檢查該緩沖區。

  • Activity:服務器進程處于閑置狀態。被用于在其主處理循環中等待活動的系統進程。

  • Extension:服務器進程正在一個擴展模塊中等待活動。

  • Client:服務器進程正在等待來自用戶應用的某種查詢,并且該服務器預期某種與其內部處理無關的事情發生。

  • PC:服務器進程正在等待來自服務器中另一個進程的某種活動。

  • Timeout:服務器進程正在等待一次超時發生。

  • IO:服務器進程正在等待一次IO完成。

wait_event

如果后端當前正在等待,則是等待事件的名稱,否則為 NULL。

state

表示連接的狀態。常見的狀態如下:

  • active:活躍。

  • idle:空閑。

  • idle in transaction:長事務中的空閑狀態。

  • idle in transaction(Aborted):已失敗事務中的空閑狀態。

  • \N: 狀態為空,表示非用戶連接的進程,一般屬于系統后臺的維護進程,可以忽略。

backend_xid

Hologres后端的頂層事務標識符。

backend_xmin

當前后端的xmin范圍。

query

后端最近執行的查詢。如果stateactive,將會顯示當前正在執行的查詢。在所有其他狀態下,顯示上一個被執行的查詢。

backend_type

當前后端的類型。可能的類型為autovacuum launcher、autovacuum worker、logical replication launcher、logical replication worker、parallel worker、background writer、client backend、checkpointer、startup、walreceiver、walsender以及 walwriter。除此之外還包括后端的執行組件,例如PQE等。

說明

需要關注client backend類型,代表應用的連接。

使用說明

僅超級管理員(Superuser)可以看到所有連接信息,普通用戶只能看到自己的連接信息。

查詢實例的默認最大連接數

不同的實例規格對應不同的默認連接數,您可以通過以下命令查詢當前實例規格的最大連接數。命令執行完成后顯示結果為單個FrontEnd節點的連接數,總連接數需要乘實例的FrontEnd節點數,不同實例的Frontend節點數請參見實例規格概述

  • 查詢當前實例的最大連接數,Hologres V1.3.23及以上版本支持。

    select instance_max_connections();
  • 查詢單個FrontEnd(FE)節點的最大連接數。實例總連接數即為FE數量乘以單個節點的最大連接數。

    show max_connections;

HoloWeb可視化管理連接

您可以通過HoloWeb可視化查看活躍連接并進行管理。

  1. 登錄HoloWeb控制臺,詳情請參見連接HoloWeb并執行查詢

  2. 單擊頂部導航欄的診斷與優化

  3. 在左側導航欄單擊活躍連接管理

  4. 進入活躍連接管理頁面,配置好參數,可查看實例的連接以及相關信息。

    說明

    僅Superuser賬號可以看到全部連接信息,普通用戶只能看到自己的連接信息。

    參數說明如下。

    參數

    說明

    實例名

    Hologres實例名稱。

    數據庫

    Hologres數據庫名稱,可選擇指定數據庫,不選擇則默認展示全部數據庫。

    Database

    連接的數據庫名稱。

    說明

    若數據庫名稱為Postgres,則說明是后臺運維連接,可忽略。

    User Name

    連接的用戶賬號。

    Client Address

    客戶端IP地址,但不一定是真實的IP,可能是經過路由轉發的出口IP。

    Application Name

    連接的應用名稱。

    State

    連接的狀態,常見的狀態如下。

    • active:活躍。

    • idle:空閑。

    • idle in transaction:長事務中的空閑狀態。

    • idle in transaction(Aborted):已失敗事務中的空閑狀態。

    Query Start

    Query開始時間。

    Query

    執行的Query。

    說明

    若是Query太長,可能會被截斷。

    PID

    Query的pid。

    操作

    • Kill:不符合預期的連接可直接Kill或者批量刪除。

    • 詳情:單擊可以看到詳細的連接信息。

通過SQL查詢連接信息

若您更傾向于使用SQL的方式查詢連接信息,可以通過以下方式操作。

  1. 查詢當前數據庫的連接數。

    您可以通過如下命令查看當前數據庫的連接數,更多關于參數的說明,請參見參數說明

    • Hologres V1.1及以上版本。

      SELECT  datname::TEXT
              ,COUNT(1) AS COUNT
      FROM    pg_stat_activity
      WHERE   backend_type = 'client backend'
      AND     application_name != 'hologres'
      GROUP BY datname::TEXT;
    • Hologres V0.10及以下版本。

      SELECT  datname
              ,COUNT(1) AS COUNT
      FROM    pg_stat_activity
      WHERE   backend_type = 'client backend'
      AND     application_name != 'hologres'
      GROUP BY datname;
  2. 查看每個連接的狀態。

    您可以在Hologres管控臺通過HoloWeb查看每個實例的連接狀態,也可以執行如下語句,通過查詢pg_stat_activity視圖來獲取所有JDBC或PSQL連接的狀態。

    select * from pg_stat_activity where backend_type = 'client backend' and state = '<statename>';

    其中statename是需要填寫的狀態參數名,包括以下幾種:

    • idle:空閑連接,表示進程在等待新的客戶端命令。

    • active:活躍連接,表示進程正在執行查詢操作。

    • idle in transaction:表示進程處于一個事務中,但是當前沒有執行查詢操作。

    • idle in transaction (aborted):表示進程處于一個事務中,該事務存在語句錯誤,并且進程當前沒有執行查詢操作。

    • fastpath function call:表示進程正在執行一個fast-path函數。

    • disabled:表示進程的track activities被禁用。

    例如,您可以執行如下命令查詢當前實例的空閑連接。

    select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';

    Holoweb等Hologres周邊組件會通過JDBC的方式占用一定的連接數,如果您的連接數滿足需求,無需關心此類連接數的占用。當SQL連接數長期接近或達到max_connections時,意味著您需要檢查您的應用是否存在連接數泄漏情況,需要在應用端合理設置連接池大小,或者您也可以根據下面章節釋放空閑連接,詳情請參見釋放連接

  3. 查看每個接入節點的連接數

    查詢實例當前每個FrontEnd節點的連接數,Hologres V1.3.23版本起支持。當前沒有連接使用的FE節點不會顯示在查詢結果中。

    select * from hologres.hg_connections;

    查詢結果字段含義如下:

    • fe_id:FE節點的編碼。

    • used_connections:FE節點當前已使用的連接數。

    • max_connections:FE節點的最大連接數,同show max_connections命令的返回值。

釋放連接

如果您遇到如下情況,則說明系統連接數(或者某個接入節點)已經達到上限:

  • 連接數達到甚至超出max_connections的取值,您可以在Hologres管控臺的監控告警頁查看連接數。

  • 產生FATAL: sorry, too many clients already connection limit exceeded for superusers報錯。

  • 產生FATAL: remaining connection slots are reserved for non-replication superuser connections報錯。

當您有上述情況產生,可以通過Superuser賬號連接實例,執行如下語句查看空閑連接是否過多。

select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';

如果查詢結果顯示空閑進程過多,并且確定是無用的空閑連接時,可以找到上述語句結果中的pid字段,并執行如下語句釋放空閑連接。更多關于參數的說明,請參見參數說明

select pg_cancel_backend(<pid>);     -- cancel該連接上的query
select pg_terminate_backend(<pid>);  --殺掉對應的后臺連接進程

--批量終止后臺IDLE連接進程,釋放連接
SELECT pg_terminate_backend(pid)
        ,query
        ,datname
        ,usename
        ,application_name
        ,client_addr
        ,client_port
        ,backend_start
        ,state
FROM    pg_stat_activity
WHERE   length(query) > 0
AND     pid != pg_backend_pid()
AND     backend_type = 'client backend'
AND     state = 'idle'
AND     application_name != 'hologres'
AND     query not like '%pg_cancel_backend%';

管理員預留連接

Hologres會為Superuser預留連接,不同的實例規格預留的連接數不同,詳情請參見實例規格概述。Superuser預留連接用于在連接數達到最大時對連接進行管理操作(如終止idle連接),普通用戶的連接數最大為max_connections減去預留連接。在實踐中,不建議普通用戶使用Superuser賬號操作數據庫,否則會導致連接全部占滿,且無法通過管理渠道釋放連接。

單個用戶連接數限制

限制單個用戶的連接數上限

由于Hologres兼容PostgreSQL,因此支持為單個用戶設置連接數上限,以防止某個用戶占用過多連接造成資源浪費。

通過執行如下語句限制單個用戶在單個接入節點上的最大連接數,如果實例有多個節點,則總的連接數上限為單個節點連接數 * 節點數

  • 語法示例

    ALTER ROLE "云賬號ID" CONNECTION LIMIT <number>; 
  • 參數說明

    參數

    說明

    云賬號ID

    需要限制的賬號ID,如果為RAM用戶,需要在賬號UID前加p4_。

    更多關于賬號的說明,請參見賬號概述

    number

    限制的連接數個數。

    取值范圍為[-1 , N],-1表示取消用戶的連接數限制。

  • 使用示例

    如下示例限制RAM用戶283813xxxx一個節點最多只有一個連接。

    ALTER ROLE "p4_283813xxxx" CONNECTION LIMIT 1; 

查看每個用戶限制的單節點連接數

通過執行如下語句查看當前已經為實例用戶設置的單節點限制連接數。

SELECT rolname, rolconnlimit
FROM pg_roles
WHERE rolconnlimit <> -1;

查詢示例結果如下:

       rolname | rolconnlimit 
---------------+--------------
 p4_283813xxxx |      1
(1 row)

自動釋放空閑連接

當實例存在連接數長期接近或達到上限值時,可能存在連接泄漏情況,可以開啟自動釋放空閑連接功能來釋放長期不使用連接。當連接空閑時間(無SQL執行)超過設置時間時,連接會自動被斷開。

  • 使用限制

    僅Hologres V0.10.25及以上版本支持自動釋放空閑連接功能,如果您的實例是V0.10.25以下版本,請您使用自助升級或加入實時數倉Hologres交流群申請升級實例。加入在線支持釘釘群請參見如何獲取更多的在線支持?

  • 語法示例

    • session級別。

      -- 連接在10分鐘沒有執行sql的情況,會自動斷開,單位為毫秒。
      SET idle_session_timeout = 600000;
    • 數據庫級別。

      -- 連接在10分鐘沒有執行sql的情況,會自動斷開,單位為毫秒。
      ALTER DATABASE  <db_name> SET idle_session_timeout = 600000;

      db_name為要開啟自動釋放空閑連接功能的數據庫名稱。

連接數使用最佳實踐

在使用Hologres連接數時的最佳實踐建議如下所示。

  • 善用Superuser賬號

    • 不建議使用Suerpser賬號直接操作實例或者連接應用,否則當連接數超過實例默認連接數之后,賬號將無法連接實例。

    • 建議專門設置一個Superuser賬號為運維賬號,當出現連接數超過實例默認連接數、Query卡死等緊急情況時,使用該Superuser賬號登錄HoloWeb管理連接和Query。

  • 設置合理的連接池

    • 為了業務安全考慮,Hologres不會在后臺自動釋放連接,建議業務上給應用設置合理的連接池機制,讓空閑連接及時釋放。

    • 定期清理空閑連接,防止空閑連接占用過多連接影響線上業務。

常見報錯

  • 錯誤提示:執行sql時報錯:terminating connection due to idle state timeout

  • 可能原因:為實例設置了自動釋放連接的超時,超過設置的超時時間后,連接就會自動斷連,然后出現報錯。

  • 解決方案:重新連接,或者修改空閑連接超時時間為更大的數值,修改空閑連接超時時間操作請參見自動釋放空閑連接