控制 Memory 和 CPU 資源的使用

2021-07-30 21:25:28 字數 3673 閱讀 7669

resource governor的出現,解決了在一台sql server例項上,管理多使用者工作負載和資源隔離的需求,它允許管理員限制系統處理requsts時所耗費的cpu 和 memory資源的數量,在一定程度上,限制和隔離了runaway查詢。對於sql server 2012,使用者能夠基於工作負載,實現cpu資源的完全隔離,並能設定cpu資源使用量的硬上限(cap usage,hard limit)。在乙個多使用者,高併發的sql server例項上,管理員使用resource governor,控制不同工作負載對記憶體和cpu資源的使用量,使不同的應用程式在使用的資源上相互隔離,使系統效能得到可**性的控制和保證。

一,基本實現(fundamental implementation)

resource governor的可程式設計部分由三部分組成:resource pool,workload group 和 classifier function,每個部分實現不同的功能。

1,資源池(resource pool)

在sql server例項中,資源隔離的基本單位是resource pool,正如其名,該物件是資源池,在建立resource pool時,指定該pool擁有的cpu和memory資源的數量範圍。在sql server 2012版本中,最多可以建立62個使用者自定義的resource pool。sql server內建了兩個resource pools:internal用於系統task,使用者不能配置;default是預設的resource pool,用於任何沒有指定resource pool的request;

2,負載分組(workload group)

workload group是邏輯上的實體,用於表示乙個或多個工作負載。實際上,乙個工作負載是sql server例項接收到的乙個查詢請求(request),通過classifier function將多個具有共同屬性的requests劃分到相同的workload group中。每乙個resource pool服務於乙個或多個工作負載分組,這就是說,這些工作負載分組能夠共享同乙個resource pool中擁有的資源。

sql server內建兩個負載分組:internal和default,關聯到相應的internal和default資源池,internal負載分組用於系統task,sql server將沒有被分類函式顯式指定負載分組的request劃分到default 分組中。

3,分類函式(classifier function)

分類函式根據login,應用程式名稱,資料庫名字等屬性,將request劃分到不同的負載分組中,可以指定使用者定義的負載分組或default負載分組。

4,處理流程

resource governor各個部分相互配合,控制記憶體和cpu資源的使用:classification將sql server例項接收到的requests進行分類,劃分到不同的負載組中,負載組與之關聯的resource pool中包含的cpu和記憶體資源來處理request,resource governor的處理流程如下圖: 

resource pool 是sql server例項中物理資源的子集,由於位於同乙個例項上的所有資料庫共享該例項的所有資源,因此,最好將resource pool的三個組成物件建立在master 資料庫中。

二,使用示例

1, 建立resource pool

create

resource pool rp_20percent

with

( min_cpu_percent

=0,

max_cpu_percent

=20,

cap_cpu_percent

=20,

affinity scheduler

=auto,

min_memory_percent

=0,

max_memory_percent

=20);

cap_cpu_percent

選項設定資源池擁有cpu資源的硬上限,任何workload group使用的cpu數量不可能超過該上限,而資源池使用的cpu資源有可能超過 max_cpu_percent 選項指定的比例。

2,建立workload group

建立工作負載分組,通過using子句關聯該分組能夠使用的資源池,乙個工作負載分組只能關聯乙個資源池,乙個資源池服務乙個或多個工作負載分組。

create workload group

wg_20percent

with

( importance

=medium,

request_max_memory_grant_percent

=20,

request_max_cpu_time_sec

=0,

request_memory_grant_timeout_sec

=0,

max_dop

=0,

group_max_requests

=0)

using rp_20percent;

importance選項: 該選項指定該workload group在resource pool中相對的重要性,由於同乙個resource pool關聯多個workload group,importance數值高的workload group,在競爭resource pool中的資源時,更容易獲勝。該選項有三個可選值:low,medium和high,預設值是medium。

3,建立 classifier function

create

function

dbo.rgclassifierfunction_20percent()

returns

sysname

with

schemabinding

asbegin

declare

@workload_group_name

assysname

if (suser_name() =

'user_readonly')

set@workload_group_name='

wg_20percent

'return

@workload_group_name

end;

4,啟動resource governor

首先,配置resource governor使用的分類函式;然後,執行重新配置命令,啟動resource governor,sql server使用分類函式對sql server例項接收的requests,劃分到不同的負載分組。

alter

resource governor

with (classifier_function=

dbo.rgclassifierfunction_20percent);

goalter resource governor

reconfigure

;go

8s保留cpu設定 使用資源設定控制CPU資源

如果即使在前面討論過的所有方案之後也無法重新平衡cpu負載或提高處理器效率,那麼可能還有一些原因是保持主機cpu仍然飽和 它可以是資源池及其對vm的資源分配。許多應用程式 例如批處理作業 通過花費更長時間來完成但仍然產生正確且有用的結果來響應缺乏cpu資源。其他應用程式可能會遇到故障,或者在被拒絕足...

吃掉所有CPU資源的 svchost exe

過年回到家後發現,家裡的 pc 和老媽的 notebook 莫名其妙的都會被 svchost.exe 占用掉所有的 cpu 資源 難怪老媽一直跟我抱怨新買的 notebook 總是跑的很慢 xd 一看到這個情況,腦中馬上浮現 不會是中毒了吧 的念頭,於是在 cpu 使用率總是停在100 的狀態下,花...

CPU對GPU的資源更新

一共有四個方法進行對資源進行更新 cpu呼叫 id3d11devicecontext map gpu呼叫 id3d11devicecontext copysubresourceregion id3d11devicecontext copyresource id3d11devicecontext up...