[20190419]shared latch spin count 2.txt

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

[20190419]shared latch spin count 2.txt--//上午測試shared latch XX模式的情況,鏈接:http://blog.itpub.net/267265/viewspace-2641902/--//繼續測試其它情況.--//鏈接:http://andre ...


[20190419]shared latch spin count 2.txt

--//上午測試shared latch XX模式的情況,鏈接:http://blog.itpub.net/267265/viewspace-2641902/
--//繼續測試其它情況.
--//鏈接:http://andreynikolaev.wordpress.com/2011/01/14/spin-tales-part-2-shared-latches-in-oracle-9-2-11g/

                S mode get  X mode get
Held in S mode  Compatible  2*_spin_count
Held in X mode           0  2*_spin_count
Blocking mode            0  2*_spin_count


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

SYS@book> @ hide spin_count
NAME              DESCRIPTION                        DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE
----------------- ---------------------------------- ------------- ------------- ------------
_mutex_spin_count Mutex spin count                   TRUE          255           255
_spin_count       Amount to spin waiting for a latch TRUE          2000          2000

$ cat shared_latch.txt
/* 參數如下: @ latch.txt latch_name willing why where mode sleep_num */
--//connect / as sysdba
col laddr new_value laddr
col vmode  new_value vmode
select decode(lower('&&5'),'s',8,'x',16,'8',8,'16',16) vmode from dual ;
SELECT addr laddr FROM v$latch_parent WHERE NAME='&&1';
oradebug setmypid
oradebug call kslgetsl_w 0x&laddr &&2 &&3 &&4  &vmode
host sleep &&6
oradebug call kslfre 0x&laddr
--//exit
--//註:我前幾天的測試腳本有connect / as sysdba,exit這兩行,我為了調式方便,先註解這2行,避免反覆退出進入會話.

2.測試1:
--//選擇一個shared latch測試,我選擇"test shared non-parent l0" latch測試:
SYS@book> select * from shared_latches where name='test shared non-parent l0';
VERSION    LATCH# NAME                      S
---------- ------ ------------------------- -
11.2.0.4.0      6 test shared non-parent l0 Y

2.測試一些細節不再列出,參考鏈接:http://blog.itpub.net/267265/viewspace-2641902/
--//測試XS模式的情況:
--//session 1:
SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 1 2 x 100000

--//session 2:
SYS@book> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
         1         11 31454                    DEDICATED 31455       24          5 alter system kill session '1,11' immediate;
--//記下spid=31455.
SYS@book> @shared_latch.txt "test shared non-parent l0" 1 3 4 s 1
--//註意session 申請S mode.
--//window 3:執行:

$ rlwrap gdb -p 31455 -x spin_s.gdb
Breakpoint 1 at 0x93f97a8
Breakpoint 2 at 0x93f9b74
Breakpoint 3 at 0x9808932
Breakpoint 4 at 0x9809840
Breakpoint 5 at 0x37990d6400
Breakpoint 6 at 0x93f9ddc
Breakpoint 7 at 0x93faa36
Breakpoint 8 at 0xa865ca
Breakpoint 9 at 0xa874fa
Breakpoint 10 at 0xa875be
(gdb) c
Continuing.
...
kslgetl 6010d860, 1, 2126093176, 3991
ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8
ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8
ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8
ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
ksl_get_shared_latch laddr:60009a18, willing:1, where:3, why:4, mode:8
kslgess 60009a18, 8, 0, 3
kslskgs 60009a18, 0, 1129096976, 1129097520
kslskgs 60009a18, 0, 1129096976, 1129097520
---Type <return> to continue, or q <return> to quit---
skgpwwait 1129096760, 202182304, -2044672536, 0
sskgpwwait 1129096760, 202182304, -2044672536, 0
semop 315588608, 1129096560, 1, -1
--//按ctrl+c出現如下:
kslskgs 60009a18, 0, 1129096976, 1129097520

--//可以看出X模式的情況,申請S mode,第2進程直接調用semop.根本不做spin操作.

3.測試2:
--//測試SX模式的情況:
--//session 1:
SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 1 2 s 100000
--//session 持有S mode.
 
--//session 2:
SYS@book> @shared_latch.txt "test shared non-parent l0" 1 3 4 x 1
--//註意session 申請x mode.
--//window 3:執行:
$ rlwrap gdb -p 31455 -x spin_s.gdb
..
ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:95, mode:8
ksl_get_shared_latch laddr:85f7f4c8, willing:1, where:-2043602896, why:96, mode:16
ksl_get_shared_latch laddr:60009a18, willing:1, where:3, why:4, mode:16
kslgess 60009a18, 16, 0, 3
kslskgs 60009a18, 0, 1129096976, 1129097520
 spin count loop: 2000 a875be
 spin count loop: 1999 a875be
 spin count loop: 1998 a875be
 spin count loop: 1997 a875be
 ...
 spin count loop: 3 a875be
 spin count loop: 2 a875be
 spin count loop: 1 a875be
kslskgs 60009a18, 0, 1129096976, 1129097520
 spin count loop: 1 a875be
skgpwwait 1129096760, 202182304, -2044672536, 0
sskgpwwait 1129096760, 202182304, -2044672536, 0
semop 315588608, 1129096560, 1, -1
--//按ctrl+c後.
kslskgs 60009a18, 0, 1129096976, 1129097520
 spin count loop: 2000 a875be
 
--//可以S模式的情況,申請X mode,第2進程spin_count=2000.

4.測試3:
--//Blocking mode,首先我對這個模式的理解不是非常清晰.
--//我的理解
A.當前X mode持有,不管S,X模式申請都會阻塞,再有進程申請的情況.
B.當前S mode持有,X模式申請,後續再有進程申請的情況.
--//也就是這個情況至少3個會話,我分別測試看看
--//session 1:
SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 1 2 s 100000

--//session 2:
SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 3 4 x 1

--//session 3:
--//spid=31572
SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 5 6 s 1

--//gdb監測session 3進程:
$ rlwrap gdb -p 31572 -x spin_s.gdb
...
ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:95, mode:8
ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16
ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:8
kslgess 60009a18, 8, 0, 5
kslskgs 60009a18, 0, -1923148048, -1923147504
kslskgs 60009a18, 0, -1923148048, -1923147504
skgpwwait -1923148264, 202182304, -2044655416, 0
sskgpwwait -1923148264, 202182304, -2044655416, 0
semop 315588608, -1923148464, 1, -1
kslskgs 60009a18, 0, -1923148048, -1923147504
--//申請S mode,沒有spin.

--//session 1:
SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 1 2 s 100000

--//session 2:
SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 3 4 x 1

--//session 3:
--//spid=31572
SYS@book> @ shared_latch.txt "test shared non-parent l0" 1 5 6 x 1

--//gdb監測session 3進程:
$ rlwrap gdb -p 31572 -x spin_s.gdb
...
ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16
ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:16
kslgess 60009a18, 16, 0, 5
kslskgs 60009a18, 0, -1923148048, -1923147504
 spin count loop: 2000 a875be
 spin count loop: 1999 a875be
 spin count loop: 1998 a875be
 spin count loop: 1997 a875be
 ...
 spin count loop: 1 a875be
kslskgs 60009a18, 0, -1923148048, -1923147504
 spin count loop: 1 a875be
skgpwwait -1923148264, 202182304, -2044655416, 0
sskgpwwait -1923148264, 202182304, -2044655416, 0
semop 315588608, -1923148464, 1, -1
kslskgs 60009a18, 0, -1923148048, -1923147504
 spin count loop: 2000 a875be
--//申請X mode,spin_count=2000.

--//XSS的情況:
ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16
ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:8
kslgess 60009a18, 8, 0, 5
kslskgs 60009a18, 0, -1923148048, -1923147504
kslskgs 60009a18, 0, -1923148048, -1923147504
skgpwwait -1923148264, 202182304, -2044655416, 0
sskgpwwait -1923148264, 202182304, -2044655416, 0
semop 315588608, -1923148464, 1, -1
kslskgs 60009a18, 0, -1923148048, -1923147504

--//XSX的情況:
ksl_get_shared_latch laddr:85f7fa68, willing:1, where:-2042914736, why:96, mode:16
ksl_get_shared_latch laddr:60009a18, willing:1, where:5, why:6, mode:16
kslgess 60009a18, 16, 0, 5
kslskgs 60009a18, 0, -1923148048, -1923147504
 spin count loop: 2000 a875be
 spin count loop: 1999 a875be
 spin count loop: 1998 a875be
 spin count loop: 1997 a875be
 spin count loop: 1996 a875be
 spin count loop: 1995 a875be
...
sskgpwwait -1923148264, 202182304, -2044655416, 0
semop 315588608, -1923148464, 1, -1
kslskgs 60009a18, 0, -1923148048, -1923147504
 spin count loop: 2000 a875be
--//總之:阻塞申請X mode,spin_count=2000.S mode 直接調用semop休眠.

5.總結
--//畫一個表格:
                S mode get  X mode get
Held in S mode  Compatible  _spin_count
Held in X mode           0  _spin_count
Blocking mode            0  _spin_count


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

-Advertisement-
Play Games
更多相關文章
  • 一. Percona XtraBackup 的優點。 (1)無需停止資料庫進行InnoDB熱備; (2)增量備份MySQL; (3)流壓縮傳輸到其它伺服器; (4)線上移動表; (5)能夠比較容易地創建主從同步; (6)備份MySQL時不會增大伺服器負載。 二. Percona XtraBackup ...
  • 背景 從mysql.slow_log 獲取慢查詢日誌很慢,該表是csv表,沒有索引。 想添加索引來加速訪問,而csv引擎不能添加索引(csv引擎存儲是以逗號分割的文本來存儲的),只能改存儲引擎來添加索引了 MySQL 中日誌表slow_log和general_log主要特點 日誌表只能是CSV和MY ...
  • DMLinsert關鍵字作用:往表中插入一條(多條)數據語法1:元祖值式的插入語法1: insert into tablename(column1,column2,...,columnN) values(value1,value2,...,valueN); insert into 表名 (列1 ,列 ...
  • 前言 關於索引,這是一個非常重要的知識點,同樣,在面試的時候也會被經常的問到; 本文描述了索引的結構,介紹了InnoDB的索引方案等知識點,感興趣的可以看一下; 引入 本文參考文章:MySQL的索引 回顧 在上篇文章中我們說到 InnoDB的數據頁結構 ,瞭解到了 數據頁的 7 個組成部分,知道了各 ...
  • 存儲過程的建立和調用 --1.1準備測試需要的資料庫:test,數據表:物料表,採購表if not exists (select * from master.dbo.sysdatabases where name='test')create database testgouse testgoif o ...
  • .1事務 redis中事務是一組命令的集合。 事務同命令一樣都是redis的最小執行單位,Redis保證一個事務中的命令要麼都執行,要麼都不執行。如果redisClient在發送EXEC命令前掉線,則redis會清空事務隊列,事務中的所有命令都不會執行;如果redisClient在發送EXEC命令後 ...
  • 結構化查詢語言SQL在20世紀70年代發展起來之後,很快就成為關係資料庫的標準語言。雖然理解SQL可能很複雜,但幸運的是,有許多書籍可以幫助你快速瞭解SQL。 ...
  • 1.安裝準備: Windows系統環境: 安裝:SQLiteExpert 及 官網的SQLite tool 我們要用到其中的SQLite.exe 地址:https://www.sqlite.org/download.html 2.新建資料庫 打開cmd:鍵入以下命令:D:\sqlite-tools- ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...