欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Oracle 表緩存(caching table)的使用

系統 2081 0

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

-- 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 歸檔日志

Oracle 表緩存(caching table)的使用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产亚洲欧美在线 | 五月婷婷天堂 | 婷婷精品 | 26uuu欧美视频在线观看 | 国产最新网址 | 久久精品视频大全 | 视频一区二区三区免费观看 | 一级毛片免费播放 | 亚洲国产成人av好男人在线观看 | 国产三级做爰在线观看视频 | 亚洲成网站www久久九 | 成人在线一区二区三区 | 中文字幕在线二区 | 国产精品久久久久久久一区探花 | 国产日韩欧美亚洲 | 国产h视频在线观看高清 | 亚洲国产日本 | 婷婷涩五月 | www.中文字幕在线观看 | 色呦呦免费 | 成人午夜视频在线观看 | 欧美行性性性o00x | 小明永久免费视频 | 四虎影院最新网址 | 欧美极品jizzhd欧美 | 欧美久久一区二区三区 | 色先锋av资源中文字幕 | 亚洲成人中文 | 国产精品视频网 | 欧美福利一区二区三区 | 一本一道久久综合狠狠老 | 色播开心网| 一级一片在线播放在线观看 | 婷婷丁香综合 | 九九热精品视频在线播放 | 国产成人久久蜜一区二区 | 日韩视频在线观看免费 | 精一区二区 | 操夜夜| 成人亚洲区无码偷拍 | 污视频网站免费看 |