`
csstome
  • 浏览: 1527133 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Oracle 表缓存(caching table)的使用

 
阅读更多

--************************************

-- 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属性的对象,并不是将该对象pincache里,而是尽可能的延迟该对象驻留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一旦被loadbuffer cache中,始终处于LRUMRU端,尽可能的

避免因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 tablekeep buffer pool的异同

两者的目的都是尽可能将最热的对象置于到buffer pool,尽可能的避免aged out

cache table是将对象置于到default buffer cache

而使用buffer_pool keep子句是将对象置于到keep buffer pool

buffer_poolcache同时指定时,keepcache有优先权。buffer_pool用来指定存贮使用缓冲池,而cache/nocache指定存储的

方式(LRUMRU)。建表时候不注明的话,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 归档日志

分享到:
评论

相关推荐

    Flask:Flask扩展使用:Flask-Caching缓存机制.docx

    Flask:Flask扩展使用:Flask-Caching缓存机制.docx

    [EntLib]微软企业库5 0 学习之路 第四步 使用缓存提高网站的性能(EntLib Caching

    在本教程中,我们将深入探讨如何使用缓存来提升网站的性能,并了解Caching模块的核心特性。 1. **缓存方式** - **内存存储**:这是最基础的缓存方式,将数据存储在应用程序的内存中,提供快速的访问速度,但数据...

    MemCached高速缓存类库Enyim.Caching.dll

    MemCached高速缓存类库Enyim.Caching.dll 自建MemCached或者链接阿里云OCS都可以使用此类库

    ASP.NET 2.0 Caching

    - **@OutputCaching指令**:适用于简单且常见的缓存场景,使用起来更为简便。 例如,在页面头部使用`&lt;%@ OutputCache Duration="60" VaryByParam="none" %&gt;`来指定页面将被缓存60秒,并且不依赖于请求参数的变化。 ...

    yii2缓存Caching基本用法示例

    使用缓存时,开发者还需考虑缓存的依赖性,即缓存数据依赖于某些数据或条件,当这些数据或条件发生变化时,缓存需要被清除或更新。Yii2的缓存组件提供了如`delete`、`flush`等方法来管理缓存数据的生命周期。 除了...

    显示所有缓存 清除所有缓存 Asp.net(C#)

    - 如果缓存项设置了依赖关系(例如依赖于某个文件或数据库表),则在删除该依赖项时,对应的缓存项也会自动被清除。 - 使用`RemoveAllCache`方法时,应该考虑到并发访问的问题,尤其是在高并发环境下。 通过上述...

    C#缓存的使用

    在C#编程中,缓存是一种非常重要的技术,它能够提高应用程序的性能,减少对数据库或其他资源的重复访问。缓存的基本思想是将频繁访问的数据存储在内存中,...正确理解和使用缓存,能够有效提升系统性能,降低资源消耗。

    Enyim.Caching 2.4

    Enyim.Caching 还提供了多种性能优化手段,比如使用预热机制加载常用数据到缓存,以及利用缓存策略(如 LRU,LFU)有效地管理缓存空间。 总结,Enyim.Caching 2.4 是一个强大的 .NET Memcached 客户端,它的灵活性...

    PHP Oracle Web Development: Data Processing, Security, Caching, XML, Web Services, and Ajax

    书中详细介绍了如何安装和配置PHP与Oracle环境、连接PHP到Oracle数据库、在Oracle中实现业务逻辑处理、构建事务应用程序、使用安全性功能、通过缓存提高性能、利用XML特性、实现SOAP Web服务以及构建基于Ajax的...

    hibernate caching

    #### 一、什么是缓存(Caching) 缓存是一种优化数据库应用程序的技术,它的设计目的是减少应用与数据库之间的通信流量,通过存储已经从数据库加载的数据来实现这一目标。当从数据库检索数据时,只有那些当前缓存中...

    .NET 缓存设计的使用说明

    在当今高效率要求的软件开发领域,缓存技术是...通过对何时使用缓存、缓存设计的步骤和一些实用的缓存操作方法的理解和实践,开发者能够为.NET应用程序构建高效、可靠的缓存策略,从而显著提升应用程序性能和用户体验。

    ResponseCaching, 用于缓存响应的ASP.NET 核心中间件.zip

    ResponseCaching, 用于缓存响应的ASP.NET 核心中间件 ASP.NET 核心响应缓存AppVeyor: : 这里 repo 承载用于响应缓存的ASP.NET 核心中间件。这里项目是 ASP.NET 核心的一部分。 你可以在主页上找到 ASP.NET 核心的...

    web caching

    ### Web Caching:关键技术与应用 #### 一、引言 随着互联网的迅猛发展,特别是自1993年以来世界万维网(World Wide Web,简称WWW)的普及与使用量急剧增加,网络负载和用户响应时间面临了前所未有的挑战。这种...

    c#缓存机制,提供缓存功能

    // 使用缓存数据 } else { // 数据不在缓存中,重新获取并可能存入缓存 } ``` 5. 清除缓存:可以使用Remove方法删除单个缓存项,或者使用Dispose方法清除整个缓存。 ```csharp cache.Remove(cacheKey); // 删除...

    Memcache客户端Enyim.Caching 参考的例子

    以下是一个简单的Enyim.Caching使用示例,展示了如何初始化客户端并执行基本的缓存操作: ```csharp using Enyim.Caching; using Enyim.Caching.Memcached; // 初始化Memcached客户端 var config = new ...

    memcached-win32-1.4.4-14+Enyim.Caching.2.12

    5. **Enyim.Caching使用**:通过NuGet包管理器或手动导入Enyim.Caching.2.12.zip中的库,实例化MemcachedClient对象,设置服务器地址和端口,然后可以进行添加、获取、删除缓存等操作。 6. **性能优化**:了解和...

    spring-cache(通过key值更新缓存)

    在Spring框架中,缓存是提高应用程序性能的重要手段。Spring Cache是一个抽象层,它允许开发者在不关注具体缓存实现的...正确地配置和使用缓存,不仅可以减少数据库访问,还能降低系统的整体负载,从而提升用户体验。

    java caching system完整项目例子(包括用到的JAR包)

    Java 缓存系统(Java Caching System,简称JCS)是一种高效的、可扩展的缓存解决方案,主要用于提高应用程序性能,减少对数据库的访问频率。它通过存储数据在内存中,使得重复请求的数据能够快速获取,从而降低了...

Global site tag (gtag.js) - Google Analytics