新聞資訊
行業動态
您現在的(de)位置:首頁>新聞資訊>行業動态

Oracle 19C性能優化(huà)新特性Memoptimize Rowstore 之Fast Lookup

發布時(shí)間:2019-3-29 浏覽次數:2174

Oracle 12C 中引入了(le)In Memory Column Store的(de)新特性,該功能将熱(rè)表以列的(de)形式存放在獨立内存中,以提升聚合類查詢的(de)性能。在18C版本中,Oracle推出了(le)Memoptimize Rowstore新功能,該功能極大(dà)提升基于主鍵值表查詢的(de)性能,SQL查詢可(kě)以直接通(tōng)過主鍵鍵值訪問到Memoptimize Pool内存中的(de)數據塊,減少了(le)buffer cache訪問、磁盤IO及相關CPU的(de)消耗,從而提升查詢的(de)性能。19C中,Oracle增強了(le)Memoptimize Rowstore的(de)功能,加入Fast Ingest,通(tōng)過内存來(lái)提升主鍵表的(de)記錄插入速度。我們從字面上可(kě)以理(lǐ)解,Rowstore指在内存中存放的(de)數據是以行式存儲的(de)。與In Memory Column Store記錄以列式存儲的(de)性能區(qū)别在于,行式存儲方式更利于對(duì)表内整行數據進行的(de)檢索。與In Memory類似,Memoptimize Rowstore 配置步驟非常簡單,同樣無需對(duì)應用(yòng)SQL進行修改。我們隻需分(fēn)配Memoptimize Pool内存空間并指定需要存放在Rowstore内的(de)表就可(kě)使用(yòng)該功能了(le)。

在介紹該功能的(de)使用(yòng)前,我們先了(le)解一下(xià)Memoptimize Rowstore的(de)内部機制。Memoptimize Rowstore使用(yòng)SGA(圖一)中的(de)一塊獨立内存區(qū)域(Memoptimize Pool)來(lái)存放相關表的(de)哈希索引(Hash Index)和(hé)表的(de)數據塊(圖二)。Memoptimize Pool中75%的(de)空間分(fēn)配給Buffer,25%空間分(fēn)配給哈希索引。Oracle自動爲Memoptimize Pool中的(de)表對(duì)象創建哈希索引并進行維護,無需人(rén)工幹預。對(duì)于需要進行快(kuài)速查詢的(de)表對(duì)象,我們隻需要通(tōng)過CREATE TABLE 或ALTER TABLE語句來(lái)指定表的(de)MEMOPTIMIZE FOR READ屬性,就能控制表是否通(tōng)過Memoptimize Rowstore進行優化(huà)。需要注意的(de)是,需要存放在Memoptimize Pool内的(de)表隻能是heap-organized表,表必須有主鍵且不能是壓縮表。

 

下(xià)面我們簡要介紹一下(xià)Memoptimize Rowstore快(kuài)速查詢的(de)使用(yòng)步驟。

1.

啓用(yòng)Memoptimize Rowstore。

數據庫版本必須18C或以上。指定實例啓動參數MEMOPTIMIZE_POOL_SIZE的(de)大(dà)小,該參數不能動态調整,需要重啓實例。需要注意Memoptimize Pool是個(gè)固定的(de)内存空間,意味著(zhe)其不受自動内存管理(lǐ)功能(Automatic Memory Management)控制。數據庫SGA_TARGET自動管理(lǐ)不會根據數據庫壓力自動調整Memoptimize Pool的(de)大(dà)小。


2.

重啓實例,檢查Memoptimize Pool是否生效

SQL> SHOW PARAMETER MEMOPTIMIZE_POOL_SIZE
 
NAME                   TYPE         VALUE
---------------------  -----------  -----
memoptimize_pool_size  big integer  10G

3.

使用(yòng)CREATE TABLE 或ALTER TABLE語句來(lái)指定表的(de)MEMOPTIMIZE FOR READ屬性

CREATE TABLE flookup (

     id       NUMBER(5) PRIMARY KEY, --表必須有PK

     test_col  VARCHAR2(15))

MEMOPTIMIZE FOR READ; 

ALTER TABLE sh.sales MEMOPTIMIZE FOR READ;

4.

使用(yòng)DBMS_MEMOPTIMIZE.POPULATE将表數據加載至Memoptimize Pool内,數據加載完成後,基于Memoptimize Rowstore的(de)快(kuài)速查詢功能立即生效。

execute DBMS_MEMOPTIMIZE.POPULATE('SH','SALES');

5.

關閉表的(de)快(kuài)速查詢功能。使用(yòng)ALTER TABLE 指定表NO MEMOPTIMIZE FOR READ 屬性。

6.

查詢表記錄。基于Memoptimize Rowstore 的(de)快(kuài)速查詢适用(yòng)于帶主鍵值的(de)查詢語句。

如以下(xià)查詢:

SELECT * FROM customer WHERE cust_id = 10;  

新特性Memoptimize Rowstore快(kuài)速查詢是針對(duì)有主鍵表的(de)行式數據查詢的(de)一個(gè)優化(huà)功能,其配置簡單且無需修改應用(yòng)。該功能特别适用(yòng)于IoT等有大(dà)量數據且頻(pín)繁基于主鍵查詢的(de)表對(duì)象性能優化(huà)。

地址:陝西省西安市高(gāo)新區(qū)科技四路南(nán)側心橋佳苑第1幢2單元23層22304室
聯系人(rén):任經理(lǐ) 136-5921-0883
陽泉市向日葵信息技術服務有限公司 版權所有