【Oracle篇】Windows平臺單進程多線程架構設計與實現(比對Linux多進程架構)

💫《博主主頁》:

? ? ? ? ? ?🔎?CSDN主頁__奈斯DB

? ? ? ? ? ?🔎?IF Club社區主頁__奈斯、

🔥《擅長領域》:擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控;并對SQLserver、NoSQL(MongoDB)有了解

💖如果覺得文章對你有所幫助,歡迎點贊收藏加關注💖

📢 先給各位來個靈魂拷問💡:當Oracle在Linux上跑著十幾個進程(PMON、SMON、DBWn...)時,它在Windows上會跑幾個進程?

A. 10個+(Linux直呼內行)
B. 1個(Windows表示要精簡)
C. 看心情(DBA的血壓也跟著看心情)

...正確答案是B,但故事遠比你想象的精彩!


? ? 作為一個和Oracle打交道的老司機,第一次在Windows上看到這個現象時,差點以為數據庫沒啟動成功😂 —— Windows“任務管理器”里孤零零的一個oracle.exe,說好的多進程架構呢?那么今天這邊文章給大家介紹一下windows上進程架構的變化,眾所周知在Linux上Oracle是多進程架構,但這一架構在windows上發生了變化,變成了單進程多線程架構。

? ? 博主之前系統學習過Oracle的進程結構,所以自然而然的就以為windows上也是多進程架構(我相信大部分人應該也都這樣認為),這一觀點在Linux/Unix環境下完全正確?,但在Windows平臺卻存在根本性差異?。

? ? 了解到windows單進程多線程這個知識點還是挺湊巧的,當時公司有Oracle在Windows系統上部署,需要我協助處理一個死鎖問題,Linux系統上通常會通過 ps -ef | grep ora_命令 查看后臺相關死鎖進程📊,所以按照之前的Linux架構理解,就直接右鍵打開了“任務管理器”結果發現并沒有相關的進程在后面(PS:“任務管理器”是查看windows上運行的進程、用戶、服務等的,和Linux上通過 ps -ef | grep ora_命令查看后臺進程是一個道理),然而“任務管理器”中只顯示了一個oracle.exe進程和Oracle相關🖥?,自己也就蒙了,為啥沒有其他Oracle相關的進程號,查閱官方文檔才知道,Oracle在windows變成了單進程多線程架構,Oracle在Windows平臺采用了完全不同的線程架構實現,所有用戶進程、服務器進程、后臺進程(如PMON、SMON、DBWn等)均以線程形式運行在同一個oracle.exe進程地址空間中 🧵,所以并不能通過“任務管理器”查看,需要通過“Administration Assistant for Windows”管理工具來查看Oracle實例進程下的所有線程,那么帶著這個問題給大家分享一下Windows平臺單進程多線程架構設計與實現,并比對Linux多進程架構。

? ? ? ? ? ? ? ? ? ?

特別說明💥:本篇文章部分理論性知識點均來源于版權歸 Oracle 所有的官方公開文檔手冊,并結合了我個人的理解和案例演示。如有問題,請聯系,會盡快處理。轉載請標明出處😄

? ? ? ? ? ? ? ? ? ??

官方文檔對于Oracle在Windows平臺上單進程多線程架構的介紹(Oracle 12c):

Overview of Oracle Database on Windows Architecture

?? ? ? ? ? ? ? ??

官方文檔對于Oracle在Linux平臺上多進程架構的介紹(Oracle 12c):

Introduction to Oracle Database


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

目錄

Oracle在Windows平臺上單進程多線程架構:

Oracle在Linux平臺上多進程架構:

單進程多線程 VS 多進程:

windows上查看Oracle后臺線程:


? ? ? ? ? ? ? ? ? ? ? ? ? ?

Oracle在Windows平臺上單進程多線程架構:

?? ? 如下圖是Windows上的Oracle數據庫體系結構,這里博主就直接上官方文檔上的截圖了,反而比博主直接手繪更直觀。

? ? Oracle實例在Windows服務上運行(這是一個注冊到操作系統的后臺進程),該服務由Windows啟動,無需用戶交互即可啟動。它包含訪問數據庫所需的內存結構和線程。

? ? 客戶端通過一個線程連接到Oracle實例,線程直接與進程監控器連接。內存結構包括共享池、庫緩存、數據字典緩存、數據庫緩沖緩存和重做日志緩沖區。

? ? 圖中可以看到線程包括數據庫寫入線程、日志寫入線程、內存管理線程、進程監控線程、進程派生線程、系統監控線程、檢查點處理線程(Windows平臺默認運行)、分布式恢復后臺線程,以及歸檔處理線程(在數據庫可用時是可選的)。

? ? 并且該Oracle實例包含數據文件、控制文件和重做日志文件。與數據庫相關的還有參數文件、密碼文件和歸檔日志文件。


? ? 在Windows上運行的Oracle數據庫的內部進程架構采用基于線程的設計,線程是進程內運行程序指令的對象。線程允許在單個進程內實現并發操作,使進程能夠在不同處理器上同時運行程序的不同部分。基于線程的架構具有以下優勢:

  • 更快的上下文切換

  • 更簡單的系統全局區分配機制,因為不需要使用共享內存

  • 更快地創建新連接,因為線程比進程創建速度更快

  • 減少內存使用,因為線程比進程共享更多數據結構

? ? 在內部實現上,線程模型的代碼結構緊湊,與Oracle數據庫主體代碼分離。異常處理程序和例程會跟蹤并釋放資源,從而增強健壯性,避免因資源泄漏或程序異常導致的停機。

? ? 在Windows上,Oracle數據庫或Oracle自動存儲管理實例(包含線程和內存結構)是一個Windows服務:即向操作系統注冊的后臺進程。該服務由Windows啟動,無需用戶交互即可運行,使得數據庫能夠在計算機啟動時自動打開。

? ? 當在Windows上運行多個Oracle數據庫或Oracle自動存儲管理實例時,每個實例都運行自己的Windows服務,并包含多個組件線程。每個線程對于數據庫可用性都是必需的,或者是特定平臺的可選線程。根據配置不同,后臺進程會讀寫各種數據文件。

? ? ? ? ? ? ? ? ?

Oracle在Windows平臺上所需的部分重要線程舉例:

線程

描述

必選/可選

DBWO

數據庫寫入線程

所需

LGWR

日志寫入線程

所需

MMAN

內存管理線程

所需

PMON

進程監控線程

所需

PSPO

進程派生線程

所需

SMON

系統監控線程

所需

CKPT

檢查點處理線程(Windows平臺默認運行)

所需

ARCO

歸檔處理線程(Windows平臺)

所需

RECO

分布式恢復后臺線程

所需

PS小提示:通過如下SQL查看正在運行的線程。

SQL> select * from v$bgprocess where paddr <> '00'; 

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


? ? 關于Oracle在Windows平臺上單進程多線程架構就介紹到這里,一個oracle.exe進程扛下所有🏃?♂?。下面也簡單介紹一下Linux多進程架構并對比一下它們之間的區別🤷?♂?。


? ? ? ? ? ? ? ? ??

Oracle在Linux平臺上多進程架構:

? ? 如下圖是Linux上的Oracle數據庫體系結構,這里博主就直接上官方文檔上的截圖了,反而比博主直接手繪更直觀。

? ? Oracle數據庫在Linux平臺上采用經典的多進程架構設計,這種架構通過功能劃分實現了高效的資源管理和系統穩定性。如圖所示,整個體系由多個協同工作的進程組成,每個進程承擔特定的職責。

? ? ? ? ? ? ? ? ? ? ? ? ?

核心架構組件

1. 系統全局區(SGA):SGA是Oracle實例的核心內存結構,包含多個關鍵子區域:

  • 共享池(Shared Pool):存儲SQL解析樹和執行計劃

  • 數據庫緩沖區(Database Buffer Cache):緩存數據塊

  • 重做日志緩沖區(Redo Log Buffer):臨時存儲重做記錄

  • 大型池(Large Pool):為特定操作提供內存分配

  • .............

2. 后臺進程:Oracle的主要后臺進程包括:

  • DBWn (Database Writer):負責將修改后的數據塊寫入數據文件

  • LGWR (Log Writer):將重做日志緩沖區內容寫入在線重做日志文件

  • CKPT (Checkpoint):觸發檢查點,同步數據文件

  • SMON (System Monitor):執行系統級清理和恢復

  • PMON (Process Monitor):監控用戶進程狀態并處理異常終止

  • .............

3. 程序全局區(PGA):每個服務器進程擁有獨立的PGA,包含:

  • 私有SQL區域

  • 會話內存

  • SQL工作區

? ? ? ? ? ? ??

進程間協作機制

? ? 各進程通過共享內存(SGA)和信號量進行通信,確保數據一致性和系統協調運行。這種設計既保證了各進程的獨立性,又實現了高效的數據共享。

? ? ? ? ? ? ? ? ? ? ??

單進程多線程 VS 多進程:

一、架構對比

特性Windows單進程多線程架構Linux多進程架構
執行單元單進程(ORACLE.EXE)內多線程多個獨立進程(PMON/SMON/DBWn等)
內存管理共享同一進程地址空間各進程有獨立地址空間
上下文切換線程切換(約1-2微秒)進程切換(約5-10微秒)
故障隔離線程崩潰可能影響整個實例進程崩潰通常不會波及其他組件
監控方式需專用工具查看線程(v$bgprocess視圖)直接通過ps -ef命令查看
典型部署注冊為Windows服務以守護進程(daemon)形式運行

二、Windows采用單進程多線程的深層原因

1. 操作系統內核設計差異

  • Windows線程模型優勢

    • 原生線程調度器更高效(基于NT內核的線程優先級機制)

    • 進程創建開銷大(約100ms/進程 vs 線程創建約10ms)

  • Linux特性

    • fork()系統調用優化(寫時復制技術)

    • 進程間通信(IPC)效率高(共享內存/信號量成熟)

2. 性能優化考量

  • 連接創建速度

    • Windows線程創建比進程快5-10倍

    • 對于OLTP高頻短連接場景優勢明顯

  • 內存占用

    • Windows線程:共享SGA/PGA,節省30%+內存

    • Linux進程:每個連接需獨立PGA分配

3. 平臺兼容性需求

  • Windows早期版本(如NT 4.0)對POSIX進程支持有限

  • 服務化集成要求(必須符合Windows Service Control Manager規范)

4. 開發維護成本

  • 統一代碼庫:通過#ifdef _WIN32條件編譯實現跨平臺

  • 避免為Windows重寫全套IPC機制(直接使用線程同步原語)


三、關鍵差異可視化:

  • 內存共享方式

    • Windows:自動共享(進程內)

    • Linux:需顯式配置IPC

  • 故障影響范圍

    • Windows:線程崩潰影響整個方框

    • Linux:單個進程崩潰不影響其他組件


四、Oracle數據庫在Windows與UNIX平臺的差異(官方文檔):

? ? 以下是整理成表格形式的Oracle數據庫在Windows和UNIX平臺的主要差異,完整說明請參考官方文檔:Oracle Database Differences on Windows and UNIX

功能類別UNIX/Linux平臺特性Windows平臺特性
進程架構多進程/線程混合模式(12.2+)單進程多線程
自動啟停需要配置多個目錄下的初始化腳本作為Windows服務自動管理
后臺作業完善的批處理控制機制通過任務計劃程序實現
診斷工具使用sar、vmstat等專用工具使用性能監視器和WMI
磁盤寫入支持繞過文件系統緩存直寫同樣支持繞過文件系統緩存直寫
動態庫使用.so共享庫使用DLL動態鏈接庫
安裝賬戶需要創建oracle用戶和DBA組,禁止使用root賬戶使用Windows賬戶體系
DB_WRITERS通過參數配置多個寫入進程自動線程化管理
內存管理默認內核配置通常需要手動優化自動適配系統資源
分布式事務無原生對應組件通過MS DTC實現
多Oracle Home嚴格遵循OFA規范簡化安裝路徑管理
存儲選項支持文件系統和原始分區主要使用文件系統
服務管理使用守護進程(daemon)作為Windows服務運行

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

windows上查看Oracle后臺線程:

? ? 了解了上面的內容,大家都知道了Oracle在Wndows上采用的是單進程多線程架構,因此,0race一旦啟動,在任務管理器里只能看到一個oracle.exe的進程。如果想要查看Oracle的各個后臺進程(Linux系統下的稱謂),例如PMON、SMON、DBWn、LGWR、CKPT等,或者需要看哪些用戶進程、服務器進程,可以通過如下幾個步驟實現:

? ? ??

1)先查看Windows上運行了那些Oracle后臺服務:服務器管理器——工具——服務

  • Oracle ORCL VSS Writer Service:Oracle卷映射拷貝寫入服務,VSS(Volume Shadow Copy Service)能夠讓存儲基礎設備(比如磁盤,陣列等)創建高保真的時間點映像,即映射拷貝(shadow copy)。它可以在多卷或者單個卷上創建映射拷貝,同時不會影響到系統的系統能。(非必須啟動)
  • OracleDBConsoleorcl:Oracle數據庫控制臺服務,orcl是Oracle的實例標識,默認的實例為orcl。oracle健康檢查專家塞姆說,在運行Enterprise Manager(企業管理器OEM)的時候,需要啟動這個服務(屬于網頁連接數據庫時必要開啟的)。(非必須啟動)
  • OracleJobSchedulerORCL:Oracle作業調度(定時器)服務,ORCL是Oracle實例標識。(非必須啟動)
  • OracleMTSRecoveryService:服務端控制。oracle健康檢查專家塞姆說,該服務允許數據庫充當一個微軟事務服務器MTS、COM/COM+對象和分布式環境下的事務的資源管理器。(非必須啟動)
  • OracleOraDb11g_home1ClrAgent:Oracle數據庫.NET擴展服務的一部分。 (非必須啟動)
  • OracleOraDb11g_home1TNSListener:監聽器服務,服務只有在數據庫需要遠程訪問的時候才需要。(非必須啟動)。
  • OracleServiceORCL:數據庫服務(數據庫實例),是Oracle核心服務該服務,是數據庫啟動的基礎, 只有該服務啟動,Oracle數據庫才能正常啟動。(必須啟動)

?? ? ? ?

2)首先打開“任務管理器”,可以看到oracle的主進程oracle.exe。注意:在任務管理器運行的進程其實就是Windows服務,那個服務打開了在任務管理器就可以看到

? ? ? ? ? ? ? ? ??

3)在Windows上查看主進程oracle.exe的各個線程,在所有程序中找到“Administration Assistant for Windows”工具

?? ? ? ? ? ? ? ??

4)找到數據庫(實例),右鍵對應的實例,選擇“進程信息”,就可以看到后臺線程,當然也看到看到所有的用戶、服務器線程

? ??可以看到當前orcl實例下的所有用戶進程、服務器進程、后臺進程(如PMON、SMON、DBWn等),這樣就可以按照SQL查出的線程ID對對應的線程在系統層面進行終止操作啦!


? ? Oracle數據庫在Windows和Linux平臺展現了截然不同的架構設計:Windows采用單進程多線程模型🧵,像一個全能選手包攬所有工作;Linux則采用多進程架構👥,如同專業團隊分工協作。這種差異不僅體現了Oracle對不同操作系統的深度適配,更揭示了企業級軟件的架構智慧?。當然這種差異僅僅是Oracle跨平臺適配的冰山一角,因此我們還是需要不斷的學習才能更好的跟上技術潮流💫

? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86039.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在微服務中使用 Sentinel

在微服務中集成 Sentinel 1. 添加依賴 對于 Spring Cloud 項目&#xff0c;首先需要添加 Sentinel 的依賴&#xff1a; <!-- Spring Cloud Alibaba Sentinel --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-…

中斷控制與實現

一、中斷基本概念 1、中斷 中斷是一種異步事件&#xff0c;用于通知處理器某個事件已經發生&#xff0c;需要處理器立即處理。由于I/O操作的不確定因素以及處理器和I/O設備之間的速度不匹配&#xff0c;I/O設備可以通過某種硬件信號異步喚醒對應的處理器的響應&#xff0c;這些…

前端跨域解決方案(7):Node中間件

1 Node 中間件核心 1.1 為什么開發環境需要 Node 代理&#xff1f; 在前端開發中&#xff0c;我們常遇到&#xff1a;前端運行在localhost:3000&#xff0c;后端 API 在localhost:4000&#xff0c;跨域導致請求失敗。而傳統解決方案有以下局限性&#xff1a; 修改后端 CORS 配…

iwebsec靶場-文件上傳漏洞

01-前端JS過濾繞過 1&#xff0c;查看前端代碼對文件上傳的限制策略 function checkFile() { var file document.getElementsByName(upfile)[0].value; if (file null || file "") { alert("你還沒有選擇任何文件&a…

GitHub 趨勢日報 (2025年06月23日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖 390 suna 387 system-prompts-and-models-of-ai-tools 383 Web-Dev-For-Beginners…

告別水印煩惱,一鍵解鎖高清無痕圖片與視頻!

在這個數字化飛速發展的時代&#xff0c;無論是設計小白還是創意達人&#xff0c;都可能遇到這樣的困擾&#xff1a;心儀的圖片或視頻因水印而大打折扣&#xff0c;創意靈感因水印而受限。別急&#xff0c;今天就為大家帶來幾款神器&#xff0c;讓你輕松告別水印煩惱&#xff0…

LangChain4j在Java企業應用中的實戰指南:構建RAG系統與智能應用-2

LangChain4j在Java企業應用中的實戰指南&#xff1a;構建RAG系統與智能應用-2 開篇&#xff1a;LangChain4j框架及其在Java生態中的定位 隨著人工智能技術的快速發展&#xff0c;尤其是大語言模型&#xff08;Large Language Models, LLMs&#xff09;的廣泛應用&#xff0c;…

Cola StateMachine 的無狀態(Stateless)特性詳解

Cola StateMachine 的無狀態&#xff08;Stateless&#xff09;特性詳解 在現代分布式系統中&#xff0c;無狀態設計是構建高可用、可擴展服務的關鍵原則之一。Cola StateMachine 作為一款輕量級的狀態機框架&#xff0c;通過其獨特的設計理念實現了良好的無狀態特性。本文將深…

使用事件通知來處理頁面回退時傳遞參數和賦值問題

背景。uniapp開發微信小程序。在當前頁面需要選擇條件&#xff0c;如選擇城市。會打開新的頁面。此時選擇之后需要關閉頁面回到當初的頁面。但問題出現了。onLoad等事件是不會加載的。相關鏈接。uniapp頁面通訊說明使用事件通知來處理頁面回退時傳遞參數和賦值問題 頁面之間的…

騰訊云COS“私有桶”下,App如何安全獲得音頻調用流程

流程圖 #mermaid-svg-Phy4VCltBRZ90UH8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-icon{fill:#552222;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-text{fill:#552222;stroke:#552222;}#me…

基于深度學習的側信道分析(DLSCA)Python實現(帶測試)

一、DLSCA原理介紹 基于深度學習的側信道分析(DLSCA)是一種結合深度神經網絡與側信道分析技術的密碼分析方法。該方法利用深度學習模型從能量消耗、電磁輻射等側信道信息中提取與密鑰相關的特征模式。相比傳統分析方法&#xff0c;DLSCA能夠自動學習復雜的特征關系&#xff0c…

云原生 CAD 讓制造業設計協同更便捷

隨著互聯網、云計算技術的突飛猛進&#xff0c;CAD向著網絡化、協同化的方向快速發展&#xff0c;云CAD軟件逐漸映入人們的眼簾。云原生CAD不僅打破了傳統CAD軟件對硬件配置的依賴&#xff0c;更以數據驅動的協同創新模式&#xff0c;重塑了制造業的產品研發流程與組織協作形態…

Docker容器核心操作指南:`docker run`參數深度解析

技術聚焦 作為容器化技術的起點&#xff0c;docker run命令承擔著90%的容器創建工作。其關鍵參數-d&#xff08;后臺模式&#xff09;與-it&#xff08;交互模式&#xff09;的合理運用&#xff0c;直接影響容器行為模式與運維效率。本文將深度拆解兩大模式的應用場景與…

基于單片機的語音控制設計(論文)

摘要 自然語音作為人機交互在目前得以廣泛的應用以及極大的發展前景。該設計介紹了基于非指定人語音芯片LD3320的語音控制器結構及其實現語音控制的方法。該語音控制器利用STM32F103C8T6單片機作為主要控制器&#xff0c;控制芯片對輸入的進行語音識別并處理&#xff0c;根據語…

【論文閱讀 | CVPRW 2023 |CSSA :基于通道切換和空間注意力的多模態目標檢測】

論文閱讀 | CVPRW 2023 |CSSA &#xff1a;基于通道切換和空間注意力的多模態目標檢測 1.摘要&&引言2.方法2.1 框架概述2.2 通道切換通道注意力2.3 空間注意力 3. 實驗3.1 實驗設置3.1.1 數據集3.1.2 實現細節3.1.3 評估指標 3.2 對比研究3.2.1 定量結果3.2.2 定性結果…

《前端資源守衛者:SRI安全防護全解析》

SRI&#xff08;子資源完整性&#xff09;作為守護前端安全的隱形盾牌&#xff0c;以精妙的技術設計構建起資源驗證防線。深入理解其工作邏輯與配置方法&#xff0c;是每位前端開發者筑牢應用安全的必修課。 SRI的核心價值&#xff0c;在于為外部資源打造獨一無二的“數字身份…

項目需求評審報告參考模板

該文檔是需求評審報告模板 內容涵蓋評審基礎信息,如項目名稱、評審時間、地點、級別、方式等;包含評審簽到表,記錄角色、部門、職務、姓名等信息;還有評審工作量統計相關內容;以及評審問題跟蹤表,記錄問題描述、狀態、解決人及時限等,還附有填表說明,對評審適用范圍、工…

從依賴進口到自主創新:AI 電子設計系統如何重塑 EDA 全流程

EDA全稱是Electronic Design Automation&#xff0c;即電子設計自動化&#xff0c;是利用計算機軟件完成電路設計、仿真、驗證等流程的設計工具&#xff0c;貫穿于芯片和板級電路設計、制造、測試等環節&#xff0c;是不可或缺的基礎設計工具。 EDA與電子材料、裝備是電子信…

前端工程化之微前端

微前端 微前端基本知識主要的微前端框架iframe優點&#xff1a;缺點&#xff1a; single-spa示例主應用spa-root-config.jsmicrofrontend-layout.htmlindex.ejs 子應用spa-react-app2.jsroot.component.js 修改路由spa-demo/microfrontend-layout.htmlspa-demo/react-app1/webp…

MemcacheRedis--緩存服務器理論

Memcached/redis是高性能的分布式內存緩存服務器,通過緩存數據庫查詢結果&#xff0c;減少數據庫訪問次數&#xff0c;以提高動態Web等應用的速度、 提高可擴展性。 緩存服務器作用: 加快訪問速度 ,緩解數據庫壓力 1. memcached&#xff08;單節點在用&#xff09; 1.1 特點 1…