<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>惜分飞 &#187; In Memory</title>
	<atom:link href="https://www.xifenfei.com/tag/in-memory/feed" rel="self" type="application/rss+xml" />
	<link>https://www.xifenfei.com</link>
	<description>提供7*24专业数据库(Oracle,SQL Server,MySQL,PostgreSQL等)恢复和技术支持@Tel:17813235971</description>
	<lastBuildDate>Sat, 24 Oct 2026 14:05:24 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>在ORACLE 12C RAC中使用in memory特性请注意parallel_degree_policy和parallel_force_local参数</title>
		<link>https://www.xifenfei.com/2015/05/%e5%9c%a8race%e4%b8%ad%e4%bd%bf%e7%94%a8in-memory%e7%89%b9%e6%80%a7%e8%af%b7%e6%b3%a8%e6%84%8fparallel_degree_policy%e5%92%8cparallel_force_local%e5%8f%82%e6%95%b0.html</link>
		<comments>https://www.xifenfei.com/2015/05/%e5%9c%a8race%e4%b8%ad%e4%bd%bf%e7%94%a8in-memory%e7%89%b9%e6%80%a7%e8%af%b7%e6%b3%a8%e6%84%8fparallel_degree_policy%e5%92%8cparallel_force_local%e5%8f%82%e6%95%b0.html#comments</comments>
		<pubDate>Wed, 27 May 2015 13:23:03 +0000</pubDate>
		<dc:creator><![CDATA[惜分飞]]></dc:creator>
				<category><![CDATA[ORACLE 12C]]></category>
		<category><![CDATA[imdb]]></category>
		<category><![CDATA[In Memory]]></category>
		<category><![CDATA[parallel_degree_policy]]></category>
		<category><![CDATA[parallel_force_local]]></category>

		<guid isPermaLink="false">https://www.xifenfei.com/?p=5906</guid>
		<description><![CDATA[联系：手机/微信(+86 17813235971) QQ(107644445)  &#8230; <a href="https://www.xifenfei.com/2015/05/%e5%9c%a8race%e4%b8%ad%e4%bd%bf%e7%94%a8in-memory%e7%89%b9%e6%80%a7%e8%af%b7%e6%b3%a8%e6%84%8fparallel_degree_policy%e5%92%8cparallel_force_local%e5%8f%82%e6%95%b0.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="xifenfeicopyright">
<p>联系：<a href="https://www.xifenfei.com/about_xifenfei" target="_blank">手机/微信(+86 17813235971)   QQ(107644445)</a><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&#038;uin=107644445&#038;site=qq&#038;menu=yes"><img src="https://www.xifenfei.com/wp-content/themes/img/site_qq.jpg" alt="QQ咨询惜分飞" title="QQ咨询惜分飞"/></a></p>
<p>标题：<a href="https://www.xifenfei.com/2015/05/%e5%9c%a8race%e4%b8%ad%e4%bd%bf%e7%94%a8in-memory%e7%89%b9%e6%80%a7%e8%af%b7%e6%b3%a8%e6%84%8fparallel_degree_policy%e5%92%8cparallel_force_local%e5%8f%82%e6%95%b0.html" target="_blank">在ORACLE 12C RAC中使用in memory特性请注意parallel_degree_policy和parallel_force_local参数</a></p>
<p>作者：<a href="https://www.xifenfei.com" target="_blank">惜分飞</a>©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]</p>
</div>
<p>在12C RAC的in memory测试中由于未正确启用并行,导致测试结果flush buffer cache后,总是出现大量并行，通过ORACLE 各方努力最终确定是由于parallel_degree_policy=AUTO和parallel_force_local=false开始未设置正确导致.在rac中需要imdb的朋友请注意这两个参数.<br />
<br />
<strong>设置表存放中inmemory</strong></p>
<pre class="brush: sql; title: ; notranslate"> 
SQL&gt; alter table CHF.XIFENFEI_888 inmemory;

Table altered.

SQL&gt; set autot on
SQL&gt; select /*+full(t)*/ count(*) from CHF.XIFENFEI_888 t;

  COUNT(*)          
----------          
  16883988          


Execution Plan
----------------------------------------------------------                      
Plan hash value: 1642441725
                    
---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name         | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |              |     1 |  2566   (8)| 00:00:01 |        |      |            |
|   1 |  SORT AGGREGATE                 |              |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR                |              |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM)          | :TQ10000     |     1 |            |          |  Q1,00 | P-&gt;S | QC (RAND)  |
|   4 |     SORT AGGREGATE              |              |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR          |              |    16M|  2566   (8)| 00:00:01 |  Q1,00 | PCWC |            |
|   6 |       TABLE ACCESS INMEMORY FULL| XIFENFEI_888 |    16M|  2566   (8)| 00:00:01 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------------------
                    
Note                
-----               
   - automatic DOP: Computed Degree of Parallelism is 2  
   - parallel scans affinitized for inmemory      


Statistics
----------------------------------------------------------                      
        213  recursive calls                      
          0  db block gets 
     435058  consistent gets                      
         40  physical reads
      61180  redo size     
        545  bytes sent via SQL*Net to client     
        552  bytes received via SQL*Net from client      
          2  SQL*Net roundtrips to/from client    
          5  sorts (memory)
          0  sorts (disk)  
          1  rows processed

SQL&gt; set autot off
SQL&gt; select * from gv$im_segments where owner='CHF' and segment_name='XIFENFEI_888';

no rows selected

SQL&gt;  select * from gv$im_segments where owner='CHF' and segment_name='XIFENFEI_888';

INST_ID OWNER SEGMENT_NAME    PARTI SEGME TABLESPACE_NAME INMEMORY_SIZE        BYTES BYTES_NOT_POPULATED POPULATE_ INMEMORY INMEMORY_DISTRI INMEMORY_DUPL INMEMORY_COMPRESS CON_ID
------- ----- --------------- ----- ----- --------------- ------------- ------------ ------------------- --------- -------- --------------- ------------- ----------------- ------ 
      1 CHF   XIFENFEI_888          TABLE CHF_DATA            469827584   3571449856          2853101568 STARTED   NONE     AUTO            NO DUPLICATE  FOR QUERY LOW          0 
      2 CHF   XIFENFEI_888          TABLE CHF_DATA            332267520   3571449856          3040182272 STARTED   NONE     AUTO            NO DUPLICATE  FOR QUERY LOW          0 

SQL&gt; select * from gv$im_segments where owner='CHF' and segment_name='XIFENFEI_888';

INST_ID OWNER SEGMENT_NAME    PARTI SEGME TABLESPACE_NAME INMEMORY_SIZE        BYTES BYTES_NOT_POPULATED POPULATE_ INMEMORY INMEMORY_DISTRI INMEMORY_DUPL INMEMORY_COMPRESS CON_ID 
------- ----- --------------- ----- ----- --------------- ------------- ------------ ------------------- --------- -------- --------------- ------------- ----------------- ------ 
      1 CHF   XIFENFEI_888          TABLE CHF_DATA           1510211584   3571449856          1444610048 COMPLETED NONE     AUTO            NO DUPLICATE  FOR QUERY LOW          0 
      2 CHF   XIFENFEI_888          TABLE CHF_DATA           1068433408   3571449856          2058321920 COMPLETED NONE     AUTO            NO DUPLICATE  FOR QUERY LOW          0 
</pre>
<p>这里可以看到表加载到inmemory需要时间,不是全表扫描一遍之后里面全表载入到in memory中.<br />
<br />
<strong>查看执行计划确实走inmemory</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; set autot on
SQL&gt; select /*+full(t)*/ count(*) from CHF.XIFENFEI_888 t;

  COUNT(*)          
----------          
  16883988          


Execution Plan
----------------------------------------------------------                      
Plan hash value: 1642441725
                    
---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name         | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |              |     1 | 18629   (1)| 00:00:01 |        |      |            |
|   1 |  SORT AGGREGATE                 |              |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR                |              |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM)          | :TQ10000     |     1 |            |          |  Q1,00 | P-&gt;S | QC (RAND)  |
|   4 |     SORT AGGREGATE              |              |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR          |              |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWC |            |
|   6 |       TABLE ACCESS INMEMORY FULL| XIFENFEI_888 |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------------------
                    
Note                
-----               
   - automatic DOP: Computed Degree of Parallelism is 2  
   - parallel scans affinitized for inmemory      


Statistics
----------------------------------------------------------                      
          6  recursive calls                      
          0  db block gets 
     177415  consistent gets                      
          0  physical reads
      23484  redo size     
        545  bytes sent via SQL*Net to client     
        552  bytes received via SQL*Net from client      
          2  SQL*Net roundtrips to/from client    
          0  sorts (memory)
          0  sorts (disk)  
          1  rows processed
</pre>
<p><strong>flush buffer cache后,inmemory执行计划中出现大量物理读</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; set autot off
SQL&gt; alter system flush buffer_cache;

System altered.

SQL&gt; /

System altered.

SQL&gt; select * from gv$im_segments where owner='CHF' and segment_name='XIFENFEI_888';

INST_ID OWNER SEGMENT_NAME    PARTI SEGME TABLESPACE_NAME INMEMORY_SIZE        BYTES BYTES_NOT_POPULATED POPULATE_ INMEMORY INMEMORY_DISTRI INMEMORY_DUPL INMEMORY_COMPRESS CON_ID 
------- ----- --------------- ----- ----- --------------- ------------- ------------ ------------------- --------- -------- --------------- ------------- ----------------- ------ 
      1 CHF   XIFENFEI_888          TABLE CHF_DATA           1510211584   3571449856          1444610048 COMPLETED NONE     AUTO            NO DUPLICATE  FOR QUERY LOW          0 
      2 CHF   XIFENFEI_888          TABLE CHF_DATA           1068433408   3571449856          2058321920 COMPLETED NONE     AUTO            NO DUPLICATE  FOR QUERY LOW          0 

SQL&gt; set autot on
SQL&gt; select /*+full(t)*/ count(*) from CHF.XIFENFEI_888 t;

  COUNT(*)          
----------          
  16883988          


Execution Plan
----------------------------------------------------------                      
Plan hash value: 1642441725
                    
---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name         | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |              |     1 | 18629   (1)| 00:00:01 |        |      |            |
|   1 |  SORT AGGREGATE                 |              |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR                |              |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM)          | :TQ10000     |     1 |            |          |  Q1,00 | P-&gt;S | QC (RAND)  |
|   4 |     SORT AGGREGATE              |              |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR          |              |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWC |            |
|   6 |       TABLE ACCESS INMEMORY FULL| XIFENFEI_888 |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------------------
                    
Note                
-----               
   - automatic DOP: Computed Degree of Parallelism is 2  
   - parallel scans affinitized for inmemory      


Statistics
----------------------------------------------------------                      
          6  recursive calls                      
          0  db block gets 
     177413  consistent gets                      
     176358  physical reads
      23456  redo size     
        545  bytes sent via SQL*Net to client     
        552  bytes received via SQL*Net from client      
          2  SQL*Net roundtrips to/from client    
          0  sorts (memory)
          0  sorts (disk)  
          1  rows processed

SQL&gt; set autot off
</pre>
<p><strong>再次查询物理读消失</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; set autot on
SQL&gt; select /*+full(t)*/ count(*) from CHF.XIFENFEI_888 t;

  COUNT(*)          
----------          
  16883988          


Execution Plan
----------------------------------------------------------                      
Plan hash value: 1642441725
                    
---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name         | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |              |     1 | 18629   (1)| 00:00:01 |        |      |            |
|   1 |  SORT AGGREGATE                 |              |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR                |              |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM)          | :TQ10000     |     1 |            |          |  Q1,00 | P-&gt;S | QC (RAND)  |
|   4 |     SORT AGGREGATE              |              |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR          |              |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWC |            |
|   6 |       TABLE ACCESS INMEMORY FULL| XIFENFEI_888 |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------------------
                    
Note                
-----               
   - automatic DOP: Computed Degree of Parallelism is 2  
   - parallel scans affinitized for inmemory      


Statistics
----------------------------------------------------------                      
          6  recursive calls                      
          0  db block gets 
     177414  consistent gets                      
          0  physical reads
      23448  redo size     
        545  bytes sent via SQL*Net to client     
        552  bytes received via SQL*Net from client      
          2  SQL*Net roundtrips to/from client    
          0  sorts (memory)
          0  sorts (disk)  
          1  rows processed

SQL&gt; set autot off
</pre>
<p>这里有奇怪点,启用inmemory之后,flush buffer cache后,物理读非常大(基本上和逻辑读一样),不符合常理,因为inmemory和buffer cache是两个独立的东西,就算是flush buffer cache,也不应该导致in memory内的东西失效(而且从v$im_segments中查询是正常的),对于该问题百思不得其解,最后只好寻求inmemory邮件组和GCS帮忙.最终是由于并行相关参数配置导致该问题</p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; alter system set parallel_force_local=false sid='*';

System altered.

SQL&gt; alter system set parallel_degree_policy=AUTO sid='*'; 

System altered. 
</pre>
<p><strong>修改parallel_force_local和parallel_degree_policy后继续测试</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; select * from gv$im_segments where owner='CHF' and segment_name='XIFENFEI_888'; 

INST_ID OWNER SEGMENT_NAME    PARTI SEGME TABLESPACE_NAME INMEMORY_SIZE        BYTES BYTES_NOT_POPULATED POPULATE_ INMEMORY INMEMORY_DISTRI INMEMORY_DUPL INMEMORY_COMPRESS CON_ID
------- ----- --------------- ----- ----- --------------- ------------- ------------ ------------------- --------- -------- --------------- ------------- ----------------- ------
      1 CHF   XIFENFEI_888          TABLE RPT_DATA           1510211584   3571449856          1444610048 COMPLETED NONE     AUTO            NO DUPLICATE  FOR QUERY LOW          0
      2 CHF   XIFENFEI_888          TABLE RPT_DATA           1069481984   3571449856          2058321920 COMPLETED NONE     AUTO            NO DUPLICATE  FOR QUERY LOW          0


SQL&gt; set autot on 
SQL&gt; select /*+full(t)*/ count(*) from CHF.XIFENFEI_888 t; 
set autot off 


  COUNT(*)
----------
  16883988


Execution Plan
----------------------------------------------------------
Plan hash value: 1642441725

---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name         | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |              |     1 | 18629   (1)| 00:00:01 |        |      |            |
|   1 |  SORT AGGREGATE                 |              |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR                |              |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM)          | :TQ10000     |     1 |            |          |  Q1,00 | P-&gt;S | QC (RAND)  |
|   4 |     SORT AGGREGATE              |              |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR          |              |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWC |            |
|   6 |       TABLE ACCESS INMEMORY FULL| XIFENFEI_888 |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------------------

Note
-----
   - automatic DOP: Computed Degree of Parallelism is 2
   - parallel scans affinitized for inmemory


Statistics
----------------------------------------------------------
          6  recursive calls
          0  db block gets
        776  consistent gets
          0  physical reads
          0  redo size
        545  bytes sent via SQL*Net to client
        552  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


SQL&gt; alter system flush buffer_cache
  2  ;

System altered.

SQL&gt; /

System altered.

SQL&gt; 

SQL&gt; set autot on 
select /*+full(t)*/ count(*) from CHF.XIFENFEI_888 t; 
set autot off 
SQL&gt; 

  COUNT(*)
----------
  16883988


Execution Plan
----------------------------------------------------------
Plan hash value: 1642441725

---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name         | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |              |     1 | 18629   (1)| 00:00:01 |        |      |            |
|   1 |  SORT AGGREGATE                 |              |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR                |              |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM)          | :TQ10000     |     1 |            |          |  Q1,00 | P-&gt;S | QC (RAND)  |
|   4 |     SORT AGGREGATE              |              |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR          |              |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWC |            |
|   6 |       TABLE ACCESS INMEMORY FULL| XIFENFEI_888 |    16M| 18629   (1)| 00:00:01 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------------------

Note
-----
   - automatic DOP: Computed Degree of Parallelism is 2
   - parallel scans affinitized for inmemory


Statistics
----------------------------------------------------------
          6  recursive calls
          0  db block gets
        776  consistent gets
          2  physical reads
          0  redo size
        545  bytes sent via SQL*Net to client
        552  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
SQL&gt; spool off
</pre>
<p>通过测试证明,在RAC环境中,如果要使用IN MEMORY特性,需要设置parallel_degree_policy=AUTO和parallel_force_local=false之后,才能够真正意义上的启动IM特性,不然只是执行计划中的启用,可能是假象</p>
<div id="crp_related"><ul><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/06/autotrace%e6%98%be%e7%a4%bastatistics%e5%be%88%e5%a4%9a%e4%bf%a1%e6%81%af%e4%b8%ba0.html" rel="bookmark" class="crp_title">autotrace显示Statistics很多信息为0</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/04/%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92%e4%b8%ad%e5%b8%b8%e8%a7%81index%e8%ae%bf%e9%97%ae%e6%96%b9%e5%bc%8f.html" rel="bookmark" class="crp_title">执行计划中常见index访问方式</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html" rel="bookmark" class="crp_title">ORACLE 12C In-Memory功能性能测试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/07/select-maxamina-from-table%e4%bc%98%e5%8c%96.html" rel="bookmark" class="crp_title">select max(id),min(id) from table优化</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html" rel="bookmark" class="crp_title">对于IN Memory Option 部分细节测试&#8212;主要当inmemory_size不足之时</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/09/oracle-ddl-%e5%b9%b6%e5%8f%9110g.html" rel="bookmark" class="crp_title">Oracle DDL 并行(10G)</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2017/06/_optimizer_null_aware_antijoin-not-in.html" rel="bookmark" class="crp_title">_optimizer_null_aware_antijoin和not in效率</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2013/04/12c-top-n-sql%e5%ae%9e%e7%8e%b0%e5%88%86%e9%a1%b5%e5%8a%9f%e8%83%bd.html" rel="bookmark" class="crp_title">ORACLE 12C TOP N SQL实现分页功能</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/09/oracle-dml%e5%b9%b6%e5%8f%91.html" rel="bookmark" class="crp_title">Oracle DML并行</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/04/hint%e6%8c%87%e5%ae%9aindex%e7%9a%84%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3.html" rel="bookmark" class="crp_title">hint指定index的深入理解</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/03/%e5%90%abis-null-sql%e8%af%ad%e5%8f%a5%e4%bc%98%e5%8c%96.html" rel="bookmark" class="crp_title">含is null sql语句优化</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/12/%e5%88%9b%e5%bb%ba%e6%94%af%e6%8c%81null-index.html" rel="bookmark" class="crp_title">创建包含null值index</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>https://www.xifenfei.com/2015/05/%e5%9c%a8race%e4%b8%ad%e4%bd%bf%e7%94%a8in-memory%e7%89%b9%e6%80%a7%e8%af%b7%e6%b3%a8%e6%84%8fparallel_degree_policy%e5%92%8cparallel_force_local%e5%8f%82%e6%95%b0.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>对于IN Memory Option 部分细节测试&#8212;主要当inmemory_size不足之时</title>
		<link>https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html</link>
		<comments>https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html#comments</comments>
		<pubDate>Thu, 20 Nov 2014 15:17:15 +0000</pubDate>
		<dc:creator><![CDATA[惜分飞]]></dc:creator>
				<category><![CDATA[ORACLE 12C]]></category>
		<category><![CDATA[In Memory]]></category>

		<guid isPermaLink="false">https://www.xifenfei.com/?p=5645</guid>
		<description><![CDATA[联系：手机/微信(+86 17813235971) QQ(107644445)  &#8230; <a href="https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="xifenfeicopyright">
<p>联系：<a href="https://www.xifenfei.com/about_xifenfei" target="_blank">手机/微信(+86 17813235971)   QQ(107644445)</a><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&#038;uin=107644445&#038;site=qq&#038;menu=yes"><img src="https://www.xifenfei.com/wp-content/themes/img/site_qq.jpg" alt="QQ咨询惜分飞" title="QQ咨询惜分飞"/></a></p>
<p>标题：<a href="https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html" target="_blank">对于IN Memory Option 部分细节测试&#8212;主要当inmemory_size不足之时</a></p>
<p>作者：<a href="https://www.xifenfei.com" target="_blank">惜分飞</a>©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]</p>
</div>
<p>本文对于IMDB的几个特性进行了具体测试:<br />
1. 压缩级别和压缩率(具体也需要具体测试),本实验仅提供参考<br />
2. 对于IM空间不足已经存在的对象和加入新对象的现象<br />
3. 对于PRIORITY级别进行了简单测试<br />
<strong>数据库基本配置信息</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; select * from v$version;

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production              0
PL/SQL Release 12.1.0.2.0 - Production                                                    0
CORE    12.1.0.2.0      Production                                                        0
TNS for 64-bit Windows: Version 12.1.0.2.0 - Production                                   0
NLSRTL Version 12.1.0.2.0 - Production                                                    0

SQL&gt; show parameter inmemory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_max_populate_servers        integer     2
inmemory_query                       string      ENABLE
inmemory_size                        big integer 100M
inmemory_trickle_repopulate_servers_ integer     1
percent
optimizer_inmemory_aware             boolean     TRUE
</pre>
<p>数据库版本12.1.0.2,inmemory_size配置为100M<br />
<br />
<strong>准备测试环境</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; create tablespace inmemory datafile 'D:\APP\FFCHENG\ORADATA\XFF\PDB\in_memory01.dbf' 
   2  size 100m autoextend on next 4m maxsize 10g;

表空间已创建。

SQL&gt; create user chf identified by xifenfei;

用户已创建。

SQL&gt; grant dba to chf;

授权成功。

SQL&gt; alter user chf default tablespace inmemory;

用户已更改。

SQL&gt; create table chf.t_inmemory1 as select * from dba_objects;

表已创建。
</pre>
<p><strong>创建测试表空间,用户,测试表</strong><br />
<br />
<strong>测试压缩级别</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; alter table chf.t_inmemory1 inmemory NO MEMCOMPRESS;

表已更改。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

未选定行

SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
     91040

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  13631488      10616832 NONE     NO MEMCOMPRESS

--NO MEMCOMPRESS 压缩比例非常小，基本上不压缩

SQL&gt; alter table chf.t_inmemory1 no inmemory ;

表已更改。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

未选定行

SQL&gt;  alter table chf.t_inmemory1 inmemory MEMCOMPRESS FOR DML
  2  ;

表已更改。

SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
     91040

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  13631488      10616832 NONE     FOR DML

--FOR DML 压缩比例非常小，基本上不压缩和NO MEMCOMPRESS在压缩效果上类似

SQL&gt; alter table chf.t_inmemory1 no inmemory ;

表已更改。

SQL&gt; alter table chf.t_inmemory1 inmemory MEMCOMPRESS FOR QUERY LOW;

表已更改。

SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
     91040

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  13631488       4325376 NONE     FOR QUERY LOW

-- FOR QUERY LOW为默认压缩级别,这里看压缩比例在3:1左右,具体取决于数据

SQL&gt; alter table chf.t_inmemory1 no inmemory ;

表已更改。

SQL&gt; alter table chf.t_inmemory1 inmemory MEMCOMPRESS FOR QUERY HIGH;

表已更改。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

未选定行

SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
     91040

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  13631488       3276800 NONE     FOR QUERY HIGH

-- FOR QUERY HIGH,这里看压缩比例在4:1左右,具体取决于数据


SQL&gt; alter table chf.t_inmemory1 no inmemory ;

表已更改。

SQL&gt; alter table chf.t_inmemory1 inmemory MEMCOMPRESS FOR CAPACITY LOW;

表已更改。

SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
     91040

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  13631488       2228224 NONE     FOR CAPACITY LOW

-- FOR CAPACITY LOW,这里看压缩比例在6:1左右,具体取决于数据

SQL&gt; alter table chf.t_inmemory1 no inmemory ;

表已更改。

SQL&gt; alter table chf.t_inmemory1 inmemory MEMCOMPRESS FOR CAPACITY HIGH;

表已更改。

SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
     91040

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  13631488        131072 NONE     FOR CAPACITY HIGH

-- FOR CAPACITY HIGH,这里看压缩比例在10:1左右,具体取决于数据
</pre>
<p>这里可以看出来,压缩效果确实如Oracle所描述,级别越高压缩效果越好.<br />
<br />
<strong>测试inmemory_size大小不足之时</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; alter table chf.t_inmemory1 inmemory no MEMCOMPRESS;

表已更改。

SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
     91040

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  13631488      10616832 NONE     NO MEMCOMPRESS

--dml插入数据,不再次查询数据,v$im_segments.inmemory_size不发生改变(这个是bug还是设计考虑？？)
SQL&gt; insert into chf.t_inmemory1 select * from chf.t_inmemory1;

已创建 91040 行。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  26214400      10616832 NONE     NO MEMCOMPRESS


SQL&gt; commit;

提交完成。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  26214400      10616832 NONE     NO MEMCOMPRESS


SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
    182080

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  26214400      22282240 NONE     NO MEMCOMPRESS


SQL&gt; insert into chf.t_inmemory1 select * from chf.t_inmemory1;

已创建 182080 行。

SQL&gt; commit;

提交完成。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  51380224      22282240 NONE     NO MEMCOMPRESS

--通过10046证明,虽然v$im_segments.inmemory_size值未及时更新,但是IMDB是生效的
SQL&gt; oradebug setmypid
已处理的语句
SQL&gt; alter session set db_file_multiblocK_read_count=1;

会话已更改。

SQL&gt; oradebug EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12
已处理的语句
SQL&gt; oradebug TRACEFILE_NAME
D:\APP\FFCHENG\diag\rdbms\xff\xff\trace\xff_ora_7604.trc
SQL&gt; SELECT COUNT(object_id) FROM chf.t_inmemory1;

COUNT(OBJECT_ID)
----------------
          364156

SQL&gt; oradebug EVENT 10046 trace name context off
已处理的语句

PARSING IN CURSOR #455134016 len=44 dep=0 uid=0 oct=3 lid=0 tim=126773093621 hv=1133975269 
 ad='7ff07339500' sqlid='5909ukj1tf5r5'
SELECT COUNT(object_id) FROM chf.t_inmemory1
END OF STMT
PARSE #455134016:c=15600,e=3912,p=0,cr=2,cu=0,mis=1,r=0,dep=0,og=1,plh=3154396630,tim=126773093620
WAIT #455134016: nam='Disk file operations I/O' ela= 154 FileOperation=8 fileno=0 filetype=8 obj#=-1 tim=126773093926
EXEC #455134016:c=0,e=25,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=3154396630,tim=126773094005
WAIT #455134016: nam='SQL*Net message to client' ela= 2 driver id=1111838976 #bytes=1 p3=0 obj#=-1 tim=126773094044
FETCH #455134016:c=0,e=13751,p=0,cr=3110,cu=1,mis=0,r=1,dep=0,og=1,plh=3154396630,tim=126773107829
STAT #455134016 id=1 cnt=1 pid=0 pos=1 obj=0 op='SORT AGGREGATE (cr=3110 pr=0 pw=0 time=13751 us)'
STAT #455134016 id=2 cnt=364160 pid=1 pos=1 obj=91914 op='TABLE ACCESS INMEMORY FULL T_INMEMORY1 (cr=3110 pr=0 
  pw=0 time=5386 us cost=17 size=455200 card=91040)'
WAIT #455134016: nam='SQL*Net message from client' ela= 116 driver id=1111838976 #bytes=1 p3=0 obj#=-1 tim=126773108164
FETCH #455134016:c=0,e=1,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,plh=3154396630,tim=126773108215
WAIT #455134016: nam='SQL*Net message to client' ela= 0 driver id=1111838976 #bytes=1 p3=0 obj#=-1 tim=126773108246


SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  51380224      43384832 NONE     NO MEMCOMPRESS


SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
    364160

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
  51380224      43384832 NONE     NO MEMCOMPRESS

SQL&gt; insert into chf.t_inmemory1 select * from chf.t_inmemory1;

已创建 364160 行。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
 109051904      43384832 NONE     NO MEMCOMPRESS


SQL&gt; commit;

提交完成。

SQL&gt; SELECT COUNT(*) FROM chf.t_inmemory1;

  COUNT(*)
----------
    728320

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
 109051904      43384832 NONE     NO MEMCOMPRESS


SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
 109051904      71892992 NONE     NO MEMCOMPRESS

--这里可以看出来INMEMORY_SIZE已经使用了71892992,再插入一次数据,一共100M的IM肯定不够使用


SQL&gt; insert into chf.t_inmemory1 select * from chf.t_inmemory1;

已创建 728320 行。

SQL&gt; commit;

提交完成。

SQL&gt; select count(object_id) from chf.t_inmemory1;

COUNT(OBJECT_ID)
----------------
         1456624

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
 201326592      63438848 NONE     NO MEMCOMPRESS

--这里现在的INMEMORY_SIZE变为了63438848小于在插入数据之前的71892992,证明IM肯定出现问题,比如已经满了,
  v$im_segments显示值不准确


--测试刷新buffer_cache对IM的影响
SQL&gt; alter system flush buffer_cache;

系统已更改。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
 201326592      63438848 NONE     NO MEMCOMPRESS

--结果证明无影响


autotrace结果
SQL&gt; set autot trace exp stat
SQL&gt; set lines 120
SQL&gt; pages 1000
SQL&gt; set pages 1000
SQL&gt; select count(*) from chf.t_inmemory1;


执行计划
----------------------------------------------------------
Plan hash value: 3154396630

-----------------------------------------------------------------------------------
| Id  | Operation                   | Name        | Rows  | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |             |     1 |    16   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE             |             |     1 |            |          |
|   2 |   TABLE ACCESS INMEMORY FULL| T_INMEMORY1 | 91040 |    16   (0)| 00:00:01 |
-----------------------------------------------------------------------------------


统计信息
----------------------------------------------------------
          5  recursive calls
          0  db block gets
      16693  consistent gets
      16690  physical reads
          0  redo size
        546  bytes sent via SQL*Net to client
        552  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


10046结果
SQL ID: 1b61dgunxftdx Plan Hash: 3154396630

select count(object_id) 
from
 chf.t_inmemory1


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          2          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      1.26       4.14      16689      22446          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      1.26       4.14      16689      22448          0           1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS
Number of plan statistics captured: 1

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         1          1          1  SORT AGGREGATE (cr=22446 pr=16689 pw=0 time=4144536 us)
   1456640    1456640    1456640   TABLE ACCESS INMEMORY FULL T_INMEMORY1 (cr=22446 pr=16689 pw=0 
                                         time=2560999 us cost=17 size=455200 card=91040)


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  Disk file operations I/O                        1        0.00          0.00
  SQL*Net message to client                       2        0.00          0.00
  db file sequential read                     16689        0.03          3.05
  SQL*Net message from client                     2        5.40          5.40

--autotrace和10046都证明,当IM size不足之时,数据库未能够使用IM的特性,哪怕是部分也不能使用


--创建新对象存放IM中
SQL&gt; create table chf.t_inmemory2 as select * from dba_objects;

表已创建。

SQL&gt; alter table chf.t_inmemory2 inmemory;

表已更改。

SQL&gt; select count(*) from chf.t_inmemory2;

  COUNT(*)
----------
     91041

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
  2  from v$im_segments where segment_name = 'T_INMEMORY1';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
 201326592      63438848 NONE     NO MEMCOMPRESS

SQL&gt; select count(*) from chf.t_inmemory2;


执行计划
----------------------------------------------------------
Plan hash value: 2042227318

-----------------------------------------------------------------------------------
| Id  | Operation                   | Name        | Rows  | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |             |     1 |    16   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE             |             |     1 |            |          |
|   2 |   TABLE ACCESS INMEMORY FULL| T_INMEMORY2 | 91041 |    16   (0)| 00:00:01 |
-----------------------------------------------------------------------------------


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       1532  consistent gets
       1530  physical reads
          0  redo size
        545  bytes sent via SQL*Net to client
        552  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


SQL&gt; alter table chf.t_inmemory1 no inmemory;

表已更改。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
   2  from v$im_segments where segment_name = 'T_INMEMORY2';

未选定行

SQL&gt; set autot traceonly exp stat
SQL&gt; select count(*) from chf.t_inmemory2;


执行计划
----------------------------------------------------------
Plan hash value: 2042227318

-----------------------------------------------------------------------------------
| Id  | Operation                   | Name        | Rows  | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |             |     1 |    16   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE             |             |     1 |            |          |
|   2 |   TABLE ACCESS INMEMORY FULL| T_INMEMORY2 | 91041 |    16   (0)| 00:00:01 |
-----------------------------------------------------------------------------------


统计信息
----------------------------------------------------------
         57  recursive calls
          0  db block gets
       1565  consistent gets
       1532  physical reads
          0  redo size
        545  bytes sent via SQL*Net to client
        552  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          5  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL&gt; set autot off
SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION 
   2  from v$im_segments where segment_name = 'T_INMEMORY2';

SEGMENT_NAME
-----------------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY2
  13631488       4325376 NONE     FOR QUERY LOW


SQL&gt; set autot traceonly exp stat
SQL&gt; select count(*) from chf.t_inmemory2;


执行计划
----------------------------------------------------------
Plan hash value: 2042227318

-----------------------------------------------------------------------------------
| Id  | Operation                   | Name        | Rows  | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |             |     1 |    53   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE             |             |     1 |            |          |
|   2 |   TABLE ACCESS INMEMORY FULL| T_INMEMORY2 | 91041 |    53   (0)| 00:00:01 |
-----------------------------------------------------------------------------------


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          3  consistent gets
          0  physical reads
          0  redo size
        545  bytes sent via SQL*Net to client
        552  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
--当IM已经无空闲空间之时,创建新对象在PRIORITY未提升之前,即便是设置了IM和对对象进行了访问,也无法存入IM
</pre>
<p>上述测试几个结论:<br />
1. 随着IM中对象的增加，当INMEMORY_SIZE不足之时,v$im_segments.INMEMORY_SIZE显示不准确<br />
2. 随着IM中对象的增加，当INMEMORY_SIZE不足之时,当IM中的对象不能全部在IM中之时,对其对象操作,会转换成传统数据库操作,<br />
   不会使用部分的IM特性,但是执行计划依然提示使用INMEMORY<br />
3. flush buffer_cache 不影响对象的IM<br />
4. 当IM已经无空闲空间之时,创建新对象在PRIORITY未提升之前,即便是设置了IM和对对象进行了访问,也无法存入IM,<br />
   访问依然是传统方式,但是执行计划是INMEMORY<br />
<br />
<strong>测试PRIORITY</strong></p>
<pre class="brush: sql; title: ; notranslate"> 
SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION from v$im_segments;

SEGMENT_NAME
------------------------------------------------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
 201326592      57999360 NONE     NO MEMCOMPRESS


SQL&gt; alter table chf.t_inmemory2  inmemory;

表已更改。

SQL&gt; select count(*) from chf.t_inmemory2;

  COUNT(*)
----------
     91041

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION from v$im_segments;

SEGMENT_NAME
------------------------------------------------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY1
 201326592      57999360 NONE     NO MEMCOMPRESS


SQL&gt; alter table chf.t_inmemory1  inmemory no memcompress PRIORITY LOW;

表已更改。

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION from v$im_segments;

未选定行

SQL&gt; select count(*) from chf.t_inmemory2;

  COUNT(*)
----------
     91041

SQL&gt;  select segment_name,bytes,inmemory_size,INMEMORY_PRIORITY,INMEMORY_COMPRESSION from v$im_segments;

SEGMENT_NAME
------------------------------------------------------------------------------------------------------------------------
     BYTES INMEMORY_SIZE INMEMORY INMEMORY_COMPRESS
---------- ------------- -------- -----------------
T_INMEMORY2
  13631488       4325376 NONE     FOR QUERY LOW
</pre>
<p>这里测试证明：<br />
1. 指定PRIORITY不为none也需要访问对象后才能够放入IM中<br />
2. 当IM不足时,PRIORITY级别高的会把级别低的对象刷出IM<br />
<br />
特此声明:本文仅出自个人测试,得出结论,不可作为任何官方依据使用,具体环境需要具体测试</p>
<div id="crp_related"><ul><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html" rel="bookmark" class="crp_title">ORACLE 12C In-Memory功能性能测试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2015/05/%e5%9c%a8race%e4%b8%ad%e4%bd%bf%e7%94%a8in-memory%e7%89%b9%e6%80%a7%e8%af%b7%e6%b3%a8%e6%84%8fparallel_degree_policy%e5%92%8cparallel_force_local%e5%8f%82%e6%95%b0.html" rel="bookmark" class="crp_title">在ORACLE 12C RAC中使用in memory特性请注意parallel_degree_policy和parallel_force_local参数</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e7%bb%84%e4%bb%b6%e5%88%9d%e8%af%95.html" rel="bookmark" class="crp_title">ORACLE 12C In-Memory组件初试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/%e5%a6%82%e4%bd%95%e4%bc%b0%e7%ae%97%e8%a1%a8in-memory%e9%9c%80%e8%a6%81%e5%86%85%e5%ad%98%e5%a4%a7%e5%b0%8f.html" rel="bookmark" class="crp_title">如何估算表In-Memory需要内存大小</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/in-memory%e6%95%b4%e4%bd%93%e6%b1%87%e6%80%bb.html" rel="bookmark" class="crp_title">In-Memory整体汇总</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/06/autotrace%e6%98%be%e7%a4%bastatistics%e5%be%88%e5%a4%9a%e4%bf%a1%e6%81%af%e4%b8%ba0.html" rel="bookmark" class="crp_title">autotrace显示Statistics很多信息为0</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/07/select-maxamina-from-table%e4%bc%98%e5%8c%96.html" rel="bookmark" class="crp_title">select max(id),min(id) from table优化</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2010/10/oracle%e6%9f%a5%e7%9c%8bobject%e5%af%b9%e8%b1%a1%e4%bd%bf%e7%94%a8%e7%a9%ba%e9%97%b4.html" rel="bookmark" class="crp_title">oracle查看object对象使用空间</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2013/08/oracle-12c-partial-globallocal-indexes-for-partitioned-tables.html" rel="bookmark" class="crp_title">ORACLE 12C Partial Global/Local Indexes for Partitioned Tables</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/04/%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92%e4%b8%ad%e5%b8%b8%e8%a7%81index%e8%ae%bf%e9%97%ae%e6%96%b9%e5%bc%8f.html" rel="bookmark" class="crp_title">执行计划中常见index访问方式</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/12/exadata%e4%b8%8e%e9%9d%9eexadata%e6%90%ad%e5%bb%badatagurad%e5%85%b3%e4%ba%8eehcc%e7%89%b9%e6%80%a7%e6%b5%8b%e8%af%95.html" rel="bookmark" class="crp_title">EXADATA与非EXADATA搭建DATAGURAD关于EHCC特性测试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2017/06/_optimizer_null_aware_antijoin-not-in.html" rel="bookmark" class="crp_title">_optimizer_null_aware_antijoin和not in效率</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>In-Memory整体汇总</title>
		<link>https://www.xifenfei.com/2014/11/in-memory%e6%95%b4%e4%bd%93%e6%b1%87%e6%80%bb.html</link>
		<comments>https://www.xifenfei.com/2014/11/in-memory%e6%95%b4%e4%bd%93%e6%b1%87%e6%80%bb.html#comments</comments>
		<pubDate>Sat, 15 Nov 2014 16:08:50 +0000</pubDate>
		<dc:creator><![CDATA[惜分飞]]></dc:creator>
				<category><![CDATA[ORACLE 12C]]></category>
		<category><![CDATA[In Memory]]></category>

		<guid isPermaLink="false">https://www.xifenfei.com/?p=5634</guid>
		<description><![CDATA[联系：手机/微信(+86 17813235971) QQ(107644445)  &#8230; <a href="https://www.xifenfei.com/2014/11/in-memory%e6%95%b4%e4%bd%93%e6%b1%87%e6%80%bb.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="xifenfeicopyright">
<p>联系：<a href="https://www.xifenfei.com/about_xifenfei" target="_blank">手机/微信(+86 17813235971)   QQ(107644445)</a><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&#038;uin=107644445&#038;site=qq&#038;menu=yes"><img src="https://www.xifenfei.com/wp-content/themes/img/site_qq.jpg" alt="QQ咨询惜分飞" title="QQ咨询惜分飞"/></a></p>
<p>标题：<a href="https://www.xifenfei.com/2014/11/in-memory%e6%95%b4%e4%bd%93%e6%b1%87%e6%80%bb.html" target="_blank">In-Memory整体汇总</a></p>
<p>作者：<a href="https://www.xifenfei.com" target="_blank">惜分飞</a>©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]</p>
</div>
<p>本问是对于Oracle 12C中的In-Memory Column Store一个整体的汇总,具体细节知识在以后章节中展开<br />
<strong>IM可以针对如下级别进行操作</strong><br />
Column<br />
Table<br />
Materialized view<br />
Tablespace<br />
Partition<br />
<br />
<strong>可以指定In-Memory操作语句</strong><br />
CREATE TABLE<br />
ALTER TABLE<br />
CREATE TABLESPACE<br />
ALTER TABLESPACE<br />
CREATE MATERIALIZED VIEW<br />
ALTER MATERIALIZED VIEW<br />
<br />
<strong>压缩级别</strong><br />
<img src="//www.xifenfei.com/wp-content/uploads/2014/11/IM-Compression-Methods.jpg" alt="IM-Compression-Methods" width="1138" height="699" class="alignleft size-full wp-image-5635" /><br />
<strong>优先级</strong><br />
<img src="//www.xifenfei.com/wp-content/uploads/2014/11/IM-Priority-Levels.jpg" alt="IM-Priority-Levels" width="1127" height="540" class="alignleft size-full wp-image-5636" /></p>
<p><strong>对象级别操作IM</strong></p>
<pre class="brush: bash; title: ; notranslate">
CREATE TABLE t_xifenfei (
     id        NUMBER(5) PRIMARY KEY,
     test_col  VARCHAR2(15))
  INMEMORY;

ALTER TABLE t_xifenfei INMEMORY;

ALTER TABLE t_xifenfei INMEMORY MEMCOMPRESS FOR CAPACITY LOW;

ALTER TABLE t_xifenfei INMEMORY PRIORITY HIGH;

ALTER TABLE t_xifenfei INMEMORY 
  MEMCOMPRESS FOR CAPACITY HIGH 
  PRIORITY LOW;

ALTER TABLE t_xifenfei  
   INMEMORY MEMCOMPRESS FOR QUERY (
      product_id, product_name, category_id, supplier_id, min_price)
   INMEMORY MEMCOMPRESS FOR CAPACITY HIGH (
      product_description, warranty_period, product_status, list_price)
   NO INMEMORY (
      weight_class, catalog_url);

ALTER TABLE t_xifenfei NO INMEMORY;
</pre>
<p>补充说明:列级别设置的优先级无效,优先级是表(物化视图)或者分区表级别<br />
<br />
<strong>表空间级别操作IM</strong></p>
<pre class="brush: sql; title: ; notranslate">
CREATE TABLESPACE xifenfie_im
   DATAFILE '/u02/xifenfei.dbf' SIZE 40M 
   ONLINE
   DEFAULT INMEMORY;

ALTER TABLESPACE xifenfie_im DEFAULT INMEMORY 
   MEMCOMPRESS FOR CAPACITY HIGH 
   PRIORITY LOW;
</pre>
<p>
<strong>物化视图级别</strong></p>
<pre class="brush: bash; title: ; notranslate">
CREATE MATERIALIZED VIEW oe.prod_info_mv INMEMORY 
  AS SELECT * FROM t_xifenfei;

ALTER MATERIALIZED VIEW oe.prod_info_mv INMEMORY PRIORITY HIGH;
</pre>
<p><strong>适合使用IN-Memory操作</strong><br />
A query that scans a large number of rows and applies filters that use operators such as the following: =, <, >, and IN<br />
A query that selects a small number of columns from a table or materialized view with a large number of columns,<br />
   such as a query that selects five columns from a table with 100 columns<br />
A query that joins a small table to a large table<br />
A query that aggregates data<br />
<br />
<strong>不适合使用IN-Memory操作</strong><br />
Queries with complex predicates<br />
Queries that select a large number of columns<br />
Queries that return a large number of rows<br />
Queries with multiple large table joins<br />
<br />
<strong>IM控制参数</strong><br />
INMEMORY_SIZE   指定IM分配内存大小,默认值为0,如果启动该值最小为100M;如果在CDB环境中使用,CDB级别设置为整个库级别限制,PDB默认继承CDB设置,但是在实际使用中PDB中总数不能超过CDB限制<br />
INMEMORY_FORCE  指定是否允许数据库中对象使用IM,默认是DEFAULT,即可以实现在对象级别定义INMEMORY or NO INMEMORY,如果设置为OFF 即表示表或者物化视图无法使用IM<br />
INMEMORY_CLAUSE_DEFAULT 默认为空,和NO INMEMORY意义相同,表示创建新对象默认不启用IM,如果配置为INMEMORY,表示新创建对象默认启用IM<br />
INMEMORY_QUERY  默认为TRUE,表示查询是否使用IM特性,设置为FALSE表示查询不使用IM特性<br />
INMEMORY_MAX_POPULATE_SERVERS 默认和系统core一致,用途是把你的表中数据写入到IM中<br />
INMEMORY_TRICKLE_REPOPULATE_SERVERS_PERCENT 控制IM中对象数据的重新载入的进程数,该值为INMEMORY_MAX_POPULATE_SERVERS参数的百分比<br />
OPTIMIZER_INMEMORY_AWARE 该参数是控制优化器成本计算时是否考虑IM,默认为TRUE<br />
<br />
<strong>impdp 操作IM</strong><br />
TRANSFORM=INMEMORY:y 继承IM导出对象属性<br />
TRANSFORM=INMEMORY:n 不继承IM导出对象属性<br />
TRANSFORM=INMEMORY_CLAUSE:string 修改IM导出对象关于IM的属性<br />
<br />
参考文档:https://docs.oracle.com/database/121/ADMIN/memory.htm#ADMIN14257</p>
<div id="crp_related"><ul><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e7%bb%84%e4%bb%b6%e5%88%9d%e8%af%95.html" rel="bookmark" class="crp_title">ORACLE 12C In-Memory组件初试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html" rel="bookmark" class="crp_title">对于IN Memory Option 部分细节测试&#8212;主要当inmemory_size不足之时</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2015/06/postgresql%e7%ae%80%e5%8d%95%e6%93%8d%e4%bd%9c%e4%b9%8b-%e5%88%9b%e5%bb%ba%e5%ba%93%e7%99%bb%e5%bd%95ddldmlhelp%e7%99%bb%e5%87%ba.html" rel="bookmark" class="crp_title">PostgreSQL简单操作之&#8212;创建库,登录,ddl,dml,help,登出,删除库</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/%e5%a6%82%e4%bd%95%e4%bc%b0%e7%ae%97%e8%a1%a8in-memory%e9%9c%80%e8%a6%81%e5%86%85%e5%ad%98%e5%a4%a7%e5%b0%8f.html" rel="bookmark" class="crp_title">如何估算表In-Memory需要内存大小</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/08/%e7%89%a9%e5%8c%96%e8%a7%86%e5%9b%beon-prebuilt-table.html" rel="bookmark" class="crp_title">物化视图on prebuilt table</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/12/oracle-12c-invisible-columns-and-column-ordering.html" rel="bookmark" class="crp_title">ORACLE 12C Invisible Columns and Column Ordering</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/08/%e5%88%a9%e7%94%a8%e7%89%a9%e5%8c%96%e8%a7%86%e5%9b%be%e5%88%b7%e6%95%b0%e6%8d%ae.html" rel="bookmark" class="crp_title">利用物化视图刷数据</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html" rel="bookmark" class="crp_title">ORACLE 12C In-Memory功能性能测试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2010/08/oracle%e4%b9%8b%e4%b8%b4%e6%97%b6%e8%a1%a8%e5%88%9b%e5%bb%ba.html" rel="bookmark" class="crp_title">oracle之表管理</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2015/05/%e5%9c%a8race%e4%b8%ad%e4%bd%bf%e7%94%a8in-memory%e7%89%b9%e6%80%a7%e8%af%b7%e6%b3%a8%e6%84%8fparallel_degree_policy%e5%92%8cparallel_force_local%e5%8f%82%e6%95%b0.html" rel="bookmark" class="crp_title">在ORACLE 12C RAC中使用in memory特性请注意parallel_degree_policy和parallel_force_local参数</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2010/11/oracle%e7%89%a9%e5%8c%96%e8%a7%86%e5%9b%be.html" rel="bookmark" class="crp_title">oracle物化视图</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/04/9i%e4%b8%ad%e6%b8%85%e9%99%a4%e7%89%b9%e5%ae%9a%e8%a1%a8%e7%9b%b8%e5%85%b3%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92.html" rel="bookmark" class="crp_title">9I中清除特定表相关执行计划</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>https://www.xifenfei.com/2014/11/in-memory%e6%95%b4%e4%bd%93%e6%b1%87%e6%80%bb.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何估算表In-Memory需要内存大小</title>
		<link>https://www.xifenfei.com/2014/11/%e5%a6%82%e4%bd%95%e4%bc%b0%e7%ae%97%e8%a1%a8in-memory%e9%9c%80%e8%a6%81%e5%86%85%e5%ad%98%e5%a4%a7%e5%b0%8f.html</link>
		<comments>https://www.xifenfei.com/2014/11/%e5%a6%82%e4%bd%95%e4%bc%b0%e7%ae%97%e8%a1%a8in-memory%e9%9c%80%e8%a6%81%e5%86%85%e5%ad%98%e5%a4%a7%e5%b0%8f.html#comments</comments>
		<pubDate>Tue, 11 Nov 2014 16:17:34 +0000</pubDate>
		<dc:creator><![CDATA[惜分飞]]></dc:creator>
				<category><![CDATA[ORACLE 12C]]></category>
		<category><![CDATA[In Memory]]></category>

		<guid isPermaLink="false">https://www.xifenfei.com/?p=5627</guid>
		<description><![CDATA[联系：手机/微信(+86 17813235971) QQ(107644445)  &#8230; <a href="https://www.xifenfei.com/2014/11/%e5%a6%82%e4%bd%95%e4%bc%b0%e7%ae%97%e8%a1%a8in-memory%e9%9c%80%e8%a6%81%e5%86%85%e5%ad%98%e5%a4%a7%e5%b0%8f.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="xifenfeicopyright">
<p>联系：<a href="https://www.xifenfei.com/about_xifenfei" target="_blank">手机/微信(+86 17813235971)   QQ(107644445)</a><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&#038;uin=107644445&#038;site=qq&#038;menu=yes"><img src="https://www.xifenfei.com/wp-content/themes/img/site_qq.jpg" alt="QQ咨询惜分飞" title="QQ咨询惜分飞"/></a></p>
<p>标题：<a href="https://www.xifenfei.com/2014/11/%e5%a6%82%e4%bd%95%e4%bc%b0%e7%ae%97%e8%a1%a8in-memory%e9%9c%80%e8%a6%81%e5%86%85%e5%ad%98%e5%a4%a7%e5%b0%8f.html" target="_blank">如何估算表In-Memory需要内存大小</a></p>
<p>作者：<a href="https://www.xifenfei.com" target="_blank">惜分飞</a>©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]</p>
</div>
<p>对于12.1.0.2的In-Memory特性很多朋友都已经知晓,现在可能有这个困惑我一张表启用In-Memory大概需要多少内存呢？该如何估算这个值呢？这里我告诉你通过dbms_compression可以完成你想做的事情<br />
<strong>启用In-Memory功能</strong></p>
<pre class="brush: sql; title: ; notranslate">
[oracle@www.xifenfei.com u02]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Thu Aug 7 17:50:47 2014

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL&gt; show parameter inmemory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_max_populate_servers        integer     0
inmemory_query                       string      ENABLE
inmemory_size                        big integer 0
inmemory_trickle_repopulate_servers_ integer     1
optimizer_inmemory_aware             boolean     TRUE

SQL&gt; alter system set inmemory_size=400M;
alter system set inmemory_size=400M
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-02095: specified initialization parameter cannot be modified

SQL&gt;  alter system set inmemory_size=400M scope=spfile;

System altered.

SQL&gt; show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           READ WRITE NO
SQL&gt; alter session set container=pdb1;

Session altered.

SQL&gt; show parameter inmemory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_max_populate_servers        integer     0
inmemory_query                       string      ENABLE
inmemory_size                        big integer 0
inmemory_trickle_repopulate_servers_ integer     1
optimizer_inmemory_aware             boolean     TRUE

SQL&gt; alter system set inmemory_size=200M;
alter system set inmemory_size=200M
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-02095: specified initialization parameter cannot be modified


SQL&gt; alter system set inmemory_size=200M scope=spfile;
alter system set inmemory_size=200M scope=spfile
                                               *
ERROR at line 1:
ORA-02096: specified initialization parameter is not modifiable with this
option


SQL&gt; !oerr ora 2096
02096, 00000, &quot;specified initialization parameter is not modifiable with this option&quot;
// *Cause: Though the initialization parameter is modifiable, it cannot be
//         modified using the specified command.
// *Action: Check the DBA guide for information about under what scope
//          the parameter may be modified



SQL&gt; select 200*1024*1024 from dual;

200*1024*1024
-------------
    209715200

SQL&gt;  alter system set inmemory_size=209715200;
 alter system set inmemory_size=209715200
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-02095: specified initialization parameter cannot be modified


SQL&gt; shutdown immediate;
Pluggable Database closed.
SQL&gt; conn / as sysdba
Connected.
SQL&gt; shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL&gt; startup
ORACLE instance started.

Total System Global Area  838860800 bytes
Fixed Size                  2929936 bytes
Variable Size             360712944 bytes
Database Buffers           50331648 bytes
Redo Buffers                5455872 bytes
In-Memory Area            419430400 bytes
Database mounted.
Database opened.
SQL&gt; show parameter inmemory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_max_populate_servers        integer     1
inmemory_query                       string      ENABLE
inmemory_size                        big integer 400M
inmemory_trickle_repopulate_servers_ integer     1
optimizer_inmemory_aware             boolean     TRUE

SQL&gt; alter session set container=pdb1;

Session altered.

SQL&gt; alter database open;

Database altered.

SQL&gt; show parameter inmemory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_max_populate_servers        integer     1
inmemory_query                       string      ENABLE
inmemory_size                        big integer 400M
inmemory_trickle_repopulate_servers_ integer     1
optimizer_inmemory_aware             boolean     TRUE

SQL&gt; alter system set inmemory_size=100M;

System altered.

SQL&gt; show parameter inmemory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_max_populate_servers        integer     1
inmemory_query                       string      ENABLE
inmemory_size                        big integer 100M
inmemory_trickle_repopulate_servers_ integer     1
optimizer_inmemory_aware             boolean     TRUE
</pre>
<p>这里可以发现inmemory_query默认为true,但是inmemory_size默认为0,也就是说In-Memory Option默认是关闭的,如果启用直接设置inmemory_size值即可(该值最小值为100M),但是需要注意在cdb中需要重启后生效,pdb需要待cdb生效后才能够设置<br />
<br />
<strong>估算表设置In-Memory默认需要内存空间</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; create user chf identified by xifenfei;

User created.

SQL&gt; grant dba to chf;

Grant succeeded.

SQL&gt; create table chf.t_xifenfei as select * from dba_objects;

Table created.

SQL&gt; select sum(bytes), sum(blocks) from DBA_segments where segment_name = 'T_XIFENFEI';

SUM(BYTES) SUM(BLOCKS)
---------- -----------
  13631488        1664

SQL&gt; set serveroutput on
DECLARE
l_blkcnt_cmp binary_integer;
l_blkcnt_uncmp binary_integer;
l_row_cmp binary_integer;
l_row_uncmp binary_integer;
l_cmp_ratio number;
SQL&gt;   2    3    4    5    6    7  l_comptype_str varchar2(100);
  8  BEGIN
  9  dbms_compression.get_compression_ratio(
 10  scratchtbsname =&gt; upper('&amp;ScratchTBS'),
 11  ownname =&gt; upper('&amp;ownername'), 
 12  objname =&gt; upper('&amp;TableName'), 
 13  subobjname =&gt; NULL, 
 14  comptype =&gt; DBMS_COMPRESSION.COMP_INMEMORY_QUERY_LOW, 
 15  blkcnt_cmp =&gt; l_blkcnt_cmp,
 16  blkcnt_uncmp =&gt; l_blkcnt_uncmp, 
 17  row_cmp =&gt; l_row_cmp,
 18  row_uncmp =&gt; l_row_uncmp,
 19  cmp_ratio =&gt; l_cmp_ratio, 
 20  comptype_str =&gt; l_comptype_str 
 21  );
 22  dbms_output.put_line('.');
 23  dbms_output.put_line('OUTPUT: ');
 24  dbms_output.put_line('LINEORDER '||l_comptype_str||' ratio: '||to_char(l_cmp_ratio,'99.999'));
 25  end;
 26  /
Enter value for scratchtbs: USERS
old  10: scratchtbsname =&gt; upper('&amp;ScratchTBS'),
new  10: scratchtbsname =&gt; upper('USERS'),
Enter value for ownername: CHF
old  11: ownname =&gt; upper('&amp;ownername'),
new  11: ownname =&gt; upper('CHF'),
Enter value for tablename: T_XIFENFEI
old  12: objname =&gt; upper('&amp;TableName'),
new  12: objname =&gt; upper('T_XIFENFEI'),
.
OUTPUT:
LINEORDER &quot;In-memory Memcompress Query Low&quot; ratio:   2.800

PL/SQL procedure successfully completed.

SQL&gt; SELECT 13631488/2.800 FROM DUAL;

13631488/2.800
--------------
    4868388.57

SQL&gt; alter table CHF.T_XIFENFEI inmemory;

Table altered.


SQL&gt; select COUNT(*) FROM CHF.T_XIFENFEI;

  COUNT(*)
----------
     90923

SQL&gt; select inmemory_size from v$im_segments where segment_name = 'T_XIFENFEI';

INMEMORY_SIZE
-------------
      4325376

SQL&gt; select (4868388.57-4325376)/4325376 from dual;

(4868388.57-4325376)/4325376
----------------------------
                  .125541125
</pre>
<p>这里使用大家在ehcc中熟悉的dbms_compression.get_compression_ratio来估算In-memory需要的大概空间,例如本测试中,创建T_XIFENFEI表占用磁盘空间为13631488byte,使用dbms_compression估算在In-memory默认的压缩比例(Query Low)情况下,大概压缩比例为2.8,也就是通过合理估算,表启用In-memory cache之后,大概需要空间为13631488/2.800=4868388.57byte,最终通过实际测试需要空间为4325376byte,整体误差为(4868388.57-4325376)/4325376=12.5%左右<br />
因此我们在使用In-memory cache一个表之时,如果不确定其需要内存大小,可以通过dbms_compression包来估算.另外In-memory还可以配置不同的压缩级别实现不同的压缩比例,其他压缩比例请见下图<br />
<img src="//www.xifenfei.com/wp-content/uploads/2014/11/compress-in_memory-1.jpg" alt="compress-in_memory-1" width="1126" height="763" class="alignleft size-full wp-image-5628" /><br />
<img src="//www.xifenfei.com/wp-content/uploads/2014/11/compress-in_memory-2.jpg" alt="compress-in_memory-2" width="1132" height="743" class="alignleft size-full wp-image-5629" /><br />
详细link请见:https://docs.oracle.com/database/121/ARPLS/d_compress.htm#ARPLS65599</p>
<div id="crp_related"><ul><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e7%bb%84%e4%bb%b6%e5%88%9d%e8%af%95.html" rel="bookmark" class="crp_title">ORACLE 12C In-Memory组件初试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html" rel="bookmark" class="crp_title">对于IN Memory Option 部分细节测试&#8212;主要当inmemory_size不足之时</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html" rel="bookmark" class="crp_title">ORACLE 12C In-Memory功能性能测试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/in-memory%e6%95%b4%e4%bd%93%e6%b1%87%e6%80%bb.html" rel="bookmark" class="crp_title">In-Memory整体汇总</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2016/06/_use_single_log_writer%e5%92%8c_max_outstanding_log_writes.html" rel="bookmark" class="crp_title">_use_single_log_writer和_max_outstanding_log_writes</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/12/oracle-12c-varchar2%e6%94%af%e6%8c%8132k%e9%95%bf%e5%ba%a6%e5%ad%97%e7%ac%a6%e4%b8%b2.html" rel="bookmark" class="crp_title">ORACLE 12C varchar2支持32k长度字符串</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/03/%e6%9f%a5%e6%89%bevparameter-%e5%9f%ba%e8%a1%a8.html" rel="bookmark" class="crp_title">查找V$PARAMETER 基表</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/03/%e5%85%b3%e4%ba%8e9i%e4%b8%adsga_max_size%e5%8f%82%e6%95%b0%e6%8f%8f%e8%bf%b0.html" rel="bookmark" class="crp_title">关于9I中sga_max_size参数描述</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2013/01/%e8%ae%be%e7%bd%ae_smu_debug_mode%e5%ae%9e%e7%8e%b0%e6%8c%87%e5%ae%9asession%e7%ba%a7%e5%88%ab%e4%bd%bf%e7%94%a8%e7%89%b9%e5%ae%9a%e5%9b%9e%e6%bb%9a%e6%ae%b5.html" rel="bookmark" class="crp_title">设置_smu_debug_mode实现指定session级别使用特定回滚段</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2015/10/ora-65101-container-database-set-up-incorrectly.html" rel="bookmark" class="crp_title">ORA-65101 container database set up incorrectly</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2013/06/oracle-12c-cdb%e4%b8%adpdb%e5%8f%82%e6%95%b0%e7%ae%a1%e7%90%86%e6%9c%ba%e5%88%b6.html" rel="bookmark" class="crp_title">ORACLE 12C CDB中PDB参数管理机制</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2013/05/oracle-12c-pdb-%e7%ae%a1%e7%90%86%e4%bb%8b%e7%bb%8d1.html" rel="bookmark" class="crp_title">ORACLE 12C PDB 维护基础介绍</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>https://www.xifenfei.com/2014/11/%e5%a6%82%e4%bd%95%e4%bc%b0%e7%ae%97%e8%a1%a8in-memory%e9%9c%80%e8%a6%81%e5%86%85%e5%ad%98%e5%a4%a7%e5%b0%8f.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ORACLE 12C In-Memory功能性能测试</title>
		<link>https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html</link>
		<comments>https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html#comments</comments>
		<pubDate>Fri, 25 Apr 2014 10:16:29 +0000</pubDate>
		<dc:creator><![CDATA[惜分飞]]></dc:creator>
				<category><![CDATA[ORACLE 12C]]></category>
		<category><![CDATA[12.1.0.2]]></category>
		<category><![CDATA[In Memory]]></category>

		<guid isPermaLink="false">https://www.xifenfei.com/?p=5266</guid>
		<description><![CDATA[联系：手机/微信(+86 17813235971) QQ(107644445)  &#8230; <a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="xifenfeicopyright">
<p>联系：<a href="https://www.xifenfei.com/about_xifenfei" target="_blank">手机/微信(+86 17813235971)   QQ(107644445)</a><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&#038;uin=107644445&#038;site=qq&#038;menu=yes"><img src="https://www.xifenfei.com/wp-content/themes/img/site_qq.jpg" alt="QQ咨询惜分飞" title="QQ咨询惜分飞"/></a></p>
<p>标题：<a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html" target="_blank">ORACLE 12C In-Memory功能性能测试</a></p>
<p>作者：<a href="https://www.xifenfei.com" target="_blank">惜分飞</a>©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]</p>
</div>
<p><strong>启用In-Memory功能</strong><br />
数据库版本12.1.0.2及其以上版本,inmemory_size参数设置为合适值</p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; SELECT * FROM V$VERSION;

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit                         0
PL/SQL Release 12.1.0.2.0 -                                                               0
CORE    12.1.0.2.0                                                                        0
TNS for Linux: Version 12.1.0.2.0 -                                                       0
NLSRTL Version 12.1.0.2.0 -                                                               0

SQL&gt; SHOW PARAMETER inmemory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_query                       string      ENABLE
inmemory_size                        big integer 200M
</pre>
<p><strong>创建表</strong><br />
这里可以知道,创建表大小为13631488，但是未使用In-Memory功能</p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; create table t_xifenfei_in_memory as select * from dba_objects;

Table created.

SQL&gt; SELECT BYTES FROM USER_SEGMENTS WHERE SEGMENT_NAME='T_XIFENFEI_IN_MEMORY';

     BYTES
----------
  13631488

SQL&gt; select TABLE_NAME,INMEMORY_PRIORITY,INMEMORY_DISTRIBUTE,INMEMORY_COMPRESSION from user_tables;

TABLE_NAME                     INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS
------------------------------ -------- --------------- -----------------
T_XIFENFEI_IN_MEMORY

SQL&gt;  SELECT * FROM V$INMEMORY_AREA;

POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     166723584          0 DONE                                3
64KB POOL                     33554432          0 DONE                                3
</pre>
<p><strong>未使用In-Memory功能测试</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; SET AUTOT TRACE
SQL&gt; SELECT * FROM T_XIFENFEI_IN_MEMORY;

90902 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3598036702

------------------------------------------------------------------------------------------
| Id  | Operation         | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |                      | 90902 |     9M|   427   (1)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| T_XIFENFEI_IN_MEMORY | 90902 |     9M|   427   (1)| 00:00:01 |
------------------------------------------------------------------------------------------


Statistics
----------------------------------------------------------
          5  recursive calls
          0  db block gets
       7505  consistent gets
       1527  physical reads
          0  redo size
   12125231  bytes sent via SQL*Net to client
      67212  bytes received via SQL*Net from client
       6062  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
      90902  rows processed
</pre>
<p>这里可以看到未使用In-Memory功能,数据库查询执行计划使用TABLE ACCESS FULL，consistent gets为7505<br />
<br />
<strong>使用In-Memory功能测试</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt;  alter table  T_XIFENFEI_IN_MEMORY inmemory;

Table altered.

SQL&gt; select TABLE_NAME,INMEMORY_PRIORITY,INMEMORY_DISTRIBUTE,INMEMORY_COMPRESSION from user_tables;

TABLE_NAME                     INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS
------------------------------ -------- --------------- -----------------
T_XIFENFEI_IN_MEMORY           NONE     AUTO DISTRIBUTE FOR QUERY

--因为只是把该表设置了INMEMORY,但是未查询过,所以查询V$INMEMORY_AREA中未使用相关内存
SQL&gt; SELECT * FROM V$INMEMORY_AREA;

POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     166723584          0 DONE                                3
64KB POOL                     33554432          0 DONE                                3

--进行一次全表扫描
SQL&gt; SELECT COUNT(*) FROM T_XIFENFEI_IN_MEMORY;

  COUNT(*)
----------
     90902

--再次查看，已经使用了分配的In-Memory中内存
SQL&gt; SELECT * FROM V$INMEMORY_AREA;

POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     166723584    4194304 DONE                                3
64KB POOL                     33554432     131072 DONE                                3

SQL&gt; SET AUTOT TRACE
SQL&gt; SELECT * FROM T_XIFENFEI_IN_MEMORY;

90902 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 3598036702

---------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |                      | 90902 |     9M|    20  (45)| 00:00:01 |
|   1 |  TABLE ACCESS INMEMORY FULL| T_XIFENFEI_IN_MEMORY | 90902 |     9M|    20  (45)| 00:00:01 |
---------------------------------------------------------------------------------------------------


Statistics
----------------------------------------------------------
          3  recursive calls
          0  db block gets
          4  consistent gets
          0  physical reads
          0  redo size
    4946298  bytes sent via SQL*Net to client
      67212  bytes received via SQL*Net from client
       6062  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      90902  rows processed
</pre>
<p>这里我们可以发现，使用了In-Memory功能之后，数据库consistent gets为4,相比未使用In-Memory之前的7505,性能最少提高近2000倍.</p>
<div id="crp_related"><ul><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e7%bb%84%e4%bb%b6%e5%88%9d%e8%af%95.html" rel="bookmark" class="crp_title">ORACLE 12C In-Memory组件初试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/06/autotrace%e6%98%be%e7%a4%bastatistics%e5%be%88%e5%a4%9a%e4%bf%a1%e6%81%af%e4%b8%ba0.html" rel="bookmark" class="crp_title">autotrace显示Statistics很多信息为0</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2015/05/%e5%9c%a8race%e4%b8%ad%e4%bd%bf%e7%94%a8in-memory%e7%89%b9%e6%80%a7%e8%af%b7%e6%b3%a8%e6%84%8fparallel_degree_policy%e5%92%8cparallel_force_local%e5%8f%82%e6%95%b0.html" rel="bookmark" class="crp_title">在ORACLE 12C RAC中使用in memory特性请注意parallel_degree_policy和parallel_force_local参数</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/04/%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92%e4%b8%ad%e5%b8%b8%e8%a7%81index%e8%ae%bf%e9%97%ae%e6%96%b9%e5%bc%8f.html" rel="bookmark" class="crp_title">执行计划中常见index访问方式</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2013/04/12c-top-n-sql%e5%ae%9e%e7%8e%b0%e5%88%86%e9%a1%b5%e5%8a%9f%e8%83%bd.html" rel="bookmark" class="crp_title">ORACLE 12C TOP N SQL实现分页功能</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/07/select-maxamina-from-table%e4%bc%98%e5%8c%96.html" rel="bookmark" class="crp_title">select max(id),min(id) from table优化</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html" rel="bookmark" class="crp_title">对于IN Memory Option 部分细节测试&#8212;主要当inmemory_size不足之时</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/04/hint%e6%8c%87%e5%ae%9aindex%e7%9a%84%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3.html" rel="bookmark" class="crp_title">hint指定index的深入理解</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/12/%e5%88%9b%e5%bb%ba%e6%94%af%e6%8c%81null-index.html" rel="bookmark" class="crp_title">创建包含null值index</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2017/06/_optimizer_null_aware_antijoin-not-in.html" rel="bookmark" class="crp_title">_optimizer_null_aware_antijoin和not in效率</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/03/%e5%90%abis-null-sql%e8%af%ad%e5%8f%a5%e4%bc%98%e5%8c%96.html" rel="bookmark" class="crp_title">含is null sql语句优化</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2015/05/oracle-12c-table-access-by-index-rowid-batched.html" rel="bookmark" class="crp_title">Oracle 12C TABLE ACCESS BY INDEX ROWID BATCHED</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORACLE 12C In-Memory组件初试</title>
		<link>https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e7%bb%84%e4%bb%b6%e5%88%9d%e8%af%95.html</link>
		<comments>https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e7%bb%84%e4%bb%b6%e5%88%9d%e8%af%95.html#comments</comments>
		<pubDate>Thu, 24 Apr 2014 15:10:42 +0000</pubDate>
		<dc:creator><![CDATA[惜分飞]]></dc:creator>
				<category><![CDATA[ORACLE 12C]]></category>
		<category><![CDATA[12.1.0.2]]></category>
		<category><![CDATA[In Memory]]></category>

		<guid isPermaLink="false">https://www.xifenfei.com/?p=5259</guid>
		<description><![CDATA[联系：手机/微信(+86 17813235971) QQ(107644445)  &#8230; <a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e7%bb%84%e4%bb%b6%e5%88%9d%e8%af%95.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="xifenfeicopyright">
<p>联系：<a href="https://www.xifenfei.com/about_xifenfei" target="_blank">手机/微信(+86 17813235971)   QQ(107644445)</a><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&#038;uin=107644445&#038;site=qq&#038;menu=yes"><img src="https://www.xifenfei.com/wp-content/themes/img/site_qq.jpg" alt="QQ咨询惜分飞" title="QQ咨询惜分飞"/></a></p>
<p>标题：<a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e7%bb%84%e4%bb%b6%e5%88%9d%e8%af%95.html" target="_blank">ORACLE 12C In-Memory组件初试</a></p>
<p>作者：<a href="https://www.xifenfei.com" target="_blank">惜分飞</a>©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]</p>
</div>
<p>根据Oracle官方的宣传12.1.0.2的In-Memory组件实现内存列存储提高Oracle性能而且弥补在列存储中的不足。感谢<a href="http://www.lunar2013.com" title="Lunar" target="_blank">Lunar</a>的文档支持<br />
<strong>12.1.0.2版本</strong></p>
<pre class="brush: sql; title: ; notranslate">
[oracle@localhost ~]$ sqlplus chf/xifenfei@pdb1

SQL*Plus: Release 12.1.0.2.0 Beta on Thu Apr 24 21:39:43 2014

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit     
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL&gt; select * from v$version;

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit                         0
PL/SQL Release 12.1.0.2.0 -                                                               0
CORE    12.1.0.2.0                                                                        0
TNS for Linux: Version 12.1.0.2.0 -                                                       0
NLSRTL Version 12.1.0.2.0 -                                                               0
</pre>
<p><strong>关于In-Memory组件</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt;  select parameter,value from v$option where parameter like 'In-Memory%';

PARAMETER                                                        VALUE
---------------------------------------------------------------- -------------
In-Memory Column Store                                           TRUE
In-Memory Aggregation                                            TRUE
</pre>
<p><strong>关于inmemory参数</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; select NAME,value,DESCRIPTION from v$parameter where NAME like 'inmemory%';

NAME                 VALUE
-------------------- --------------------
DESCRIPTION
---------------------------------------------------
inmemory_size        0
size in bytes of in-memory area

inmemory_clause_defa
ult
Default in-memory clause for new tables

inmemory_force       DEFAULT
Force tables to be in-memory or not

inmemory_query       ENABLE
Specifies whether in-memory queries are allowed
</pre>
<p><strong>启用In-Memory功能</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; show parameter inmemory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_query                       string      ENABLE
inmemory_size                        big integer 0

SQL&gt; alter system set inmemory_size=200M scope=spfile;

System altered.

SQL&gt; shutdown immediate
Pluggable Database closed.
SQL&gt; startup
Pluggable Database opened.
SQL&gt; show parameter inmemory;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------------
inmemory_clause_default              string
inmemory_force                       string      DEFAULT
inmemory_query                       string      ENABLE
inmemory_size                        big integer 200M
</pre>
<p><strong>创建测试表</strong></p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; create table t_xifenfei_in_memory as select * from dba_objects;

Table created.

SQL&gt; select TABLE_NAME,INMEMORY_PRIORITY,INMEMORY_DISTRIBUTE,INMEMORY_COMPRESSION from user_tables;

TABLE_NAME                     INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS
------------------------------ -------- --------------- -----------------
T_XIFENFEI_IN_MEMORY

SQL&gt; alter table  T_XIFENFEI_IN_MEMORY inmemory;

Table altered.

SQL&gt; select TABLE_NAME,INMEMORY_PRIORITY,INMEMORY_DISTRIBUTE,INMEMORY_COMPRESSION from user_tables;

TABLE_NAME                INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS
------------------------- -------- --------------- -----------------
T_XIFENFEI_IN_MEMORY      NONE     AUTO DISTRIBUTE FOR QUERY
</pre>
<div id="crp_related"><ul><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e5%8a%9f%e8%83%bd%e6%b5%8b%e8%af%95.html" rel="bookmark" class="crp_title">ORACLE 12C In-Memory功能性能测试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/%e5%a6%82%e4%bd%95%e4%bc%b0%e7%ae%97%e8%a1%a8in-memory%e9%9c%80%e8%a6%81%e5%86%85%e5%ad%98%e5%a4%a7%e5%b0%8f.html" rel="bookmark" class="crp_title">如何估算表In-Memory需要内存大小</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/%e5%af%b9%e4%ba%8ein-memory-option-%e9%83%a8%e5%88%86%e7%bb%86%e8%8a%82%e6%b5%8b%e8%af%95-%e4%b8%bb%e8%a6%81%e5%bd%93inmemory_size%e4%b8%8d%e8%b6%b3%e4%b9%8b%e6%97%b6.html" rel="bookmark" class="crp_title">对于IN Memory Option 部分细节测试&#8212;主要当inmemory_size不足之时</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2014/11/in-memory%e6%95%b4%e4%bd%93%e6%b1%87%e6%80%bb.html" rel="bookmark" class="crp_title">In-Memory整体汇总</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/01/rac%e4%b8%ad%e5%85%b3%e4%ba%8eimmediate-kill-session-bug%e8%ae%b0%e5%bd%95.html" rel="bookmark" class="crp_title">RAC中关于&#8221;Immediate Kill Session#&#8221; bug记录</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/05/%e8%bf%9e%e7%bb%ad%e4%b8%a4%e6%ac%a1remote_listener-%e8%ae%be%e7%bd%ae%e4%b8%banull%e5%af%bc%e8%87%b4pmon%e5%92%8clistener%e5%bc%82%e5%b8%b8.html" rel="bookmark" class="crp_title">连续两次REMOTE_LISTENER 设置为null导致pmon和listener异常</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/10/sys%e7%94%a8%e6%88%b7%e5%af%86%e7%a0%81%e5%90%ab-sqlplus%e7%99%bb%e5%bd%95%e6%95%b0%e6%8d%ae%e5%ba%93%e8%af%a1%e5%bc%82%e4%ba%8b%e4%bb%b6%e5%88%86%e6%9e%90.html" rel="bookmark" class="crp_title">sys用户密码含$ sqlplus登录数据库诡异事件分析</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2024/08/max_columns-4096.html" rel="bookmark" class="crp_title">Oracle 23ai 表和视图的列最多支持到4096个</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/11/vsgainfo%e4%b8%adfree-sga-memory-available%e7%9a%84%e5%90%84%e7%a7%8d%e6%83%85%e5%86%b5%e8%a7%a3%e9%87%8a.html" rel="bookmark" class="crp_title">v$sgainfo中Free SGA Memory Available的各种情况解释</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2015/05/%e5%9c%a8race%e4%b8%ad%e4%bd%bf%e7%94%a8in-memory%e7%89%b9%e6%80%a7%e8%af%b7%e6%b3%a8%e6%84%8fparallel_degree_policy%e5%92%8cparallel_force_local%e5%8f%82%e6%95%b0.html" rel="bookmark" class="crp_title">在ORACLE 12C RAC中使用in memory特性请注意parallel_degree_policy和parallel_force_local参数</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/11/1749.html" rel="bookmark" class="crp_title">Oracle 10.2.0.x升级到11.2.0.3</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2012/12/oracle-12c-varchar2%e6%94%af%e6%8c%8132k%e9%95%bf%e5%ba%a6%e5%ad%97%e7%ac%a6%e4%b8%b2.html" rel="bookmark" class="crp_title">ORACLE 12C varchar2支持32k长度字符串</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>https://www.xifenfei.com/2014/04/oracle-12c-in-memory%e7%bb%84%e4%bb%b6%e5%88%9d%e8%af%95.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
