我們知道,Oracle多租戶選件是數據庫原生支持的云管理能力,而不是像其它廠商采用云管理平臺來實現(xiàn)多租戶的功能,使得Oracle多租戶選件可實現(xiàn)更高的資源利用率,更好的性能,更強的穩(wěn)定性,和更簡便的運維,從而廣受用戶喜愛。
用戶進行Oracle多租戶數據庫規(guī)劃時,特別是需要對多個關鍵數據庫整合時,常常對多租戶數據庫的資源管控有些疑惑,甚至有些擔心。多個關鍵數據庫整合在一個硬件平臺上,萬一出現(xiàn)資源競爭,是否會影響所有運行在此平臺上的數據庫,從而影響關鍵的SLA指標。
Oracle在多租戶資源管控上面提供最全面最完整的解決方案,可以幫助用戶打消此類擔心。下面會主要從多租戶環(huán)境下資源管理的考量因素及示例,來介紹Oracle多租戶數據庫所提供的資源管控能力。
多租戶環(huán)境資源管理考量
本文以CPU資源規(guī)劃為抓手來進行整體資源規(guī)劃考量,主要對數據庫運行的關鍵資源,如CPU、內存、IO、存儲空間等來進行規(guī)劃設計,以期在滿足應用運行要求,保障應用性能穩(wěn)定的前提下,最大化資源利用。根據最佳實踐,多租戶環(huán)境下資源的規(guī)劃設計,主要分三步進行:
第1步,應用數據庫資源調研與評估,主要考量因素如下:
? 應用數據庫的運行特性及CPU、內存、存儲IO資源配置與使用情況,如高峰,平峰,低鋒時段資源使用率等;
? 應用數據庫表空間大小,包括當前數據表空間大小和臨時表空間大小,及近一年增長趨勢;
? 應用數據庫連接數,包括最大會話連接數,活動會話連接數等;
? 應用數據庫的關鍵性,及對性能和SLA的要求;
第2步,確定數據庫云多租戶環(huán)境的資源配置及用途,主要考量因素如下:
? 確定數據庫云多租戶環(huán)境的CPU、內存、存儲IO資源配置;
? 確定數據庫云多租戶環(huán)境的存儲配置及IO能力;
? 確定數據庫云多租戶環(huán)境可承載的會話連接數;
? 確定數據庫云多租戶環(huán)境架構及SLA特性;
? 確定數據庫云多租戶環(huán)境用途,如僅整合當前應用數據庫,或者除整合當前應用數據庫外,還需考慮資源的靈活擴縮,新需求的PDB快速供應等;
第3步,數據庫云多租戶環(huán)境資源規(guī)劃設計,主要方案和應用場景如下:
?方案1,通過應用錯峰的原則,來選擇哪些應用數據庫通過PDB方式整合在一起,本身在多租戶層面不加控制,采用默認資源共享的方式,從應用運行特性上來降低CPU資源競爭。此方案適應于對應用特性非常了解,且應用負載波動周期穩(wěn)定,能準確度量的,或者資源非常充足,應用關鍵性不高的場景。
?方案2,通過需整合數據庫CPU加總數,等于多租戶環(huán)境CPU數量的計算規(guī)則進行整合,采用PDB sizing factor來進行資源管控;此方案整合密度為1,適應于關鍵的數據庫應用,需要對性能具有極高的可預測性、穩(wěn)定性的場景。
?方案3,通過需整合數據庫CPU加總數,等于多租戶環(huán)境CPU數量乘以整合密度數值的方式進行整合,采用PDB sizing factor來進行資源管控;此方案整合密度大于1,存在資源超額分配的情況,適應于提供低成本的云服務,并且預期許多pdb將在大部分時間處于空閑狀態(tài)的應用場景。
多租戶環(huán)境資源規(guī)劃設計及配置示例
下面以方案二的場景,及常見的整合當前應用數據庫的多租戶用途,來進行資源規(guī)劃設計配置示例。如需更多場景的設計及配置方式,可參閱文末參考資料了解。
場景假設
? 數據庫云多租戶環(huán)境用途為僅整合當前應用數據庫;
? 數據庫云多租戶環(huán)境CPU數量,即CDB CPU_COUNT為64;
? 數據庫云多租戶環(huán)境內存大小為512G;
? 應用X評估當前所需CPU數量為32,數據量為2T,每年增長量為300G;
? 應用Y評估當前所需CPU數量為16,數據量為1T,每年增長量為150G;
? 應用Z評估當前所需CPU數量為16,數據量為800G,每年增長量為100G;
PDB sizing factor計算公式
PDB的資源分配是通過CDB資源管理器計劃和PDB參數指定的,通過這些來設置控制各種資源,包括CPU、I/O、內存、會話、并行執(zhí)行等。
本文采用一種簡單的方法,從PDB的CPU_COUNT來作為各租戶資源分配比例的關鍵參考,為此,我們定義了“PDB sizing factor”,它指定了PDB配置的CDB資源的百分比。
PDB sizing factor公式如下:
PDB sizing factor = PDB's CPU_COUNT / CDB's CPU_COUNT
各租戶PDB sizing factor計算如下:
應用X PDB sizing factor = 32 / 64 = 50%
應用Y PDB sizing factor = 16 / 64 = 25%
應用Z PDB sizing factor = 16 / 64 = 25%
CPU 資源規(guī)劃配置
CPU 資源規(guī)劃
各租戶CPU資源分配如下:
CPU 資源配置
1. 設置PDB cpu_count值,啟用instance caging,以應用X為例
alter session set container = PDB-X;
alter system set cpu_count = 32;
alter session set container = CDB$ROOT;
alter system set resource_manager_plan = ' DEFAULT_CDB_PLAN';
2. 設置每個PDB對于CPU調度的份額與限制(數據庫版本在18.1及以上無需設置)
alter session set container = CDB$ROOT;
begin
dbms_resource_manager.create_pending_area;
dbms_resource_manager.create_cdb_plan_directive(plan => 'DEFAULT_CDB_PLAN', pluggable_database => 'PDB-X', shares => 32, utilization_limit => 50);
dbms_resource_manager.create_cdb_plan_directive(plan => 'DEFAULT_CDB_PLAN', pluggable_database => 'PDB-Y', shares => 16, utilization_limit => 25);
dbms_resource_manager.create_cdb_plan_directive(plan => 'DEFAULT_CDB_PLAN', pluggable_database => 'PDB-Z', shares => 16, utilization_limit => 25);
dbms_resource_manager.submit_pending_area;
end;
/
3. 驗證PDB CPU資源配置是否生效
alter session set container = PDB-X;
--cpu_count值應為32
show parameter cpu_count;
--instance_caging為on則開啟
select name, cpu_managed, con_id, instance_caging from v$rsrc_plan where is_top_plan = 'TRUE';
alter session set container = CDB$ROOT;
--PDB對應的shares、utilization_limit值與設置一致,則正常生效
select pluggable_database, shares, utilization_limit from dba_cdb_rsrc_plan_directives where plan = (select name from v$rsrc_plan where is_top_plan = 'TRUE' and con_id = 1);
內存資源規(guī)劃配置
內存資源規(guī)劃
各租戶內存資源分配如下:
如果PDB非常關鍵,可以考慮設置如下參數,通常情況下不必設置:
內存資源配置
根據內存資源規(guī)劃,進行PDB內存資源配置如下,以應用X為例:
alter session set container = PDB-X;
alter system set sga_target = ?131072?M;?
alter system set ?pga_aggregate_target = ??65536??M;???
alter system set ?pga_aggregate_limit = ?131072?M;??
alter system set sga_min_size = ? ?32768?M;??
alter system set db_cache_size = ?16384M;?
alter system set shared_pool_size = ?16384M;?
alter system set inmemory_size = ? ? ?49152??M;???
alter system set parallel_max_servers = ?640;?
alter system set parallel_servers_target = ?256;?
會話連接數規(guī)劃配置
會話連接數規(guī)劃
各租戶會員連接數分配如下:
會話連接數配置
根據內存資源規(guī)劃,進行PDB內存資源配置如下,以應用X為例:
alter session set container = PDB-X;
alter system set sessions = ?1000;?
存儲IO 規(guī)劃配置
Exadata I/O 規(guī)劃配置
Exadata I/O規(guī)劃
各租戶I/O資源分配如下:
注:32可據實靈活取值,計算出的值能取整即可,單個PDB份額值不能超過32。
Exadata I/O配置
根據Exadata I/O資源規(guī)劃,進行PDB I/O資源配置如下:
alter iormplan objective=auto;
alter iormplan dbplan=((name=pdb-x, share=16),(name=pdb-y, share=8),(name=pdb-z, share=8));
--查看I/O資源配置是否生效
list iormplan detail;
注:在存儲服務器通過CellCLI命令
非Exadata I/O 規(guī)劃配置
非Exadata環(huán)境,由于使用的存儲不是智能存儲,也就是存儲無法識別IO調用屬于哪個PDB或者哪個數據庫用戶發(fā)起,從而不能完全從存儲層作細粒度控制。因此,只能通過整體基礎架構的規(guī)劃設計,來盡量緩解。常用非Exadata I/O規(guī)劃配置方式如下:
?方式1,通過詳盡評估整合前應用IO消耗情況,并加總得出整合后IO最大需求,在配置多租戶存儲時,所配存儲IO能力大于IO最大需求,并加上一定余量,來確保整合后的多租戶環(huán)境IO能力大于所需,來降低IO競爭。但此種方式由于準確評估比較難,也無法保證異常突發(fā)IO的影響,只能盡量緩解,存在一定的風險;
?方式2,通過用戶Profile的LOGICAL_READS_PER_SESSION、LOGICAL_READS_PER_CALL,或者dbms_resource_manager的SWITCH_IO_REQS、SWITCH_IO_MEGABYTES來控制IO消耗量,但由于超過限制會中斷調用或者會話連接,因此,通常較少使用此方式,如需使用,應特別注意是否應用能接受;
? 方式3,通過PDB表空間對應不同存儲的方式來作IO控制,可以是同一存儲不同RAID組,也可以是不同的獨立存儲。此方式控制效果最好,但規(guī)劃設計較復雜,成本較高;
存儲空間規(guī)劃配置
存儲空間規(guī)劃
各租戶存儲空間分配如下:
注:PDB Value計算中2為按兩年增量計算,0.8為表空間使用率80%,可據實調整。
存儲空間配置
根據存儲空間規(guī)劃,進行PDB存儲資源配置如下:
alter session set container = CDB$ROOT;
alter pluggable database PDB-X storage (maxsize 3310G);
alter pluggable database PDB-Y storage (maxsize 1655G);
alter pluggable database PDB-Z storage (maxsize 1250G);
--PDB對應的max_size值與設置一致,則正常生效
select name, max_size from v$pdbs;