--************************************
-- Oracle 表缓存(caching table)的使用
--************************************
1.使用caching table 的原因
在通常的情况下,应用程序访问在cache中的数据块将按照LRU算法来进行处理。然而对于小表的访问,当使用全表扫描时,则该表
中的块会放置LRU列表最近最少使用尾部的(LRU端),因此很快就被淘汰出局。然而使用基于成本优化的方法,对于小表进行查询以及收
集统计信息,大多情形下走的是全表扫描,因此势必造成一种情形,即该表后续需要再次访问,而每次使用了全表扫描,而该对象很快
被淘汰出局,因此需要再次读入到buffer cache,耗用了大量的I/O。
2.解决该问题的方法
设计表为caching table ,即使对该表使用全表访问时,则该表对象的块仍然被放置在LRU列表最近最多使用的尾部(MRU段)
不要过度的使用caching table,以免造成性能下降
通常将caching table 存放在keep buffer pool,缺省的情况下会放置在default buffer pool。
3.具有cache属性与pin 的差异
对于具有cache属性的对象,并不是将该对象pin到cache里,而是尽可能的延迟该对象驻留cache的时间
而对于pin对象,则是将该对象常驻到内存
4.设计cache table 的方法
创建表对象时,使用cache子句
修改表对象时,使用cache子句
使用cache 提示
创建表对象时使用cache,如下面的例子
create table tb_test
(id number
,name varchar2(20)
,sex char(1)
,age number
,score number)
tablespace users
storage(initial 50k next 50k pctincrease 0)
cache; --指定cache子句
使用alter table 修改已经存在的表
alter table scott.emp cache;
可以使用nocache来修改对象,使其不具备cache属性
alter table soctt.emp nocache
使用hint提示符来实现cache
select /*+ cache*/ empno,ename from scott.emp;
5.使用例子演示caching table情形
scott@ORCL> create table tb1 nologging
2 as select level id,rpad('*',4000,'*') data,rpad('*',2000,'*') data2
3 from dual
4 connect by level <= 15000;
Table created.
scott@ORCL> create table tb2
2 cache nologging
3 as select level id,rpad('*',4000,'*') data,rpad('*',2000,'*') data2
4 from dual
5 connect by level <= 15000;
Table created.
scott@ORCL> select count(1) from tb1;
COUNT(1)
----------
15000
scott@ORCL> select count(1) from tb2;
COUNT(1)
----------
15000
scott@ORCL> select table_name,num_rows,cache from user_tables where table_name in ('TB1','TB2');
TABLE_NAME NUM_ROWS CACHE
--------------- ---------- -----
TB1 15000 N
TB2 15000 Y
scott@ORCL> set autotrace traceonly statistics;
scott@ORCL> select count(1) from tb1;
Statistics
----------------------------------------------------------
5 recursive calls
0 db block gets
15086 consistent gets
15000 physical reads
0 redo size
412 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
scott@ORCL> select count(1) from tb1;
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
15011 consistent gets
15000 physical reads
0 redo size
412 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
scott@ORCL> select count(1) from tb2;
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
15011 consistent gets
197 physical reads
0 redo size
412 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
scott@ORCL> select count(1) from tb2;
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
15011 consistent gets
0 physical reads
0 redo size
412 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
从上面的示例中可以看出,表tb1每次都将使用相同的物理读,而表tb2一旦被load进buffer cache中,始终处于LRU的MRU端,尽可能的
避免因buffer cache过小而被置换到buffer cache之外。
注意不同的演示环境可能有所差异,本人的演示环境如下;
scott@ORCL> show parameter sga_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 264M
sga_target big integer 264M
scott@ORCL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
6.注意cache table与keep buffer pool的异同
两者的目的都是尽可能将最热的对象置于到buffer pool,尽可能的避免aged out。
cache table是将对象置于到default buffer cache。
而使用buffer_pool keep子句是将对象置于到keep buffer pool。
当buffer_pool和cache同时指定时,keep比cache有优先权。buffer_pool用来指定存贮使用缓冲池,而cache/nocache指定存储的
方式(LRU或MRU端)。建表时候不注明的话,nocache是默认值。
7.更多参考
有关闪回特性请参考
Oracle 闪回特性(FLASHBACK DATABASE)
Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)
Oracle 闪回特性(Flashback Query、Flashback Table)
Oracle 闪回特性(Flashback Version、Flashback Transaction)
有关基于用户管理的备份和备份恢复的概念请参考:
Oracle 冷备份
Oracle 热备份
Oracle 备份恢复概念
Oracle 实例恢复
Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)
有关RMAN的恢复与管理请参考:
RMAN 概述及其体系结构
RMAN 配置、监控与管理
RMAN 备份详解
RMAN 还原与恢复
有关Oracle体系结构请参考:
Oracle 实例和Oracle数据库(Oracle体系结构)
Oracle 表空间与数据文件
Oracle 密码文件
Oracle 参数文件
Oracle 数据库实例启动关闭过程
Oracle 联机重做日志文件(ONLINE LOG FILE)
Oracle 控制文件(CONTROLFILE)
Oracle 归档日志
分享到:
相关推荐
MemCached高速缓存类库Enyim.Caching.dll 自建MemCached或者链接阿里云OCS都可以使用此类库
缓存的使用: <?php $key = 'cacheKey'; //读取缓存 $data = Yii::$app->cache->get($key); //判断缓存是否存在,如果不存就生成缓存 if ($data === false) { $cache->set($key, $data); } ?> 更多关于Yii...
[EntLib]微软企业库5 0 学习之路 第四步 使用缓存提高网站的性能(EntLib Caching
ResponseCaching, 用于缓存响应的ASP.NET 核心中间件 ASP.NET 核心响应缓存AppVeyor: : 这里 repo 承载用于响应缓存的ASP.NET 核心中间件。这里项目是 ASP.NET 核心的一部分。 你可以在主页上找到 ASP.NET 核心的...
improve performance with caching; employ XML features; implement SOAP web services; build Ajax-driven PHP/Oracle solutions. Building and deploying PHP applications on Oracle Database combines the ...
Enyim.Caching.dll 32位 Enyim.Caching.dll 32位 Enyim.Caching.dll 32位
CacheController:它将允许管理员用户从Admin UI中清除缓存(举一个简单的示例Country Table:我们不会每天在Table中添加一个新的国家,但是如果您使用insert语句将一个新的国家添加到Table中。)我们可以将此控制...
Memcached客户端Enyim.Caching
Java_Caching_System.pdf
主要介绍了Laravel使用Caching缓存数据减轻数据库查询压力的方法,以项目实例形式较为详细的分析了Laravel框架使用Caching缓存的原理与具体实现技巧,需要的朋友可以参考下
# java编程之Caffeine...@Caching:同时拥有三个注解的功能,下面的代码中,对于caching的缓存采用了查找和存入,对于t4缓存采用删除缓存。(问题是如果是redis缓存,是否可以?) spring的源码的解释是可以匹配特定的
fastify-caching是框架的一个插件,它提供了根据操作 HTTP 缓存头的机制。 支持 Fastify 版本 ^3.0.0。 v5.x 版本在支持 Fastify ^3.0.0。 本插件完全支持 Fastify 的封装。 因此,应该在不同的上下文中注册应该...
hibernate caching 培训内容, 熟悉hibernate cache
The Basics of Web Caching Section I.2. The Basics of Web Replication Section I.3. Beyond Performance Section I.4. Summary Part I: Background Chapter 1. Network Layers and Protocols ...
DNS搭建所需的caching-nameserver-9.3.6-20.P1.el5_8.6.x86_64.rpm
Enyim.Caching.DLL 2.13 using Enyim.Caching; using Enyim.Caching.Configuration; using Enyim.Caching.Memcached; using Enyim.Caching.Memcached.Results;
Spring Boot缓存示例我们将创建一个Web应用程序,以显示生命,宇宙和一切的答案。 由于这是一个相当复杂的问题,因此可能需要花费一些时间来找出答案-可能需要数百万年的时间,但是在本示例中,我们将其设为10秒。 ...