Oracle 12c In-Memory Option - 6

tolywang發表於2014-02-14

12. 確認In-Memory Column Store是否被使用

為了確認In-Memory Column Store被使用,我們需要透過v$mystat和v$statname檢查session
level statistics。所有In-Memory Column Store相關的statistics都是以IMC開頭的。

column format display_name a30
SELECT display_name FROM v$statname WHERE display_name LIKE 'IMC%';

查詢會有很多值,我們目前只關係如下兩個:

IMC Total Columns for Decompression: Total number of Compression Units (CU) that belong to the table
IMC Columns Decompressed:   Compression Units (CUs) actually accessed by this query


SELECT display_name, value 
FROM v$mystat m, v$statname n
WHERE m.statistic# = n.statistic#
AND display_name IN
 ( 'IMC Total Columns for Decompression', 'IMC Columns Decompressed' );

你應該看到這兩個statistics值都是0,我們從第一步開始再次執行表查詢 :

SELECT Max(lo_ordtotalprice) most_expensive_order FROM lineorder; 

透過如下SQL再次檢查 statistics : 
SELECT display_name, value FROM v$mystat m, v$statname n WHERE m.statistic# = n.statistic#
AND display_name IN ( 'IMC Total Columns for Decompression', 'IMC Columns Decompressed' );

結果顯示, LINEORDER 表在In-Memory Column Store中佔用了很多的CUs – ‘IMC Total Columns for Decompression’, 但是他們中

只有少部分在查詢中被訪問到 -  'IMC Columns Decompressed'.


現在同樣的步驟測試在buffer cache中查詢:
SELECT Max(lo_ordtotalprice) most_expensive_order FROM lineorder;

SELECT display_name, value FROM v$mystat m, v$statname n WHERE m.statistic# = n.statistic#
AND display_name IN ( 'IMC Total Columns for Decompression', 'IMC Columns Decompressed' );

ALTER SESSION set inmemory_query = disable;

SELECT /* BUFFER CACHE */ Max(lo_ordtotalprice) most_expensive_order FROM lineorder;

ALTER SESSION set inmemory_query = enable;

SELECT display_name, value FROM v$mystat m, v$statname n WHERE m.statistic# = n.statistic#
AND display_name IN ( 'IMC Total Columns for Decompression', 'IMC Columns Decompressed' );


這次可以注意到,IMC statistics沒有增加,因為query不使用In-Memory Column Store,而是使用的buffer
cache 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-1081460/,如需轉載,請註明出處,否則將追究法律責任。

相關文章