資源隊列介紹
當你安裝好資料庫的時候就會有一個預設的資源隊列 pg_default,所有使用者預設使用該隊列。
GPDB建議你對不同類型的使用者建立不同的資源隊列,比如你有超級使用者,WEB查詢使用者,報表使用者還有個人使用者等,你就需要根據使用者使用場景和需求的不同,建立不同的資源隊列進行配置設定。資源隊列主要做了以下工作:
- 查詢數。對使用者最大查詢的并發數進行控制。
- 記憶體。對使用者查詢需要的記憶體資源進行控制。
- 優先級。對不同資源隊列進行優先級區分。
- 查詢成本。對每個查詢需要的查詢成本進行控制,此處的查詢成本是指執行計劃中的costs。
一個資源隊列可以對應多個使用者,但是一個使用者隻能有一個有效注冊的資源隊列。
資源隊列如何起作用
在世紀執行過程中,如果一個SQL執行的所需要的資源沒有超過資源隊列,那麼它會立刻執行。如果執行的SQL超過了資源隊列限制的資源,比如超過了最大并發數,那麼該次執行就會等待,等到資源釋放後,才能執行。資源隊列針對執行的SQL,采用FIFO原則,即先進先出。如果資源隊列設定了優先級,那麼多個資源隊列之間就會優先執行優先級高的使用者操作。
擁有SUPERUSER 角色的使用者總是優先執行,不受資源隊列的限制。
記憶體限制如何起作用
記憶體限制是指使用者在執行SQL時候使用的最大記憶體,GPDB的隊列記憶體設定并不是每個SQL都能達到這個記憶體。比如一個隊列設定最大記憶體為2000MB,最大回話數為10,那麼預設每個SQL最大的執行記憶體為200MB。通過設定 statement_mem 可以調整這種情況,詳細見
Creating Queues with Memory Limits優先級如何起作用
在任務執行期間,相同優先級的任務會平分資源,比如查詢1和查詢2,是同一個優先級隊列下的任務,那麼他們評分CPU資源。這時候來了一個查詢3,是低優先級的,那麼查詢1和查詢2的總資源會減少,但是還是會平分資源的。大概的資源分布見下圖(百分比并不代表世紀的使用百分比,知識示例)