欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 国产精品一区二区三区久久久 | 精品伊人网 | 色综合久久久久久久久五月性色 | 精品国产第一国产综合精品gif | 欧洲成人一区 | 小泽玛丽娅 | 亚洲第一成人在线 | 高清一区二区三区 | 成人国产精品免费视频不卡 | 国产精品久久久久久中文字 | 欧美一级一片 | 99热在线免费观看 | 艹艹艹逼 | 一区二区三区免费在线观看 | 交免费观看在线 | 成人国产精品 | 97网站| 色射综合 | 欧美黑人ⅹxxx片 | 日韩欧美亚洲国产 | 成人a视频在线观看 | 一级一片免费看 | 乱子伦xxxxvideos | 免费亚洲黄色 | 成人精品在线观看 | 亚洲欧美一区二区三区情侣bbw | 亚洲综合婷婷 | 亚洲欧美中文日韩综合 | 亚洲第一成人在线 | 国产精品亚洲成在人线 | 美国三级日本三级久久99 | 日韩福利在线观看 | 91看片免费看 | 奇米影视7777 | 亚洲精品国产网红在线 | 天天做天天爱天天操 | 中文精品久久 | 无码缴情做A爱片毛片A片 | 久久久精 | 久久免费在线视频 | 麻豆高清免费国产一区 |