[20190214]11g Query Result Cache RC Latches補充.txt

来源:https://www.cnblogs.com/lfree/archive/2019/02/14/10375117.html
-Advertisement-
Play Games

[20190214]11g Query Result Cache RC Latches補充.txt--//上午測試鏈接:http://blog.itpub.net/267265/viewspace-2632907/--//發現自己的一個錯誤,另外寫一篇帖子更正.--//順便複習result cach ...


[20190214]11g Query Result Cache RC Latches補充.txt

--//上午測試鏈接:http://blog.itpub.net/267265/viewspace-2632907/
--//發現自己的一個錯誤,另外寫一篇帖子更正.
--//順便複習result cache的相關內容:鏈接:https://blog.csdn.net/jolly10/article/details/81382644

查看SQL結果高速緩存字典信息
(G)V$RESULT_CACHE_STATISTICS : 列出各種高速緩存設置和記憶體使用量統計信息
(G)V$RESULT_CACHE_MEMORY : 列出所有記憶體塊和相應的統計信息
(G)V$RESULT_CACHE_OBJECTS: 列出所有對象(高速緩存結果和依賴性)及其屬性
(G)V$RESULT_CACHE_DEPENDENCY: 列出高速緩存結果之間的依賴性詳細信息及依賴性

dbms_result_cache包可以監視和管理result cache

例如:
dbms_result_cache.flush:清除result cache。
dbms_result_cache.invalidate(owner,name):使某對象的result cache無效。
dbms_result_cache.status:顯示result cache的狀態。
dbms_result_cache.memory_report:顯示result cache的記憶體使用狀況。

1.環境:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SCOTT@book> create table job_times ( sid   number, time_ela number);
Table created.

SCOTT@book> create table hc_t ( n number(*,0), v varchar2(200)) ;
Table created.

SCOTT@book> insert into hc_t select level, dbms_random.string('p', 200) from dual connect by level <= 10000;
10000 rows created.

SCOTT@book> create unique index i_hc_t on hc_t(n);
Index created.

SCOTT@book> commit;
Commit complete.

--//分析表略.

create or replace procedure do_rc(
 p_iterations in number,p_max in number
) is
 l_rowid  rowid;
 l_n number;
begin
 insert into job_times
  values (sys_context('userenv', 'sid'), dbms_utility.get_time)
  returning rowid into l_rowid;

 for i in 1 .. p_iterations
 loop
  l_n:=trunc(dbms_random.value(1, p_max));
  for cur in (select /*+ result_cache */ * from hc_t where n=l_n)
  loop
   null;
  end loop;
 end loop;

 update job_times set
   time_ela=dbms_utility.get_time-time_ela
  where rowid=l_rowid;
end;
/
--//註:我加入參數p_max,限制取值範圍.
--//為了重覆測試建立腳本.
$ cat aa.sql
delete from job_times;
Commit ;

declare
 l_job number;
begin
 for i in 1 .. 4
 loop
  dbms_job.submit(
   job => l_job,
   what => 'do_rc(100000,&&1);'
    );
 end loop;
end;
/
commit ;

2.開始測試:
SCOTT@book> 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  1792K
result_cache_mode                    string       MANUAL
result_cache_remote_expiration       integer      0

SCOTT@book> exec dbms_result_cache.flush()
PL/SQL procedure successfully completed.

SCOTT@book> set serverout on
SCOTT@book> exec dbms_result_cache.memory_report
R e s u l t   C a c h e   M e m o r y   R e p o r t
[Parameters]
Block Size          = 0 bytes
Maximum Cache Size  = 0 bytes (0 blocks)
Maximum Result Size = 0 bytes (0 blocks)
[Memory]
Total Memory = 40568 bytes [0.022% of the Shared Pool]
... Fixed Memory = 40568 bytes [0.022% of the Shared Pool]
... Dynamic Memory = 0 bytes [0.000% of the Shared Pool]
PL/SQL procedure successfully completed.

--//我前面測試忽略的result cache的大小.

SCOTT@book> @ aa.sql 10000
4 rows deleted.
Commit complete.
PL/SQL procedure successfully completed.
Commit complete.

SCOTT@book> select count(*),avg(TIME_ELA),sum(TIME_ELA) from job_times ;
  COUNT(*) AVG(TIME_ELA) SUM(TIME_ELA)
---------- ------------- -------------
         4        4001.5         16006

--//以上我上午測試的結果.大約每個job需要40秒上下.

SCOTT@book> exec dbms_result_cache.memory_report
R e s u l t   C a c h e   M e m o r y   R e p o r t
[Parameters]
Block Size          = 1K bytes
Maximum Cache Size  = 1792K bytes (1792 blocks)
Maximum Result Size = 89K bytes (89 blocks)
[Memory]
Total Memory = 2003960 bytes [1.111% of the Shared Pool]
... Fixed Memory = 40568 bytes [0.022% of the Shared Pool]
... Dynamic Memory = 1963392 bytes [1.089% of the Shared Pool]
....... Overhead = 128384 bytes
....... Cache Memory = 1792K bytes (1792 blocks)
........... Unused Memory = 0 blocks
........... Used Memory = 1792 blocks
............... Dependencies = 1 blocks (1 count)
............... Results = 1791 blocks
................... SQL     = 1791 blocks (1791 count)
PL/SQL procedure successfully completed.

--//實際上我的環境僅僅能容納1791個結果.也就是我的配置太小,共用池不夠大.result_cache_max_result=5,僅僅使用共用池的5%.

SCOTT@book> @ aa.sql 1791
4 rows deleted.
Commit complete.
PL/SQL procedure successfully completed.
Commit complete.

SCOTT@book> select count(*),avg(TIME_ELA),sum(TIME_ELA) from job_times ;
  COUNT(*) AVG(TIME_ELA) SUM(TIME_ELA)
---------- ------------- -------------
         4         440.5          1762

--//你可以發現這個就與沒有做result cache的結果相近了.
--//我重啟資料庫.通過result cache :RC latch記數也可以驗證這個問題.

SCOTT@book> column name format a30
SCOTT@book> select name, gets, misses, sleeps, wait_time from v$latch where name like 'Result Cache%';
NAME                                 GETS     MISSES     SLEEPS  WAIT_TIME
------------------------------ ---------- ---------- ---------- ----------
Result Cache: RC Latch                  0          0          0          0
Result Cache: SO Latch                  0          0          0          0
Result Cache: MB Latch                  0          0          0          0

SCOTT@book> @ aa.sql 1791
4 rows deleted.
Commit complete.
PL/SQL procedure successfully completed.
Commit complete.

SCOTT@book> select count(*),avg(TIME_ELA),sum(TIME_ELA) from job_times ;
  COUNT(*) AVG(TIME_ELA) SUM(TIME_ELA)
---------- ------------- -------------
         4           432          1728

SCOTT@book> select name, gets, misses, sleeps, wait_time from v$latch where name like 'Result Cache%';
NAME                                 GETS     MISSES     SLEEPS  WAIT_TIME
------------------------------ ---------- ---------- ---------- ----------
Result Cache: RC Latch             405177       3865         10        132
Result Cache: SO Latch                  8          0          0          0
Result Cache: MB Latch                  0          0          0          0

SCOTT@book> @ aa.sql 10000
4 rows deleted.
Commit complete.
PL/SQL procedure successfully completed.
Commit complete.

SCOTT@book> select count(*),avg(TIME_ELA),sum(TIME_ELA) from job_times ;
  COUNT(*) AVG(TIME_ELA) SUM(TIME_ELA)
---------- ------------- -------------
         4       3978.25         15913

SCOTT@book> select name, gets, misses, sleeps, wait_time from v$latch where name like 'Result Cache%';
NAME                                 GETS     MISSES     SLEEPS  WAIT_TIME
------------------------------ ---------- ---------- ---------- ----------
Result Cache: RC Latch            1787843     534395     683654   67269002
Result Cache: SO Latch                 16          0          0          0
Result Cache: MB Latch                  0          0          0          0


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • gnome連續幾個版本的terminal預設配置文件都是同一個配置文件“b1dcc9dd-5262-4d8d-a863-c897e6d979b9”。這是因為gnome的developers編輯了這個配置文件並作為gnome-terminal的預設配置文件,用來對terminal生成一個預設的樣式和外 ...
  • 問題 在用brew安裝GCC時, 報瞭如下錯誤. 原因是 在從App Store上下載Xcode後,預設是不會安裝Command Line Tools的. 解決方法 這時需要先更新一下xcode 參考 "Xcode中Command Line Tools安裝方法" ...
  • 操作系統無法更新解決方案! 1.檢查網路連接是否正常; 2.檢查控制面板設置,windows更新是否開啟; 3.檢查電腦-管理-服務和應用程式-服務組件里的windows update是否開啟; 4.運行gpedit.msc,打開組策略,檢查電腦配置和用戶配置的管理模版-windows組件-wi ...
  • (本文是測試環境進行的操作:) 1.查看一些信息: [root@openstackcontroller ~]# manila type-list [root@openstackcontroller ~]# manila service-list 因為,新建共用存儲的時候保證服務的正常,否則會失敗。 ...
  • 用命令查詢埠情況:netstat -an | grep LISTEN 發現mysql用到3306這個埠,只能被127.0.0.1訪問(0.0.0.0的就是每個IP都有的服務,寫明哪個IP的就是綁定那個IP的服務) 網上查了一下預設情況下mysql只允許本地進入設置,如果需要外部IP連接到mysq ...
  • 我的伺服器買的是阿裡雲ECS linux系統。為了更好的操作資料庫,我希望可以用navicat for mysql管理我的資料庫。 當我按照正常的模式去鏈接mysql的時候, 報錯提示: 於是,通過查找資料,我找到瞭解決的方法,其實是阿裡雲伺服器為了安全預設不允許從外面鏈接Mysql資料庫。 下麵是 ...
  • 今天在測試MySQL的連接時候,發現連接不通過,並報錯ERROR 2003 (HY000): Can't connect to mysql server on '192.168.10.210' (111) 測試代碼: 谷歌了一下之後,原來是在mysql的my.cnf中有下麵一段代碼: 如果要讓mys ...
  • 一、概述 Oralce中的任務有2種:Job和Dbms_job,兩者的區別有: 1. jobs是oracle資料庫的對象, dbms_jobs只是jobs對象的一個實例, 就像對於tables, emp和dept都是表的實例。 2. 創建方式也有差異,Job是通過調用dbms_scheduler.c ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...