Cahce Tables in Memory的原因以及实现方法

原创 2004年08月02日 00:43:00

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

author: Kmaus (Created in <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2003-6-4)

mail: kamus@itpub.net

版权声明

转载请注明作者及出处

 

原因(为什么需要cache table):

默认情况下如果某个Tables是通过Full Table Scan(FTS)方式被读入Buffer cache的,那么这些Block将被立刻放入LRU Listleast recently used结尾。Oracle这样做的目的在于防止大的全表扫描会将Buffer cache中的其他Block挤出Buffer cache

但是这种处理方法导致了一个优化Buffer cache需要特别注意的地方,特别是在使用CBO优化器的时候。

如果CBO优化器发现一个经常使用并且比较小的表,那么CBO通常会使用全表扫描来读取此表的数据。因为是全表扫描,如上所述,读入的block会被被立刻放入LRU Listleast recently used结尾,这样很快就会被下一次读入的其他数据挤出Buffer cache,到下一次使用此表的时候,Oracle又不得不从磁盘上将数据再次读入Buffer cache,这无疑是一个比较昂贵的操作。

 

解决方法:

将这样的小表设计为cached tableCached table进行全表扫描的时候,不会被放在least recently used结尾,而是被放在most recently used结尾。这样保证了此类数据可以更长久地留在Buffer cache

 

实现方法:

1. create table的时候指定:

SQL> create table A(

  2  id number,

  3  other varchar2(10))

  4  tablespace app1

  5  storage (initial 50k next 50k pctincrease 0)

  6  [color=red]cache[/color];

 

2. 创建之后利用alter table来修改:

SQL> alter table A [color=red]cache[/color];

 

3. 利用hint

SQL> select [color=red]/*+cache*/[/color] id,other from A;

注意:该操作仅对于当前Query有效,其他对A表的检索仍然会使用表的默认cache方式

 

检查cache table的信息

SQL> select owner,table_name

  2  from dba_tables

  3  where ltrim(cache)='Y';

【Spark专场】Deep Dive: How Spark Uses Memory

当今,企业”上云”节奏正在加速,特别是在以人工智能技术为代表的新一波技术浪潮推动下,企业一方面通过云技术增强了自身的数据存储连接、计算以及智能应用能力;另一方面,利用基于云计算之上的大数据、人工智能等新技术,企业又可以以较小的成本、更高效地挖掘出快速提升企业业务的数据与方法,实现云、数、智的自然融合和协力发展。
  • 2017年06月12日 15:00

Oracle 12c in memory 组件浅谈

http://geek.csdn.net/news/detail/52881 随着信息搜集技术的不断成熟,大量的公司已经积累了海量的数据,于是有大量的客户需要一种...
  • zdy0_2004
  • zdy0_2004
  • 2016-01-26 00:15:09
  • 992

Oracle内存详解之 Library cache 库缓冲

Library cache是Shared pool的一部分,它几乎是Oracle内存结构中最复杂的一部分,主要存放shared curosr(SQL)和PLSQL对象(function,procedu...
  • cuiyan1982
  • cuiyan1982
  • 2017-11-09 11:38:39
  • 93

Oracle Library cache 内部机制 说明

一. Library Cache 说明            LibraryCache 是Oracle SGA 中Shared pool 的组成部分。Shared Pool的说明,参考之前的blog:...
  • tianlesoftware
  • tianlesoftware
  • 2011-07-24 17:26:03
  • 16051

Oracle Database 12c In-Memory 基本原理与简介

概要Database In-Memory是Oracle数据库的选项,类似于RAC,ADG,发布于12.0.1.2。 它的主要目的是利用内存的速度和优化的列格式来加速分析。以下我们用DBIM或IM作为...
  • stevensxiao
  • stevensxiao
  • 2016-05-17 16:38:52
  • 6313

TABLESPACE MEMORY CACHE

/* IMPLEMENTATION OF THE TABLESPACE MEMORY CACHE =============================================...
  • spche
  • spche
  • 2012-04-21 00:00:54
  • 869

Oracle 表缓存(caching table)的使用

在通常的情况下,应用程序访问在cache中的数据块将按照LRU算法来进行处理。然而对于小表的访问,当使用全表扫描时,则该表中的块会放置LRU列表最近最少使用尾部的(LRU端),因此很快就被淘汰出局。设...
  • robinson_0612
  • robinson_0612
  • 2011-03-06 12:24:00
  • 10810

Cahce Tables in Memory的原因以及实现方法

author: Kmaus (Created in 2003-6-4) mail: kamus@itpub.net 版权声明 转载请注明作者及出处   原因(为什么需要cache table): 默...
  • Kamus
  • Kamus
  • 2004-08-02 00:43:00
  • 2549

Oracle 12.1.0.2 In-Memory组件测试

1:连接到sys用户下,查看内存初始化参数的值 [sql] view plain copy [oracle@oracle12c ~]$ sqlplus / ...
  • gaobudong1234
  • gaobudong1234
  • 2017-10-26 13:57:21
  • 83

oracle 12c 列式存储 ( In Memory 理论)

随着Oracle 12c推出了in memory组件,使得Oracle数据库具有了双模式数据存放方式,从而能够实现对混合类型应用的支持:传统的以行形式保存的数据满足OLTP应用;列形式保存的数据满足以...
  • zhang123456456
  • zhang123456456
  • 2017-05-12 08:59:10
  • 317
收藏助手
不良信息举报
您举报文章:Cahce Tables in Memory的原因以及实现方法
举报原因:
原因补充:

(最多只允许输入30个字)