[20190423]簡單測試latch nowilling等待模式.txt

来源:https://www.cnblogs.com/lfree/archive/2019/04/24/10760681.html
-Advertisement-
Play Games

[20190423]簡單測試latch nowilling等待模式.txt--//我對這個問題的理解就是如果參數willing=0,表示無法獲取該latch,直接退出,再尋找類似的latch。--//我僅僅知道redo copy latch具有這個特性:> select addr,name,leve ...


[20190423]簡單測試latch nowilling等待模式.txt

--//我對這個問題的理解就是如果參數willing=0,表示無法獲取該latch,直接退出,再尋找類似的latch。
--//我僅僅知道redo copy latch具有這個特性:
> select addr,name,level#,latch#,gets,misses,sleeps,immediate_gets,immediate_misses,waiters_woken,waits_holding_latch,spin_gets,wait_time from v$latch_children where lower(name) like '%'||lower('redo copy')||'%' ;
ADDR             NAME       LEVEL#     LATCH#       GETS     MISSES     SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAITERS_WOKEN WAITS_HOLDING_LATCH  SPIN_GETS  WAIT_TIME
---------------- ---------- ------ ---------- ---------- ---------- ---------- -------------- ---------------- ------------- ------------------- ---------- ----------
00000012D720ADA8 redo copy       4        208         53          0          0      500627938           304381             0                   0          0          0
00000012D720ACD0 redo copy       4        208         53          0          0      497827706           323330             0                   0          0          0
..
00000012D72086D8 redo copy       4        208         53          0          0      491448415           365472             0                   0          0          0
00000012D7208600 redo copy       4        208         53          0          0      508008338           391955             0                   0          0          0
48 rows selected.
--//你可以發現nowait latch 的一個特點,就是IMMEDIATE_GETS會相對很高.註我查詢的生產系統的情況.測試環境不會這麼高的.

http://andreynikolaev.wordpress.com/2010/04/12/latch-internals-information-sources/

--//參數如下,另外我前面blog寫錯了,where是最後1個參數。
kslgetl(laddr, wait, why, where) – Get exclusive latch

More precisely, to request the latch Oracle kernel needs:
--//更準確地說,要請求閂鎖Oracle內核需要:

laddress -- address of latch in SGA
wait     -- flag. If true, this is latch get in willing-to-wait mode..
why      -- context why the latch is acquired at this where.
where    -- code for location from where the latch is acquired.

1.環境:
SYS@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

--//參考鏈接如下:http://blog.itpub.net/267265/viewspace-2641548/=>[20190416]exclusive latch測試腳本.txt

$ cat peek.sh
#! /bib/bash
# 參數如下:latch_name Monitoring_duration or laddr
sqlplus -s -l / as sysdba <<EOF
col laddr new_value laddr
SELECT sysdate,addr laddr FROM v\$latch_parent WHERE NAME='$1';
oradebug setmypid
$(seq $2|xargs -I{} echo -e 'oradebug peek 0x&laddr 8\nhost sleep 1' )
EOF

$ cat exclusive_latch.txt
/* 參數如下: @ exclusive_latch.txt latch_name willing why where sleep_num */
--//connect / as sysdba
col laddr new_value laddr
SELECT addr laddr FROM v$latch_parent WHERE NAME='&&1';
oradebug setmypid
oradebug call kslgetl 0x&laddr &&2 &&3 &&4
host sleep &&5
oradebug call kslfre 0x&laddr
--//exit

$ cat y1.sh
#! /bin/bash
zdate=$(date '+%Y%m%d%H%M%S')
echo $zdate
source peek.sh 'test excl. parent2 l0' 20 | timestamp.pl >| /tmp/peekx_${zdate}.txt &
seq 20 | xargs -I{} echo -e 'sqlplus -s -l / as sysdba <<< @latch_free\nsleep 1'  | bash >| /tmp/latch_freeo_${zdate}.txt &
# 參數如下: @ exclusive_latch.txt latch_name willing why where sleep_num
sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 1 2 6" > /dev/null &
sleep 2
sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6" > /dev/null &
sleep 4.1
sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 5 6 6" > /dev/null &
wait

$ . y1.sh
20190424091250
[3]-  Done                    sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 1 2 6" > /dev/null
[1]   Done                    source peek.sh 'test excl. parent2 l0' 20 | timestamp.pl >|/tmp/peekx_${zdate}.txt
[4]-  Done                    sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6" > /dev/null
[5]+  Done                    sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 5 6 6" > /dev/null
[2]+  Done                    seq 20 | xargs -I{} echo -e 'sqlplus -s -l / as sysdba <<< @latch_free\nsleep 1' | bash >|/tmp/latch_freeo_${zdate}.txt

2.測試:
$ grep  -v '^.*: $' /tmp/peekx_20190424091250.txt | cut -c10- | uniq -c
      1  SYSDATE             LADDR
      1  ------------------- ----------------
      1  2019-04-24 09:12:50 0000000060009978
      1  Statement processed.
      6  [060009978, 060009980) = 00000015 00000000
      1  [060009978, 060009980) = 00000000 00000000
      6  [060009978, 060009980) = 00000015 00000000
      7  [060009978, 060009980) = 00000000 00000000
--//你可以發現第1個會話申請成功,第2個會話沒有申請成功,直接退出.第3個會話申請成功(因為sleep 2+4.1秒).

--//cat /tmp/latch_freeo_20190424091250.txt
2019-04-24 09:12:50
2019-04-24 09:12:51
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295

2019-04-24 09:12:52
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295

2019-04-24 09:12:53
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295

2019-04-24 09:12:54
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295

2019-04-24 09:12:55
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295

2019-04-24 09:12:56
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295

2019-04-24 09:12:57
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295

2019-04-24 09:12:58
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295

2019-04-24 09:13:00
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295

2019-04-24 09:13:01
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295

2019-04-24 09:13:02
Process 21
 holding: 0000000060009978  "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295

2019-04-24 09:13:03
2019-04-24 09:13:04
--//21=0x15,與peek看到的一致.

3.手工測試看看函數的返回值
--//session 1:
SYS@book> @ exclusive_latch.txt 'test excl. parent2 l0' 0 1 2 60
old   1: SELECT addr laddr FROM v$latch_parent WHERE NAME='&&1'
new   1: SELECT addr laddr FROM v$latch_parent WHERE NAME='test excl. parent2 l0'

LADDR
----------------
0000000060009978

Statement processed.
Function returned 1
Function returned 0

--//session 2:
SYS@book> @ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6
old   1: SELECT addr laddr FROM v$latch_parent WHERE NAME='&&1'
new   1: SELECT addr laddr FROM v$latch_parent WHERE NAME='test excl. parent2 l0'

LADDR
----------------
0000000060009978

Statement processed.
Function returned 0

ORA-00600: internal error code, arguments: [510], [0x060009978], [test excl. parent2 l0], [], [], [], [], [], [], [], [], []

--//可以發現申請成功函數返回值是1.失敗是0.只所以session 2報錯主要原因是沒有申請成功,kslfre肯定報錯.

4.看看latch統計信息的情況:
SYS@book> select addr,name,level#,latch#,gets,misses,sleeps,immediate_gets,immediate_misses,waiters_woken,waits_holding_latch,spin_gets,wait_time from v$latch_parent   where lower(name) like '%'||lower('test excl. parent2 l0')||'%';
ADDR             NAME                  LEVEL#     LATCH#       GETS     MISSES     SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAITERS_WOKEN WAITS_HOLDING_LATCH  SPIN_GETS  WAIT_TIME
---------------- --------------------- ------ ---------- ---------- ---------- ---------- -------------- ---------------- ------------- ------------------- ---------- ----------
0000000060009978 test excl. parent2 l0      0          5          4          0          0              4                3             0                   0          0          0

--//重覆測試:
$ . y1.sh
20190424094217
[3]-  Done                    sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 1 2 6" > /dev/null
[1]   Done                    source peek.sh 'test excl. parent2 l0' 20 | timestamp.pl >|/tmp/peekx_${zdate}.txt
[4]-  Done                    sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6" > /dev/null
[5]+  Done                    sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 5 6 6" > /dev/null
[2]+  Done                    seq 20 | xargs -I{} echo -e 'sqlplus -s -l / as sysdba <<< @latch_free\nsleep 1' | bash >|/tmp/latch_freeo_${zdate}.txt

SYS@book> select addr,name,level#,latch#,gets,misses,sleeps,immediate_gets,immediate_misses,waiters_woken,waits_holding_latch,spin_gets,wait_time from v$latch_parent   where lower(name) like '%'||lower('test excl. parent2 l0')||'%';
ADDR             NAME                  LEVEL#     LATCH#       GETS     MISSES     SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAITERS_WOKEN WAITS_HOLDING_LATCH  SPIN_GETS  WAIT_TIME
---------------- --------------------- ------ ---------- ---------- ---------- ---------- -------------- ---------------- ------------- ------------------- ---------- ----------
0000000060009978 test excl. parent2 l0      0          5          4          0          0              6                4             0                   0          0          0

--//可以發現IMMEDIATE_GETS增加2次,IMMEDIATE_MISSES增加1次.

$ . y1.sh
20190424094448
[3]-  Done                    sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 1 1 2 6" > /dev/null
--//註意我修改為willing=1方式獲取.
[1]   Done                    source peek.sh 'test excl. parent2 l0' 20 | timestamp.pl >|/tmp/peekx_${zdate}.txt
[4]-  Done                    sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6" > /dev/null
[5]+  Done                    sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 5 6 6" > /dev/null
[2]+  Done                    seq 20 | xargs -I{} echo -e 'sqlplus -s -l / as sysdba <<< @latch_free\nsleep 1' | bash >|/tmp/latch_freeo_${zdate}.txt

SYS@book> select addr,name,level#,latch#,gets,misses,sleeps,immediate_gets,immediate_misses,waiters_woken,waits_holding_latch,spin_gets,wait_time from v$latch_parent   where lower(name) like '%'||lower('test excl. parent2 l0')||'%';
ADDR             NAME                  LEVEL#     LATCH#       GETS     MISSES     SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAITERS_WOKEN WAITS_HOLDING_LATCH  SPIN_GETS  WAIT_TIME
---------------- --------------------- ------ ---------- ---------- ---------- ---------- -------------- ---------------- ------------- ------------------- ---------- ----------
0000000060009978 test excl. parent2 l0      0          5          5          0          0              7                5             0                   0          0          0

--//可以發現gets增加1,IMMEDIATE_GETS增加1次,IMMEDIATE_MISSES增加1次.
--//我希望這個這個帖子對於理解latch的統計有所幫助.以前我對於這些統計參數的理解一片混亂.
--//大家可以適當調整sleep參數,測試看看各種情況.


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

-Advertisement-
Play Games
更多相關文章
  • GRD (global resource directory)保存著所有實例中資源的分佈情況 GCS (global cache service)具體執行cache fusion 工作的服務,對應進程LMSn GES (global enqueues service)協調實例之間的GCS完成數據傳遞 ...
  • MySQL版本 select version(); + + | version() | + + | 5.7.21-log | + + 1 row in set (0.00 sec) 非空約束為null 併在自增列屬性前 即使自增列的非空約束定義可以為 null,但實際自增列為not null cre ...
  • 1. 使用redis有哪些好處? (1) 速度快,因為數據存在記憶體中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1) (2) 支持豐富數據類型,支持string,list,set,sorted set,hash (3) 支持事務,操作都是原子性,所謂的原子性就是對數 ...
  • 概述 Memcached是一套高性能分散式記憶體對象緩存伺服器 它將所有的數據統統保存在記憶體中,在記憶體中會維護一個巨大的hash表,支持任意存儲類型的數據,很多網站通過Memcached提高網站的訪問速度,尤其是對於大型的需要頻繁訪問的網站,減少查詢效率,提高查詢速度 架構 C/S架構: 服務端:Me ...
  • 文件和文件組概念 關於文件與文件組,簡單概括如下,詳情請參考官方文檔“資料庫文件和文件組Database Files and Filegroups”或更多相關資料: 數據文件概念: 每個SQL Server資料庫至少包含兩個作系統文件:一個數據文件(data file)和一個日誌文件(log fil... ...
  • like剖析:   基於上述案例,查證度娘,關於like有如下說法:     前提,查詢欄位建立索引     欄位 like ‘%關鍵字%’ 不走索引,速度最慢     欄位 like ‘關鍵字%’ 使用欄位進行升序索引     欄位 like ‘%關鍵字’ 使用欄位進行降序... ...
  • --複製另一個資料庫中的某張表的結構及數據--select * from Test.dbo.TestTable(查詢表中所有數據) --into [表名] 插入當前資料庫新表,如果沒有該表就創建 select * into TestCopy from Test.dbo.TestTable --只複製 ...
  • -- MySQL日期時間處理函數SELECT NOW() FROM DUAL;-- 當前日期時間:2017-05-12 11:41:47-- 在MySQL里也存在和Oracle里類似的dual虛擬表:官方聲明純粹是為了滿足select ... from...這一習慣問題,mysql會忽略對該表的引用 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...