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

Oracle 19C性能優化新特性Memoptimize Rowstore 之Fast Lookup

發布時間:2019-3-29 浏覽次數:1904

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

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

 

下面我們簡要介紹一(yī)下Memoptimize Rowstore快速查詢的(de)使用步驟。

1.

啓用Memoptimize Rowstore。

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


2.

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

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

3.

使用CREATE TABLE 或ALTER TABLE語句來指定表的(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.

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

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

5.

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

6.

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

如(rú)以下查詢:

SELECT * FROM customer WHERE cust_id = 10;  

新特性Memoptimize Rowstore快速查詢是針對有主鍵表的(de)行式數據查詢的(de)一(yī)個優化功能,其配置簡單且無需修改應用。該功能特别适用于IoT等有大量數據且頻繁基于主鍵查詢的(de)表對象性能優化。

地(dì)址:陝西省西安市高(gāo)新區科技四路南側心橋佳苑第1幢2單元23層22304室
聯系人:任經理(lǐ) 136-5921-0883
遼甯金華澤信息技術服務有限公司 版權所有