[20190401]跟蹤dbms_lock.sleep調用.txt

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

[20190401]跟蹤dbms_lock.sleep調用.txt--//自己在semtimedop函數調用理解錯誤,加深理解,跟蹤dbms_lock.sleep調用的情況.1.環境:SCOTT@book> @ ver1PORT_STRING VERSION BANNER x86_64/Linux ...


[20190401]跟蹤dbms_lock.sleep調用.txt

--//自己在semtimedop函數調用理解錯誤,加深理解,跟蹤dbms_lock.sleep調用的情況.

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

grant EXECUTE ON  dbms_lock to scott;

SCOTT@book> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
        51          7 60257                    DEDICATED 60258       27        123 alter system kill session '51,7' immediate;

 $ strace -fTr -e semtimedop -p 60258
Process 60258 attached - interrupt to quit

--//僅僅跟蹤semtimedop.

2.測試:
SCOTT@book> exec dbms_lock.sleep(5.3)
PL/SQL procedure successfully completed.

$ strace -fTr -e semtimedop -p 60258
Process 60258 attached - interrupt to quit
     0.000000 semtimedop(309821440, 0x7fffe52f9ac0, 1, {5, 300000000}) = -1 EAGAIN (Resource temporarily unavailable) <5.300886>
--//可以發現實際上執行dbms_lock.sleep(5.3),調用函數是semtimedop,睡眠5.3秒.

SCOTT@book> exec dbms_lock.sleep(10.3)
PL/SQL procedure successfully completed.

$ strace -fTr -e semtimedop -p 60258
..
    65.217301 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) <3.000460>
     3.000610 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) <3.000960>
     3.001073 semtimedop(309821440, 0x7fffe52f9ac0, 1, {4, 300000000}) = -1 EAGAIN (Resource temporarily unavailable) <4.300934>

--//你可以基本看出執行dbms_lock.sleep大致演算法,oracle許多東西都與3秒有關.
--//分成多個3秒,開始調用semtimedop 3秒,剩下部分小於2*3秒時,調用剩餘的部分.

--//再次測試,在執行的過程中打開新終端視窗,執行kill -1 60258.
SCOTT@book> exec dbms_lock.sleep(10.3)
--//中間執行:
$ kill -1 60258

PL/SQL procedure successfully completed.

--//註:kill -1 並不會殺死進程,僅僅掛起.可以通過kill -l瞭解一些細節.
 $ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

$ strace -fTr -e semtimedop -p 60258
..
   154.662451 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) <3.000463>
     3.000651 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EINTR (Interrupted system call) <1.573761>
     1.573876 --- SIGHUP (Hangup) @ 0 (0) ---
     0.000203 semtimedop(309821440, 0x7fffe52f9ac0, 1, {5, 730000000}) = -1 EAGAIN (Resource temporarily unavailable) <5.730875>
--//在第2個3秒中發出了中斷,僅僅執行1.57秒.最後1次調用執行 4.3+1.43 = 5.73秒.

--//再次測試,中間按ctrl+c看看:
SCOTT@book> exec dbms_lock.sleep(10.3)
BEGIN dbms_lock.sleep(10.3); END;

*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
ORA-06512: at "SYS.DBMS_LOCK", line 205
ORA-06512: at line 1

$ strace -fTr -e semtimedop -p 60258
..
    14.543729 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EINTR (Interrupted system call) <2.880053>
     2.880177 --- SIGURG (Urgent I/O condition) @ 0 (0) ---
--//中斷不再繼續執行.

--//再次測試,中間執行kill -19 60258, 19表示SIGSTOP,暫停執行.
$ strace -fTr -e semtimedop -p 60258
..

   172.564623 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EINTR (Interrupted system call) <2.343982>
     2.344113 --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
     0.000071 --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
     0.000326 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) <3.000768>
     3.000904 semtimedop(309821440, 0x7fffe52f9ac0, 1, {4, 960000000}) = -1 EAGAIN (Resource temporarily unavailable) <4.960862>

--//可以發現僅僅暫停第1個3秒的執行.總的sleep時間是不變的.
--//2.343982+3.000768+4.960862 = 10.305612
--//後續的sql語句並不影響執行.

--//做這些測試僅僅是加強理解..^_^.

--//順便說一下linux sleep調用的是nanosleep.
$ strace sleep 10.3
...
brk(0x1d63000)                          = 0x1d63000
nanosleep({10, 300000001}, NULL)        = 0
close(1)                                = 0
exit_group(0)                           = ?


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

-Advertisement-
Play Games
更多相關文章
  • 題:只看ett.txt文件(100行)內第20行到第30行的內容 ...
  • 本文快捷鍵基於SecureCRT和Xshell客戶端軟體進行說明。 最常用的快捷鍵: tab # 命令或路徑補全鍵,查找信息時,雙擊此鍵位,可羅列出需要補全的信息。 快速移動游標: Ctrl + a # 回到命令行首位 Ctrl + e # 回到命令行末尾 Ctrl + f # 以字元為單位,向右移 ...
  • 刪除遠程分支命令: git push origin :<遠程分支名稱> git push origin --delete <遠程分支名稱> 刪除本地分支: git branch -d <本地分支名稱> 查看所有分支: git branch -a 有時候你會發現:git已經刪除了遠程分支,本地仍然能看 ...
  • 一、配置jdk 更新系統 apt get update 添加ppa add apt repository ppa:webupd8team/java 開始安裝 apt get install oracle java8 installer 二、jdk環境配置 編輯profile文件: 添加如下配置: 讓 ...
  • Cent OS系統下修改hostname的4種常見方式, 哪些方式是暫時有效, 哪些是永久有效呢? 如何配置DNS功能變數名稱映射呢? 在這篇文章中記錄下我的實踐. ...
  • 1、yum -y install vsftpd 安裝vsftpd 2、配置vsftpd的配置文件(/etc/vsftpd/vsftpd.conf)主要修改以下配置內容 3、創建一個ftp本地賬戶 useradd ftpuser -s /sbin/nologin 添加賬戶 passwd ftpuser ...
  • Windows上搭建遠程訪問服務 轉自:https://blog.51cto.com/13871378/2153308?source=dra 概述:允許客戶機通過撥號連接或虛擬專用網連接到公司區域網,訪問區域網實驗目的:用×××創建遠程訪問步驟:搭建路由遠程訪問服務,在server2016上操作1. ...
  • Linux服務 openssh [toc] 1. 使用 SSH 訪問遠程命令行 1.1 OpenSSH 簡介 OpenSSH這一術語指系統中使用的Secure Shell軟體的軟體實施。用於在遠程系統上安全運行shell。如果您在可提供ssh服務的遠程Linux系統中擁有用戶帳戶,則ssh是通常用來 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...