本篇文章為大家展示了oracle result cache 結(jié)果集緩存的使用方法,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、正寧ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的正寧網(wǎng)站制作公司
結(jié)果集緩存
緩存是一種最常見的在計(jì)算機(jī)系統(tǒng)用來提高性能的技術(shù).硬件和軟件被廣泛的使用.oracle數(shù)據(jù)庫也不會例外.例如在緩沖區(qū)緩存中緩存數(shù)據(jù)文件塊,在字典緩存中緩存字典信息,在庫緩存中緩存游標(biāo).在oracle11G中結(jié)果集緩存也是可用的.
結(jié)果集緩存是如何工作的
oracle數(shù)據(jù)庫引擎提供了三種結(jié)果集緩存:
服務(wù)器結(jié)果集緩存也叫查詢結(jié)果緩存,是一種服務(wù)器端緩存,它用來存儲查詢的結(jié)果集.
pl/sql函數(shù)結(jié)果集緩存是一種服務(wù)器端緩存,它用來存儲pl/sql函數(shù)返回的結(jié)果集.
客戶端結(jié)果集緩存是一種客戶端緩存,用來存儲查詢結(jié)果集.
服務(wù)器結(jié)果集緩存
服務(wù)器結(jié)果集緩存是用來避免重復(fù)執(zhí)行查詢.簡單來說查詢第一次執(zhí)行,它的結(jié)果集被存儲在共享池中.然后后續(xù)執(zhí)行相同的查詢時(shí)從結(jié)果集緩存中直接提取結(jié)果集而不用重新計(jì)算.注意這兩個(gè)查詢被認(rèn)為是相等的.因此能使用相同的結(jié)果集.另外如果出現(xiàn)綁定變量,那么它們的值必須相同.這是必須的,因?yàn)楹苊黠@,綁定變量作為參數(shù)輸入并傳給查詢.因此不同的綁定變量值會有不同的結(jié)果集.注意結(jié)果集緩存是存儲在共享池中,對于一個(gè)指定的實(shí)例所有連接的會話都能共享相同的緩存條目.
下面來舉例說明.注意在查詢時(shí)指定了result_cache提示來啟用結(jié)果集緩存.第一次執(zhí)行花了1.04秒.可以看到在執(zhí)行計(jì)劃中操作result cache確定了對查詢啟用了結(jié)果集緩存.在執(zhí)行計(jì)劃中starts列清楚的說明了所有的操作都至少要被執(zhí)行一次.執(zhí)行計(jì)劃中所有的操作都是必須的因?yàn)槭堑谝淮螆?zhí)行這個(gè)查詢.因此結(jié)果集緩存還不包含結(jié)果集.
SQL> alter session set statistics_level=all; SQL> SELECT /*+ result_cache */ 2 p.prod_category, c.country_id, 3 sum(s.quantity_sold) AS quantity_sold, 4 sum(s.amount_sold) AS amount_sold 5 FROM sh.sales s, sh.customers c, sh.products p 6 WHERE s.cust_id = c.cust_id 7 AND s.prod_id = p.prod_id 8 GROUP BY p.prod_category, c.country_id 9 ORDER BY p.prod_category, c.country_id; 已選擇81行。 已用時(shí)間: 00: 00: 01.04 SQL> select * from table(dbms_xplan.display_cursor(null,null,'all allstats')); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- SQL_ID g9sxqz9qgutu7, child number 0 ------------------------------------- SELECT /*+ result_cache */ p.prod_category, c.country_id, sum(s.quantity_sold) AS quantity_sold, sum(s.amount_sold) AS amount_sold FROM sh.sales s, sh.customers c, sh.products p WHERE s.cust_id = c.cust_id AND s.prod_id = p.prod_id GROUP BY p.prod_category, c.country_id ORDER BY p.prod_category, c.country_id Plan hash value: 1866882273 -------------------------------------------------------------------------------- PLAN_TABLE_OUTPUT ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | Pstart| Pstop | A-Rows | A-Time | OMem | 1Mem | O/1/M | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 985 (100)| | | | 81 |00:00:00.01 | | | | | 1 | RESULT CACHE | cu8pf4s7jn9d05yda1swvwpd7y | 1 | | | | | | | 81 |00:00:00.01 | | | | | 2 | SORT GROUP BY | | 1 | 68 | 3808 | 985 (7)| 00:00:12 | | | 0 |00:00:00.01 | 73728 | 73728 | | |* 3 | HASH JOIN | | 1 | 968 | 54208 | 984 (7)| 00:00:12 | | | 0 |00:00:00.01 | 940K| 940K| | | 4 | VIEW | index$_join$_003 | 1 | 72 | 1512 | 3 (34)| 00:00:01 | | | 0 |00:00:00.01 | | | | |* 5 | HASH JOIN | | 1 | | | | | | | 0 |00:00:00.01 | 1269K| 1269K| | | 6 | INDEX FAST FULL SCAN| PRODUCTS_PK | 1 | 72 | 1512 | 1 (0)| 00:00:01 | | | 0 |00:00:00.01 | | | | | 7 | INDEX FAST FULL SCAN| PRODUCTS_PROD_CAT_IX | 1 | 72 | 1512 | 1 (0)| 00:00:01 | | | 0 |00:00:00.01 | | | | | 8 | VIEW | VW_GBC_9 | 1 | 968 | 33880 | 981 (7)| 00:00:12 | | | 0 |00:00:00.01 | | | | | 9 | HASH GROUP BY | | 0 | 968 | 26136 | 981 (7)| 00:00:12 | | | 0 |00:00:00.01 | 56M| 4744K| | |* 10 | HASH JOIN | | 1 | 918K| 23M| 941 (3)| 00:00:12 | | | 0 |00:00:00.01 | 3056K| 1398K| | | 11 | TABLE ACCESS FULL | CUSTOMERS | 1 | 55500 | 541K| 406 (1)| 00:00:05 | | | 0 |00:00:00.01 | | | | | 12 | PARTITION RANGE ALL| | 1 | 918K| 14M| 530 (3)| 00:00:07 | 1 | 28 | 0 |00:00:00.01 | | | | | 13 | TABLE ACCESS FULL | SALES | 28 | 918K| 14M| 530 (3)| 00:00:07 | 1 | 28 | 0 |00:00:00.01 | | | | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第二次執(zhí)行只花了0.03秒.在執(zhí)行計(jì)劃中starts列顯示了所有操作的執(zhí)行次數(shù).RESULT CACHE被執(zhí)一次.其它的操作沒有被執(zhí)行.換句話說直接使用了存儲在結(jié)果集緩存中的結(jié)果集.
SQL> SELECT /*+ result_cache */ 2 p.prod_category, c.country_id, 3 sum(s.quantity_sold) AS quantity_sold, 4 sum(s.amount_sold) AS amount_sold 5 FROM sh.sales s, sh.customers c, sh.products p 6 WHERE s.cust_id = c.cust_id 7 AND s.prod_id = p.prod_id 8 GROUP BY p.prod_category, c.country_id 9 ORDER BY p.prod_category, c.country_id; 已選擇81行。 已用時(shí)間: 00: 00: 00.03 SQL> select * from table(dbms_xplan.display_cursor(null,null,'all allstats')); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- SQL_ID g9sxqz9qgutu7, child number 0 ------------------------------------- SELECT /*+ result_cache */ p.prod_category, c.country_id, sum(s.quantity_sold) AS quantity_sold, sum(s.amount_sold) AS amount_sold FROM sh.sales s, sh.customers c, sh.products p WHERE s.cust_id = c.cust_id AND s.prod_id = p.prod_id GROUP BY p.prod_category, c.country_id ORDER BY p.prod_category, c.country_id Plan hash value: 1866882273 -------------------------------------------------------------------------------- PLAN_TABLE_OUTPUT ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | Pstart| Pstop | A-Rows | A-Time | OMem | 1Mem | O/1/M | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 985 (100)| | | | 162 |00:00:00.01 | | | | | 1 | RESULT CACHE | cu8pf4s7jn9d05yda1swvwpd7y | 1 | | | | | | | 162 |00:00:00.01 | | | | | 2 | SORT GROUP BY | | 0 | 68 | 3808 | 985 (7)| 00:00:12 | | | 0 |00:00:00.01 | 73728 | 73728 | | |* 3 | HASH JOIN | | 0 | 968 | 54208 | 984 (7)| 00:00:12 | | | 0 |00:00:00.01 | 940K| 940K| | | 4 | VIEW | index$_join$_003 | 0 | 72 | 1512 | 3 (34)| 00:00:01 | | | 0 |00:00:00.01 | | | | |* 5 | HASH JOIN | | 0 | | | | | | | 0 |00:00:00.01 | 1269K| 1269K| | | 6 | INDEX FAST FULL SCAN| PRODUCTS_PK | 0 | 72 | 1512 | 1 (0)| 00:00:01 | | | 0 |00:00:00.01 | | | | | 7 | INDEX FAST FULL SCAN| PRODUCTS_PROD_CAT_IX | 0 | 72 | 1512 | 1 (0)| 00:00:01 | | | 0 |00:00:00.01 | | | | | 8 | VIEW | VW_GBC_9 | 0 | 968 | 33880 | 981 (7)| 00:00:12 | | | 0 |00:00:00.01 | | | | | 9 | HASH GROUP BY | | 0 | 968 | 26136 | 981 (7)| 00:00:12 | | | 0 |00:00:00.01 | 56M| 4744K| | |* 10 | HASH JOIN | | 0 | 918K| 23M| 941 (3)| 00:00:12 | | | 0 |00:00:00.01 | 3056K| 1398K| | | 11 | TABLE ACCESS FULL | CUSTOMERS | 0 | 55500 | 541K| 406 (1)| 00:00:05 | | | 0 |00:00:00.01 | | | | | 12 | PARTITION RANGE ALL| | 0 | 918K| 14M| 530 (3)| 00:00:07 | 1 | 28 | 0 |00:00:00.01 | | | | | 13 | TABLE ACCESS FULL | SALES | 0 | 918K| 14M| 530 (3)| 00:00:07 | 1 | 28 | 0 |00:00:00.01 | | | | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在執(zhí)行計(jì)劃中要注意一個(gè)名字緩存ID它與操作result cache相關(guān).如果知道這個(gè)緩存ID,可以查詢v$resul_cache_objects視圖來顯示關(guān)于緩存數(shù)據(jù)的信息.下面的查詢顯示緩存結(jié)果集已經(jīng)被發(fā)布(換句話說可以使用).視圖信息會顯示緩存結(jié)果集是何進(jìn)創(chuàng)建的,創(chuàng)建它花了多長時(shí)間,有多少行記錄被存儲和它被引用了多少次.其它提供關(guān)于緩存結(jié)果集信息的視圖還有v$result_cache_dependency,v$result_cache_memory和v$result_chace_statistics.
SQL> SELECT status, creation_timestamp, build_time, row_count, scan_count 2 FROM v$result_cache_objects 3 WHERE cache_id = 'cu8pf4s7jn9d05yda1swvwpd7y'; STATUS CREATION_TIMESTAMP BUILD_TIME ROW_COUNT SCAN_COUNT --------- ------------------ ---------- ---------- ---------- Published 2013-7-5 9:21:26 94 81 3
為了保證結(jié)果的一致性(也就是說結(jié)果集是相同的就是看它是來自緩存還是來自數(shù)據(jù)庫計(jì)算).每當(dāng)查詢中所引用的對象發(fā)生改變,那么依賴于這些表的緩存條目將會無效.事實(shí)情況就是這樣,即使真正的改變沒有發(fā)生.例如.甚至一個(gè)select * for update語句后面緊跟著一個(gè)commit提交也會導(dǎo)致依賴于select表的緩存條目變?yōu)闊o效.
有一些動態(tài)初始化參數(shù)可以控制服務(wù)器結(jié)果集緩存:
result_cache_max_size:以byte為單位來指定在共享池中用于結(jié)果集緩存的內(nèi)存總量.如果它被設(shè)置為0,這個(gè)功能將會被禁用.缺省值是一個(gè)比0大的值,它是從共享池中派生出來的.內(nèi)存分配是動態(tài)的,因此初始化參數(shù)只能指定它的上限.可以使用下面的查詢來顯示當(dāng)前分配的內(nèi)存大小:
SQL> SELECT name, sum(bytes) FROM v$sgastat WHERE name LIKE 'Result Cache%' GROUP BY rollup(name); NAME SUM(BYTES) -------------------------- ---------- Result Cache 161680 Result Cache: Bloom Fltr 2048 Result Cache: Cache Mgr 208 Result Cache: Memory Mgr 200 Result Cache: State Objs 2896 167032 下面的語句顯示了resulr_cache_max_size的值為15424K SQL> show parameter result NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ client_result_cache_lag big integer 3000 client_result_cache_size big integer 0 result_cache_max_result integer 5 result_cache_max_size big integer 15424K result_cache_mode string MANUAL result_cache_remote_expiration integer 0
result_cache_mode:指定在什么情況下使用結(jié)果集緩存.可以將它設(shè)置為manual手動這是缺省值或者設(shè)置為force.當(dāng)使用manual時(shí)結(jié)果集緩存只有當(dāng)指定result_cache提示時(shí)才使用.當(dāng)使用force時(shí)那么會對所有沒有使用no_result_cache提示的所有查詢使用結(jié)果集緩存.因?yàn)樵诖蠖鄶?shù)情況下我們只會對少量的查詢使用結(jié)果集緩存,所以讓該參數(shù)設(shè)置為它的缺省值manual當(dāng)只需要使用時(shí)在查詢中指定result_cache來啟用它.
result_cache_max_result:指定單一個(gè)結(jié)果集緩存的占用result_cache_max_size服務(wù)器結(jié)果集緩存大小的百分比.它的缺省值是5.它的值可以是0到100的任何一個(gè)數(shù)字.超過這個(gè)限制的結(jié)果集緩存將是無效的.
result_cache_remote_expiration:指定基于遠(yuǎn)程對象的結(jié)果集的有效時(shí)間(以分鐘為單位).這是必須的,因當(dāng)遠(yuǎn)程對象已經(jīng)發(fā)生改變了基于這些遠(yuǎn)程對象的失效的結(jié)果集緩存不能被執(zhí)行.當(dāng)經(jīng)過初始化參數(shù)所指定的有效時(shí)間后這些結(jié)果集才變?yōu)闊o效.這個(gè)參數(shù)的缺省值是0,意味著基于遠(yuǎn)程對象的查詢緩存功能被禁用.
初始化參數(shù)result_cache_max_size和result_cache_max_result只能在系統(tǒng)級別進(jìn)行修改.其它的result_cache_mode
和result_cache_remote_expiration能在會話級別進(jìn)行修改.
注意:將result_cache_remote_expiration參數(shù)設(shè)置為一個(gè)比0大的數(shù)字會導(dǎo)致過時(shí)的結(jié)果集緩存存在.因此只有你真正地理解這樣做的影響后才能將它設(shè)置為比0大.
使用結(jié)果集緩存有幾個(gè)很明顯的限制:
查詢使用非確定性的函數(shù),序列和臨時(shí)表是結(jié)果集不會被緩存
查詢違反了讀一致性時(shí)結(jié)果集將不會被緩存.例如,當(dāng)通過會話創(chuàng)建結(jié)果集時(shí)所引用的表正經(jīng)歷大量的事務(wù)這樣的結(jié)果
集不會被緩存.
引用數(shù)據(jù)字典視圖的查詢的結(jié)果集不會被緩存.
dbms_result_cache包
可以使用dbms_result_cache包來管理結(jié)果集緩存,它提供了以下程序來進(jìn)行管理:
bypass:在會話或系統(tǒng)級別臨時(shí)禁用或啟用結(jié)果集緩存.
flush:從結(jié)果集緩存中清空所有對象
invalidate:讓依賴于指定的數(shù)據(jù)庫對象的所有結(jié)果集緩存變?yōu)闊o效
invalidate_object:讓單個(gè)結(jié)果集緩存條目變?yōu)闊o效
memory_report:生成一個(gè)內(nèi)存使用情況報(bào)告
status:顯示結(jié)果集緩存的狀態(tài).
例如:
SQL> select dbms_result_cache.status from dual; STATUS -------------------------------------------------------------------------------- ENABLED
pl/sql函數(shù)結(jié)果集緩存
pl/sql函數(shù)結(jié)果集緩存類似于服務(wù)器結(jié)果集緩存,但是它支持pl/sql函數(shù),還和服務(wù)器結(jié)果集緩存共享相同的內(nèi)存結(jié)構(gòu).它的目的是在結(jié)果集緩存中存儲函數(shù)返回的值(僅僅只有函數(shù)返回的值,過程返回的值不能被緩存).明顯地使用不同輸入值的函數(shù)是以不同的緩存條目被緩存在結(jié)果集緩存中的.在下面的例子中顯示了一個(gè)啟用結(jié)果集緩存的函數(shù).為了啟用pl/sql函數(shù)結(jié)果集緩存,要指定result_cache子句.還可以指定relies_on子句來指定函數(shù)依賴于哪個(gè)表來返回結(jié)果.
SQL> CREATE OR REPLACE FUNCTION f 2 RETURN NUMBER 3 RESULT_CACHE RELIES_ON(t) IS 4 l_ret NUMBER; 5 BEGIN 6 SELECT count(t.indi_id) INTO l_ret FROM impl_chenzhou.bs_insured t; 7 RETURN l_ret; 8 END; 9 / Function created
在下面的例子中將會調(diào)用函數(shù)2480625次f不使用結(jié)果集緩存(通過使用bypass過程來臨時(shí)禁用結(jié)果集緩存)共用了4.69秒
SQL> execute dbms_result_cache.bypass(bypass_mode => TRUE, session => TRUE); SQL> select count(f) from impl_chenzhou.bs_insured t; COUNT(F) ---------- 2480625 Elapsed: 00:00:04.69 在下面的例子中將會調(diào)用函數(shù)2480625次f使用結(jié)果集緩存共用了0.32秒 SQL> execute dbms_result_cache.bypass(bypass_mode => FALSE, session => TRUE) SQL> select count(f) from impl_chenzhou.bs_insured t; COUNT(F) ---------- 2480625 Elapsed: 00:00:00.32
注意:如果relies_on子句沒有指定或者包含錯誤信息,當(dāng)函數(shù)依賴的對象發(fā)生修改結(jié)果集緩存不會變?yōu)闊o效.因此可能會出現(xiàn)過時(shí)的結(jié)果集.
使用pl/sql函數(shù)結(jié)果集有一些限制,下面的函數(shù)不能使用結(jié)果集緩存:
使用out和(或者)in out參數(shù)的函數(shù)
定義了使用調(diào)用者權(quán)限的函數(shù)
管道化表函數(shù)
從匿名塊調(diào)用函數(shù)
使用in參數(shù)或者返回值有以下類型的函數(shù):LOB,REF CURSOR,對象和記錄
客戶端結(jié)果緩存集
客戶端結(jié)果集緩存是用客戶端緩存來存查詢的結(jié)果集.它的目的和工作類似于服務(wù)器端結(jié)果集緩存.與服務(wù)器端的實(shí)現(xiàn)進(jìn)行比較有兩個(gè)重要的不同.第一它避免了需要在客戶端/服務(wù)器之間來回地執(zhí)行sql語句.這是一大優(yōu)點(diǎn).第二結(jié)果集的失效是基于一種輪詢機(jī)制,因此一致性不能保證這是一大缺點(diǎn).
為了實(shí)現(xiàn)這種輪詢客戶端必須定期地執(zhí)行數(shù)據(jù)庫調(diào)用來檢查數(shù)據(jù)庫引擎看看它的結(jié)果集緩存是否已經(jīng)變?yōu)闊o效了.為了輪詢的開銷最小化,每一次客戶端由于其它原因執(zhí)行一個(gè)數(shù)據(jù)庫調(diào)用時(shí)它將檢查結(jié)果集緩存的有效性.這樣,就可以避免掉那些用于對緩存的結(jié)果集進(jìn)行失效操作的數(shù)據(jù)庫調(diào)用.使客戶端能持續(xù)地執(zhí)行"正常的"數(shù)據(jù)庫調(diào)用.
盡管它是客戶端緩存但還是要在服務(wù)器端來啟用它.下面有些參數(shù)來控制客戶端緩存:
client_result_cache_size:指定每一個(gè)客戶端進(jìn)程能使用的結(jié)果集緩存的最大內(nèi)存大小以byte為單位.如果它設(shè)置為0,這也是缺省值那么這個(gè)功能將禁用.這個(gè)初始化參數(shù)是靜態(tài)的只能在實(shí)例級別進(jìn)行修改.修改完后必須對實(shí)例進(jìn)行重啟才會生效.
client_result_cache_lag:指定兩次數(shù)據(jù)庫調(diào)用之間的最大時(shí)間間隔以毫秒為單位.也就是說它指定無效的結(jié)果集能在客戶端緩存中保留多長的時(shí)間.缺省值是3000.這個(gè)初始化參數(shù)是靜態(tài)的只能在實(shí)例級別進(jìn)行修改.修改完后必須對實(shí)例進(jìn)行重啟才會生效.
oci_result_cache_max_size:會覆蓋服務(wù)器端設(shè)置的初始化參數(shù)client_result_cache-size.然而要注意是如果在服務(wù)器禁用了結(jié)果集緩存這個(gè)參數(shù)將不能激活它.
oci_result_cache_max_rset_size:指定單個(gè)結(jié)果集緩存最多能使用的內(nèi)存大小以byte為單位.
oci_result_cache_max_rset_rows:指定單個(gè)結(jié)果集緩存最多能存儲的返回行數(shù).
何時(shí)使用
當(dāng)你遇到由程序反復(fù)執(zhí)行相同的操作所導(dǎo)致的性能問題時(shí),你要么減少執(zhí)行的頻率要么減少操作的響應(yīng)時(shí)間.理想的情況時(shí)兩者都做.然而有時(shí)(例如由于應(yīng)用程序代碼不能修改)你只能實(shí)現(xiàn)后者.為了減少響應(yīng)時(shí)間可以使用各種優(yōu)化技術(shù),如果還不能滿足要求那就只能使用高級優(yōu)化技術(shù)了象結(jié)果集緩存.基本上要有效使用結(jié)果集緩存要滿足兩個(gè)條件.第一相對于修改數(shù)據(jù)來說同樣的數(shù)據(jù)查詢的更頻繁.第二要有足夠的內(nèi)存來存儲結(jié)果集.
在大多數(shù)情況下不能對所有的查詢都啟用結(jié)果集緩存.事實(shí)上在大多數(shù)時(shí)候只有特定的查詢才能從結(jié)果集緩存中獲益而對于其它的情況來說,結(jié)果集緩存只不過是一種純粹的額外的開銷說不定還會使用緩存過載.還要記住的是服務(wù)器端緩存是對所有會話共享的,因此它們的訪問是要同步的(它們也會象所有的共享資源一樣變成一個(gè)串處理點(diǎn)).因此只有在真正查詢請求它們的時(shí)候才會結(jié)果集緩存.也就是說只當(dāng)真正需要使用它們來提高性能時(shí)才在查詢中指定result_cache提示.
服務(wù)器端結(jié)果集緩存無法完全避免執(zhí)行一個(gè)查詢的額外開銷.這意味著如果一個(gè)查詢在不使用結(jié)果集緩存的情況下對于每一行執(zhí)行了最少的邏輯讀(不是物理讀)了,那么使用結(jié)果集緩存性能不會提高很多.請記住高速緩存和結(jié)果集緩存都是存儲在相同的共享內(nèi)存中的.
pl/sql函數(shù)結(jié)果集緩存對于經(jīng)常在sql語句中使用的函數(shù)來說特別有用.事實(shí)上常遇到這樣的情況被處理或被返回的每一行都會調(diào)用一次這個(gè)函數(shù),同時(shí)輸入的參數(shù)也只有幾個(gè)不同的值,然而這個(gè)函數(shù)經(jīng)常從pl/sql中被頻繁地調(diào)用它能使用結(jié)果集緩存.
因?yàn)橐恢滦缘膯栴}客戶端緩存只應(yīng)該用在只讀表或主要是讀的表上.
最后要注意的是可以同進(jìn)使用服務(wù)器和客戶端結(jié)果集緩存.然而對于客戶端執(zhí)行的查詢不能選擇只使用服務(wù)器結(jié)果集緩存而不使用客戶端結(jié)果集緩存.也就是說兩種結(jié)果集緩存都會被使用.
上述內(nèi)容就是oracle result cache 結(jié)果集緩存的使用方法,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站標(biāo)題:oracleresultcache結(jié)果集緩存的使用方法
網(wǎng)站路徑:http://vcdvsql.cn/article8/pehpop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、、網(wǎng)站制作、網(wǎng)站導(dǎo)航、網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)