Oracle數(shù)據(jù)庫在大規(guī)模數(shù)據(jù)處理和高并發(fā)訪問方面,不斷優(yōu)化自己的性能與可擴展性,其中并行執(zhí)行是最為重要的性能提升手段之一。
如何理解并行?從直觀上可以想象成多條流水線并行完成某種工作。在數(shù)據(jù)庫領(lǐng)域,我們可以將數(shù)據(jù)切分及分配給多個CPU并行處理,既節(jié)省了時間,又提高了處理能力。Oracle數(shù)據(jù)庫中實現(xiàn)并行的核心就是多進程并行執(zhí)行技術(shù)。
舉個例子,如果需要對某表進行大批量數(shù)據(jù)更新,可以通過如下方式開啟并行執(zhí)行。
ALTER TABLE my_table PARALLEL(16);
這里指定的16就是進程數(shù),表示這個更新操作被切分成16個子任務(wù)并行執(zhí)行。
當(dāng)然,Oracle數(shù)據(jù)庫中并行不僅局限于單張表的操作,也可以在多張表,如多表Join方式下并行執(zhí)行。
SELECT /*+ parallel(e 16) parallel(d 16) */ *
FROM emp e JOIN dept d ON e.deptno=d.deptno;
在這條SQL語句中,我們指定了兩張表(emp、dept)被并行執(zhí)行,下面參數(shù)“16”表示分成了16個子任務(wù)。
實際上,Oracle支持的“并行級別”非常多,除了表級并行以外,還有多種并行方式,比如分區(qū)級別并行等。
除此之外,針對于Oracle并行,還有幾個重要概念需要我們了解一下。
第一個是“Parallel_degree_limit”,這個參數(shù)用來限制一個實例上并行可達的最大進程數(shù)。
ALTER SYSTEM SET parallel_degree_limit=4 SCOPE=both;
如上述語句,我們限制了一個實例上的進程數(shù)不能超過4個。
另外一個重要參數(shù)是“Parallel_max_servers”,這個參數(shù)用來限制整個數(shù)據(jù)庫集群的最大并發(fā)進程數(shù),包括了所有Oracle實例。
ALTER SYSTEM SET parallel_max_servers=32 SCOPE=SPFILE;
如上述語句,我們限制了全局最大并行進程數(shù)為32個,并將此參數(shù)寫入到參數(shù)文件中。
最后,要注意的是,并行執(zhí)行可能會帶來額外的開銷,如內(nèi)存占用、分發(fā)數(shù)據(jù)等,但是對于大規(guī)模數(shù)據(jù)操作和高并發(fā)訪問場景,采取合理的并行方式,可以顯著提高Oracle數(shù)據(jù)庫運行效率。