亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Oracle 表緩存(caching table)的使用

系統(tǒng) 2361 0

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

-- Oracle 表緩存 (caching table) 的使用

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

?

1. 使用 caching table 的原因

??????? 在通常的情況下,應(yīng)用程序訪問在 cache 中的數(shù)據(jù)塊將按照 LRU 算法來進行處理。然而對于小表的訪問,當使用全表掃描時,則該表

??? 中的塊會放置 LRU 列表最近最少使用尾部的 ( LRU ) ,因此很快就被淘汰出局。然而使用基于成本優(yōu)化的方法,對于小表進行查詢以及收

??? 集統(tǒng)計信息,大多情形下走的是全表掃描,因此勢必造成一種情形,即該表后續(xù)需要再次訪問,而每次使用了全表掃描,而該對象很快

??? 被淘汰出局,因此需要再次讀入到 buffer cache ,耗用了大量的 I / O

???????????

2. 解決該問題的方法

??? 設(shè)計表為 caching table ,即使對該表使用全表訪問時,則該表對象的塊仍然被放置在 LRU 列表最近最多使用的尾部 (MRU )

??? 不要過度的使用 caching table ,以免造成性能下降

??? 通常將 caching table 存放在 keep buffer pool ,缺省的情況下會放置在 default buffer pool 。

???

3. 具有 cache 屬性與 pin 的差異

??? 對于具有 cache 屬性的對象,并不是將該對象 pin cache 里,而是盡可能的延遲該對象駐留 cache 的時間

??? 而對于 pin 對象,則是將該對象常駐到內(nèi)存

???

4. 設(shè)計 cache table 的方法

??? 創(chuàng)建表對象時,使用 cache 子句

??? 修改表對象時,使用 cache 子句

??? 使用 cache 提示

???

??? 創(chuàng)建表對象時使用 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 修改已經(jīng)存在的表

??????? alter table scott . emp cache ;

???????

??? ? 可以使用 nocache 來修改對象,使其不具備 cache 屬性

??????? alter table soctt . emp nocache

???????

??? ? 使用 hint 提示符來實現(xiàn) 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 之外。

??????? 注意不同的演示環(huán)境可能有所差異,本人的演示環(huán)境如下 ;

??????????? 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 有優(yōu)先權(quán)。 buffer_pool 用來指定存貯使用緩沖池,而 cache/nocache 指定存儲的

??? 方式 (LRU MRU ) 。建表時候不注明的話, nocache 是默認值。

?

7. 更多參考

有關(guān)閃回特性請參考

??????? Oracle 閃回特性(FLASHBACK DATABASE)

Oracle 閃回特性(FLASHBACK DROP & RECYCLEBIN)

Oracle 閃回特性(Flashback Query 、Flashback Table)

Oracle 閃回特性(Flashback Version 、Flashback Transaction)

?

有關(guān)基于用戶管理的備份和備份恢復的概念請參考:

??????? Oracle 冷備份

??????? Oracle 熱備份

??????? Oracle 備份恢復概念

??????? Oracle 實例恢復

??????? Oracle 基于用戶管理恢復的處理 ( 詳細描述了介質(zhì)恢復及其處理 )

???????

??? 有關(guān) RMAN 的恢復與管理請參考:

??????? RMAN 概述及其體系結(jié)構(gòu)

??????? RMAN 配置、監(jiān)控 與管理

??????? RMAN 備份詳解

??????? RMAN 還原與恢復

???????

??? 有關(guān) Oracle 體系結(jié)構(gòu)請參考:

??????? Oracle 實例和Oracle 數(shù)據(jù)庫(Oracle 體系結(jié)構(gòu))

??????? Oracle 表空間與數(shù)據(jù)文件

??????? Oracle 密碼文件

??????? Oracle 參數(shù)文件

Oracle 數(shù)據(jù)庫實例啟動關(guān)閉過程

??????? Oracle 聯(lián)機重做日志文件(ONLINE LOG FILE)

??????? Oracle 控制文件(CONTROLFILE)

??????? Oracle 歸檔日志

Oracle 表緩存(caching table)的使用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 网友自拍视频悠悠在线 | 婷婷久久精品 | 久久国产精品亚洲综合 | 一区视频在线播放 | 精品一区二区在线观看 | 亚洲精品资源在线 | 日日爽天天干 | 九九视频在线观看视频 | 久久在线看 | 91国内精品久久久久免费影院 | 色色网视频| 国产成人福利 | 亚洲91色 | 午夜一区二区在线观看 | 欧美人成毛片在线播放 | 和日本免费不卡在线v | 免费香蕉依人在线视频久 | 国产成人在线网站 | 精品国产成人高清在线 | 午夜私人影院粉色视频我要 | aaa毛片视频免费观看 | 日韩日b | 99久久99热久久精品免 | 性做久久久久久久免费看 | 99热视屏 | 看一级特黄a大片日本片黑人 | 色偷偷亚洲第一成人综合网址 | 国产性tv国产精品 | 欧美一级高清免费a | 奇米四色在线观看 | 韩国日本三级在线观看 | 国产波多野结衣中文在线播放 | 综合伊人 | 色播性播爱播放影院 | 欧美伊人久久 | 九九热思思 | 婷婷伊人五月 | 国产精品国产亚洲精品看不卡 | 在线观看日本一区 | 精品久久久影院 | 国产一区二区三区亚洲欧美 |