[20190416]exclusive latch測試腳本.txt

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

[20190416]exclusive latch測試腳本.txt--//昨天做了shared latch的測試腳本,今天完善exclusive latch測試腳本,上個星期的測試我是手工執行的.--//今天寫一個腳本驗證看看.相關鏈接:http://blog.itpub.net/267265/vi ...


[20190416]exclusive latch測試腳本.txt

--//昨天做了shared latch的測試腳本,今天完善exclusive latch測試腳本,上個星期的測試我是手工執行的.
--//今天寫一個腳本驗證看看.相關鏈接:
http://blog.itpub.net/267265/viewspace-2641414/ => [20190415]關於shared latch(共用栓鎖).txt
http://blog.itpub.net/267265/viewspace-2641497/ => [20190416]完善shared latch測試腳本2.txt

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

$ cat peek.sh
#! /bib/bash
# 參數如下:latch_name Monitoring_duration
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
/* 參數如下: @ 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 latch_free.sql
/*
     This file is part of demos for "Contemporary Latch Internals" seminar v.18.09.2010
     Andrey S. Nikolaev ([email protected])
     http://AndreyNikolaev.wordpress.com

     This query shows trees of processes currently holding and waiting for latches
     Tree output enumerates these processes and latches as following:
Process <PID1>
 <latch1 holding by PID1>
    <processes waiting for latch1>
       ...
 <latch2 holding by PID1>
    <processes waiting for latch2>
       ...
Process <PID2>
...
*/
set head off
set feedback off
set linesize 120
select sysdate from dual;
select   LPAD(' ', (LEVEL - 1) )
     ||case when latch_holding is null then 'Process '||pid
             else 'holding: '||latch_holding||'  "'||name||'" lvl='||level#||' whr='||whr||' why='||why ||', SID='||sid
       end
     || case when latch_waiting  is not  null then ', waiting for: '||latch_waiting||' whr='||whr||' why='||why
       end latchtree
 from (
/* Latch holders */
select ksuprpid pid,ksuprlat latch_holding, null latch_waiting, to_char(ksuprpid) parent_id, rawtohex(ksuprlat) id,
       ksuprsid sid,ksuprllv level#,ksuprlnm name,ksuprlmd mode_,ksulawhy why,ksulawhr whr  from x$ksuprlat
union all
/* Latch waiters */
select indx pid,null latch_holding, ksllawat latch_waiting,rawtohex(ksllawat) parent_id,to_char(indx) id,
       null,null,null,null,ksllawhy why,ksllawer whr from x$ksupr where ksllawat !='00'
union all
/*  The roots of latch trees: processes holding latch but not waiting for latch */
select pid, null, null, null, to_char(pid),null,null,null,null,null,null from (
select distinct ksuprpid pid  from x$ksuprlat
minus
select indx pid from x$ksupr where ksllawat !='00')
) latch_op
connect by prior id=parent_id
start with parent_id  is null;

2.測試:
--//上個星期測試的是'test excl. parent2 l0',繼續拿它測試.
$ cat  x1.sh
#! /bin/bash
zdate=$(date '+%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 /nolog @ exclusive_latch.txt 'test excl. parent2 l0' 1 2 3 6 > /dev/null &
sleep 2
sqlplus /nolog @ exclusive_latch.txt 'test excl. parent2 l0' 1 4 5 6 > /dev/null &
sleep 2
sqlplus /nolog @ exclusive_latch.txt 'test excl. parent2 l0' 1 6 7 6 > /dev/null &
wait

$ grep  -v '^.*: $' /tmp/peekx_111121.txt | cut -c10- | uniq -c
      1  SYSDATE             LADDR
      1  ------------------- ----------------
      1  2019-04-16 11:11:21 0000000060009978
      1  Statement processed.
      6  [060009978, 060009980) = 00000023 00000000
      6  [060009978, 060009980) = 00000024 00000000
      6  [060009978, 060009980) = 00000025 00000000
      2  [060009978, 060009980) = 00000000 00000000

--//exclusive latch 是排他的,必須等其釋放,其它進程才可以持有.
--//做一個測試,如果一個會話長時間持有已經死掉的情況下,oracle如何處理.

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

--//執行x2.sh
$ . x2.sh
112841
..

$ pstree -ap
...
  |   |   |-sqlplus,5545 \040\040\040\040\040\040 @ exclusive_latch.txt test\040excl.\040parent2\040l0 1 2 3 300
  |   |   |   |-oracle,5595 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
  |   |   |   `-sleep,5726 300

$ kill -9 5595 5545

$ grep  -v '^.*: $' /tmp/peekx_112841.txt | cut -c10- | uniq -c
      1  SYSDATE             LADDR
      1  ------------------- ----------------
      1  2019-04-16 11:28:42 0000000060009978
      1  Statement processed.
    107  [060009978, 060009980) = 0000001B 00000000
      6  [060009978, 060009980) = 0000001C 00000000
      6  [060009978, 060009980) = 0000001E 00000000
    201  [060009978, 060009980) = 00000000 00000000

--//kill後後續的會話持有沒有問題.估計pmon之類的進程會做清理工作.


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

-Advertisement-
Play Games
更多相關文章
  • 一、PreparedStatement 介面的使用 首先占位符我們可以使用 Statement 介面來操作數據, 但是這個介面存在兩個問題: 1、使用 Statement 介面對象發送的 sql 語句需要在資料庫中進行一次編譯之後成為指令才能執行,並且每條 sql 語句都需要編譯一次, 這樣效率是很 ...
  • 1.查看資料庫的基本語句:show databases; 2.選擇相應的資料庫進入語法:use 資料庫名; 3.查看資料庫中的表語法:show tables; 4.查看表的基本結構語句:desc 表名; 5.修改表名:alter table 舊表名 rename to 新表名; 6.修改欄位的數據類 ...
  • sqlplus /nolog 回車 conn / as sysdba 回車 startup 回車(如果被告知已啟動,應先執行 shutdown immediate 回車) ...
  • 一、事務概念 事務就是一個程式執行單元,裡面的操作要麼都做,要麼都不做。 二、事務特性 事務有四個非常重要的特性(ACID): 原子性(Atomicity):事務是不可分割的整體,所有操作要麼全做,要麼全不做;只要事務中有一個操作出錯,回滾到事務開始前狀態,即之前已執行的操作無效。 一致性(Cons ...
  • IDEA 安裝配置可視化 MongDB 插件 1、安裝MongoDB插件 打開 IDEA ,file --> settings --> plugins,在右邊搜索欄中輸入Mongo,點擊 Mongo Plugin 下的 Install ,安裝完後點擊重啟。 2、添加連接 第一步安裝好後,在idea右 ...
  • [TOC] 一、安裝單實例 1、升級openssl "openssl升級" 2、替換軟體源 3、root 用戶ssh遠程登錄 4、mysql需要安裝的包 5、navicate 連接虛擬機mysql 6、安裝mysql utilities ==最好源碼安裝== 二、安裝多實例 1、目錄結構 2、腳本語 ...
  • 使用分組、聚合和映射-歸併 MongoDB的強大功能之一,是直接在伺服器對文檔的值進行複雜的操作,而不用先發文檔發送到客戶端在進行處理。 結果分組 對大型數據集進行查詢操作時,通常會根據文檔的欄位值對其進行分組。這可以在取迴文檔後通過代碼來完成,但在伺服器端查找的同時進行分組效率跟高。 要將查詢結果 ...
  • bsondump命令是將BSON格式的文件轉換為可讀性更強的文件格式,例如轉為為JSON 格式的文檔,bsondump預設轉換為json格式的文檔。 當通過mongodump命令進行備份時,如果有參數 --oplog,會在備份路徑下產生一個oplog.bson文件。 這個文件是bson格式,沒有辦法 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...