Oracle服務器是一種對象關系數據庫管理系統,它為信息管理提供開放、綜合、集成的方法。
Oracle服務器中有多種進進程、內存結構和文件;
Oracle服務器由一個Oracle實例和一個Oracle數據庫組成。
Oracle服務器:Oracle實例+Oracle數據庫
Oracle實例:后台進程+內存結構
(必須啟動實例才能訪問數據庫中的數據,每次啟動實例,都會分配系統全局去SGA並啟動Oracle后台進程)
SGA是用於村粗數據庫信息的內存區,該信息為數據庫進程所共享。
后台進程代表調用進程執行功能。它們把為每個用戶運行的多個oracle程序所處理的功能統一起來。
后台進程執行i/o並監控其他oracle進程以增加並行性,從而使性能和可靠性更加優越。
Oracle數據塊:物理結構+邏輯結構
Oracle存儲結構:物理結構+邏輯結構
物理結構:
主要文件
數據文件
重做日志文件
控制文件
其他文件
參數文件
歸檔日志文件
邏輯結構:
表空間
數據塊
區
段
O racle 內存結構
系統全局區SGA(Oracle實例啟動時分配系統全局區)
程序全局區PGA(服務器進程啟動時分配程序全局區)
用戶全局區UGA(用戶全局區為用戶進程存儲回話狀態)
Oracle 數據庫的組成
- 實例 instance
– 內存
• sga,pga,streams pool....
– 進程
• Oracle 后台進程(為oracle實例服務,PMON、SMON等)
• 服務器端進程
• 客戶端進程
- 數據庫 database
– 文件
• 控制文件,重做日志文件,數據文件
- 其它組成部分
– 參數文件,密碼文件(放置sys用戶的口令),Archived歸檔日志(redo文件的備份)
- 數據庫 database
數據庫是一個靜態的,被動的文件.
- 實例=內存區+后台進程
- 實例的內存區:SGA+PGA,內存是一塊區域.
- 后台進程:使用/操作實例的內存區.
SGA(系統全局區system global area)
1、Database Buffer Cache(數據緩沖區)
2、Shared pool
3、Redo log buffer(重做日志區)
SGA 區里發生了什么?
PGA PGA自己的內存區:
PGA 里發生了什么?
– 私有SQL區包含了: 1、綁定變量值的信息. 2、運行時期內存結構信息等數據。 -每一個運行SQL語句的會話都有一個塊私有SQL區。 -所有提交了相同SQL語句的用戶都有各自的私有SQL區,並且他們共享一個共享SQL區。因此,一個共享SQL區可能和多個私有共享區相關聯。
– 一個Oracle預編譯程序或OCI程序的應用開發人員能夠很明確的打開一個游標,或者控制一塊特定的私有SQL區,將他們作為程序運行的命名資源。
基於排序的操作(ORDER BY、GROUP BY、ROLLUP、窗口函數); – Hash Join – Bitmap merge – Bitmap create
PGA是所有會話的總和 |
后台進程
SQL> desc v$bgprocess; SQL> select count(*) from v$bgprocess; SQL> select name from v$bgprocess; 后台進程是一段代碼,完成一些固定的功能. 后台進程定義:為了最大的性能和容納更多的用戶,oracle使用額外的進程被叫做后台進程處理。
一、后台進程主要包括:
DBWn(Database Writer Process)
在什么觸發DBWR進程的條件: 1.當臟緩沖區的數量超過了所設定的限額。 2.當所設定的時間間隔到了。 3.當有進程需要數據庫高速緩沖區卻找不到空閑的緩沖區時。當server process在buffer cache中無法找到可用的buffer時,調用該進程,保證用戶進程始終可以在buffer cache中找到空閑的位置; 4.當校驗點發生時。 接收到CKPT(檢查點,checkpoint)進程的指令后,調用該進程,將數據寫入到磁盤中。 5.當某個表被刪除或被截斷時。 6.當某個表空間被設置為只讀狀態時。 7.當使用類似於alter tablespace users begin backup的命令對某個表空間進行聯機備份時。 8.當某個臨時表空間被設置為只脫機狀態或正常狀態時。
官方文檔關於dbwn的說明 Database Writer Process (DBWn) The database writer process (DBWn) writes the contents of buffers to datafiles. The DBWn processes are responsible for writing modified (dirty) buffers in the database buffer cache to disk. Although one database writer process (DBW0) is adequate for most systems, you can configure additional processes (DBW1 through DBW9 and DBWa through DBWj) to improve write performance if your system modifies data heavily. These additional DBWn processes are not useful on uniprocessor systems. 數據庫的dbwn進程主要是把緩存的內容寫到數據文件中。dbwn進程主要負責把數據庫的高速緩存中的臟數據寫到硬盤上。雖然一個dbwn進程能夠滿足大部分的系統,如果你的系統臟數據太多,你也可以配置(dbw1到dbw9或dbwa到dbwj)來改善寫性能。在單進程的系統上增加dbwn進程沒有用。 When a buffer in the database buffer cache is modified, it is marked dirty. A cold buffer is a buffer that has not been recently used according to the least recently used (LRU) algorithm. The DBWn process writes cold, dirty buffers to disk so that user processes are able to find cold, clean buffers that can be used to read new blocks into the cache. As buffers are dirtied by user processes, the number of free buffers diminishes. If the number of free buffers drops too low, user processes that must read blocks from disk into the cache are not able to find free buffers. DBWn manages the buffer cache so that user processes can always find free buffers. 在數據庫高速緩存中當有一個緩存被修改,它就變成了臟數據了。一個冷緩存就是最近沒有被訪問的緩存塊。dbwn進程寫冷塊,臟緩存到硬盤,所以用戶進程能夠找到冷塊,清除緩,能把新的塊讀進緩存中去。緩存被用戶進程變臟,空閑緩存的數量就變少了。如果空閑的緩存下降的太少了,如果緩存不能找到空閑的塊用戶進程就必須從硬盤中讀塊。dbwn管理着高速緩存是為了讓用戶進程總能找到空閑的緩存。
SGA只會將修改了的數據(臟數據)寫入磁盤
LGWR(Log Writer Process)
LGWR進程在啟動實例時啟動
LGWR是把log_buffer中的日志條目(ORACLE把客戶提交的SQL語句轉換成ORACLE能夠識別、通過它可以重構數據的一種日志格式)寫入到日志文件中.
LGWR保存日志條目,迅速釋放log_buffer空間,只要該日志條目寫入到日志文件,所占的內存空間就釋放.所以log_buffer的功能就是臨時的存放日志條目,循環的使用,如果log_buffer滿了,就無法接受新的事務,就會發生實例掛起現象.
LGWR的作用: 將日志緩存區的數據從內存寫到磁盤的redo文件里,完成數據庫對象創建、更新等操作過程中的記錄。
LGWR的一些理解:
LGWR,是Log Writer的縮寫,也是一種后台進程。主要負責將日志緩沖內容寫到磁盤的在線重做日志文件或組中。DBWn將dirty塊寫到磁盤之前,所有與buffer修改相關的redo log都需要由LGWR寫入磁盤的在線重做日志文件(組),如果未寫完,那么DBWn會等待LGWR,也會產生一些相應的等待事件(例如:log file prarllel write,后面單獨作為話題再聊)。總之,這樣做的目的就是為了當crash時,可以有恢復之前操作的可能,也是Oracle在保持交易完整性方面的一個機制。
相關知識點: 1、LGWR寫日志是順序寫,這就解釋了一個Orace Server只能有一個LGWR進程,不能像DBWR那樣可以有多個,否則就無法保證順序寫的機制,而且可能會產生鎖的問題。 2、用戶進程每次修改內存數據塊時,都會在日志緩沖區(redo buffer)中構造一個相應的重做條目(redo entry),它記錄了被修改數據塊修改之前和之后的值。 3、LGWR將redo entry寫入聯機日志文件的情況可以概括為兩種:后台寫和同步寫,或者說異步寫和同步寫。
可以使用如下命令查看日志文件位置: SQL> select group#,member from v$logfile;
GROUP# ---------- MEMBER -------------------------------------------------------------------------------- 3 /u01/app/oracle/oradata/gaga01/redo03.log
2 /u01/app/oracle/oradata/gaga01/redo02.log
1 /u01/app/oracle/oradata/gaga01/redo01.log
SMON(System Monitor Process) SMON是Oracle數據庫至關重要的一個后台進程,SMON 是System Monitor 的縮寫,意即:系統監控。 作用:
在數據庫啟動過程中,SMON排在CKPT進程之后,在Oracle9i中排在第六號的位置: PMON started with pid=2 DBW0 started with pid=3 LGWR started with pid=4 CKPT started with pid=5 SMON started with pid=6 RECO started with pid=7 SMON負責系統監視已經一些系統清理及恢復工作,這些工作主要包括: 1.清理臨時空間以及臨時段 SMON負責在數據庫啟動時清理臨時表空間中的臨時段,或者一些異常操作過程遺留下來的臨時段. 例如,當創建索引過程中,創建期間分配給索引的Segment被標志為TEMPORARY,如果Create Index (或rebuild Index等)會話因某些原因異常中斷,SMON負責清理這些臨時段。 2.接合空閑空間 在DMT(字典管理表空間)中,SMON負責把那些在表空間中空閑的並且互相是鄰近的Extent接合成一個較大的空閑擴展區,這需要表空間的pctincrease設置為非零值。 3.執行實例恢復(Instance recovery) 在實例恢復過程中,SMON的工作包括三個環節:
4.離線(Offline)回滾段 在自動回滾段管理(AUM)中負責Offline不再需要的回滾段,日志中會記錄類似如下信息: Fri May 2 15:43:21 2008 SMON offlining US=11 5.執行並行恢復 以下信息來自9i日志: Fri May 11 21:30:45 2007 SMON: Parallel transaction recovery tried
Also Record some English Note About SMON: The SMON background process performs all system monitoring functions on the Oracle database. The SMON process performs a "warm start" each time that Oracle is re-started, ensuring that any in-flight transaction at the time of the last shutdown are recovered. For example, if Oracle crashed hard with a power failure, the SMON process is attached at startup time, and detects any uncompleted work, using the rollback segments to recover the transactions. In addition, SMON performs periodic cleanup of temporary segments that are no longer needed, and also perform tablespace operations, coalescing contiguous free extents into larger extents.
檢查點,把內存中的數據寫到磁盤上
|