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