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博客 ” ,链接:https://blog.itpub.net/35489/viewspace-1081460/ ,如需转载,请注明出处,否则将追究法律责任。