在任意時刻,OushuDB中可能有很多個并發(fā)的查詢在運行。這些查詢屬于不同的用戶缓窜。用戶的優(yōu)先級可能有高有低。我們需要一種方式 來合理的給各個用戶分配其可以使用的系統(tǒng)資源,包括CPU和內(nèi)存等禾锤。
OushuDB使用資源隊列(Resource Queues)來管理整個系統(tǒng)的資源私股。每一個OushuDB用戶都和一個資源隊列關(guān)聯(lián),該用戶發(fā)出的所有查詢 都會使用該關(guān)聯(lián)的資源隊列中的資源恩掷。我們可以創(chuàng)建多個資源隊列倡鲸,資源隊列之間形成一種樹狀結(jié)構(gòu)。
其中pg_root和pg_default系統(tǒng)默認已經(jīng)創(chuàng)建的資源管理隊列黄娘。pg_root是資源隊列樹的根峭状。pg_default是其子隊列。
當一個用戶被創(chuàng)建的時候逼争,默認會被分配到pg_default隊列优床。
下面的語句創(chuàng)建了一個資源隊列ceo_report。指定了其最大的并發(fā)查詢數(shù)為20誓焦。另外胆敞,該隊列使用了其父親隊列pg_root的30%內(nèi)存和CPU資源。
CREATE RESOURCE QUEUE ceo_report WITH (PARENT='pg_root', ACTIVE_STATEMENTS=20,MEMORY_LIMIT_CLUSTER=30%, CORE_LIMIT_CLUSTER=30%);
其中的三個配置參數(shù)的意義如下:
● ACTIVE_STATEMENTS:資源隊列允許的最大并發(fā)查詢數(shù)杂伟,超過這個并發(fā)的連接則會排隊等待移层。資源管理器會均勻分配資源到隊列中并發(fā)的查詢。
● MEMORY_LIMIT_CLUSTER:資源隊列可以使用的父隊列內(nèi)存的比例
● CORE_LIMIT_CLUSTER:資源隊列可以使用的父隊列CPU的比例
現(xiàn)在我們可以創(chuàng)建一個用戶赫粥,使用該資源管理隊列:
CREATE ROLE kurt WITH LOGIN RESOURCE QUEUE ceo_report;
這樣的話幽钢,kurt用戶發(fā)出的所有查詢將使用ceo_report中的資源蚜点。
通過下面的命令可以創(chuàng)建上圖中的其他的資源隊列:
CREATE RESOURCE QUEUE department1 WITH (PARENT='pg_root', ACTIVE_STATEMENTS=10,MEMORY_LIMIT_CLUSTER=5%, CORE_LIMIT_CLUSTER=5%);CREATE RESOURCE QUEUE adhoc1 WITH (PARENT='department1', ACTIVE_STATEMENTS=5,MEMORY_LIMIT_CLUSTER=50%, CORE_LIMIT_CLUSTER=50%);CREATE RESOURCE QUEUE daily_batch WITH (PARENT='department1', ACTIVE_STATEMENTS=5,MEMORY_LIMIT_CLUSTER=50%, CORE_LIMIT_CLUSTER=50%);CREATE RESOURCE QUEUE department2 WITH (PARENT='pg_root', ACTIVE_STATEMENTS=5,MEMORY_LIMIT_CLUSTER=5%, CORE_LIMIT_CLUSTER=5%);CREATE RESOURCE QUEUE monthly_report WITH (PARENT='department2', ACTIVE_STATEMENTS=2,MEMORY_LIMIT_CLUSTER=100%, CORE_LIMIT_CLUSTER=100%);CREATE RESOURCE QUEUE department3 WITH (PARENT='pg_root', ACTIVE_STATEMENTS=5,MEMORY_LIMIT_CLUSTER=5%, CORE_LIMIT_CLUSTER=5%);CREATE RESOURCE QUEUE adhoc2 WITH (PARENT='department3', ACTIVE_STATEMENTS=3,MEMORY_LIMIT_CLUSTER=50%, CORE_LIMIT_CLUSTER=50%);CREATE RESOURCE QUEUE daily_report WITH (PARENT='department3', ACTIVE_STATEMENTS=2,MEMORY_LIMIT_CLUSTER=50%, CORE_LIMIT_CLUSTER=50%);