91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle 12c 新增的LREG進程及其動態注冊的過程

發布時間:2020-08-07 18:30:43 來源:ITPUB博客 閱讀:328 作者:darren__chan 欄目:關系型數據庫

因剛好遇到12c 監聽注冊的問題,現將以前關于oracle 12c lreg進程的一些學習文章分享下:

oracle 數據庫中 pmon  進程一直承擔著較多的工作,例如清理進程以及監聽注冊等 , 這相當于一個人需要同時做好幾件工作, 而當其中一件讓他應接不暇時,也許這會影響它負責的其他工作,曾經在 11g r2 版本的數據庫遇到過 pmon  進程因忙于清理異常中斷的會話而導致服務更新 和服 注冊出現異常的情況。

oracle12c 以前的版本中服務注冊一直都是由 PMON 進程負責 , 12c oracle 引入了 LREG (listener registration) 后臺進程接管了這部分工作從而減輕 PMON 的工作。

一. Oracle 監聽及服務注冊:

Oracle 中,監聽器是一個監測連入客戶端連接請求并建立和管理會話的服務器端進程。這在當數據庫實例啟動后不同時間里,數據庫實例與監聽器聯系并建立了一條到該實例的通信路徑。

服務注冊讓監聽器能夠確定數據庫服務及其 service handlers (服務處理程序)是否可用。在注冊期間,服務注冊進程向 listener 提供實例名稱,數據庫服務名稱以及 service handlers 的類型 ( 專用或共享 ) 和地址。

oracle 12c 以前,負責服務注冊的是 pmon 進程:

oracle 12c 新增的LREG進程及其動態注冊的過程

而在 12c 以后,負責服務注冊的換成了 LREG 進程:

oracle 12c 新增的LREG進程及其動態注冊的過程

監聽沒有啟動 LREG 進程不能注冊服務 , 但是 LREG 進程會定時嘗試注冊 , 如果 local_listener 沒有配置 ,LREG 會嘗試連接默認的 1521 端口 , 直到監聽進程啟動 在監聽啟動后 LREG 進行周期注冊前 , 同樣也可以使用 ”alter system register” 立即注冊服務 .litener 的注冊信息。實際這個過程是動態注冊的過程。

另一個需要注意的是如果 LREG  進程死了,會同樣和 pmon  一樣,數據庫實例也會 crash 12c  直接報出的 ora-500,ora-500 則是監聽注冊進程死掉。

oracle 12c 新增的LREG進程及其動態注冊的過程

二.動態注冊的工作過程研究:

1. 使用 oradebug Event 10257 trace name context forever, level 1 6   來將 lreg dump 出來。可以初步看出 lreg 的工作過程:

oracle 12c 新增的LREG進程及其動態注冊的過程

dump  出來的信息可以看出, lreg 進程每 3 秒更新一次狀態,而到約每 60 秒時便會實例信息進行注冊。以下在監聽沒有啟動的情況下, LREG woken up to process network events after 0 cs 之后成功的數量依然為 0 ,說明此時無法注冊成功。

oracle 12c 新增的LREG進程及其動態注冊的過程

   而當將監聽啟動后,在 60 秒后的下一個注冊是便可以成功注冊。

oracle 12c 新增的LREG進程及其動態注冊的過程

2. 使用 strace  追蹤 lreg 進程的工作過程

當數據庫運作時其背后發生了很多事,數據庫也是一個應用軟件,其背后的這一切都可以追溯到操作系統的工作原理。 在對 lreg 進程進行追蹤可能需要先了解 orcle 監聽動態注冊中的兩個概念:文件描述符和   Sockets 文件

當監聽進程啟動時,它會在 /var/tmp/.oracle 下創建兩個套接字文件。  

oracle 12c 新增的LREG進程及其動態注冊的過程

這些文件均是  socket  文件, 且 s#12214.1  中的 12214  為進程號,則應為監聽的進程號,這些 socket  文被用作本地客戶端使用進程間通信協議( ipc )和不同的 oracle 的進程通信,而這些進程包括: tns  監聽, css  crs evm  守護進程;甚至數據庫和 asm  實例。這些 socket  主動監聽 的進程創建。在這里 oracle  監聽創建這些 socket  文件主要使用用作 lreg 和  tnslsnr   通信。

   同時,會在 /proc 目錄下相應進程號文件下創建幾個文件描述符,這些文件描述符( file descriptor )是內核為了高效管理已被打開的文件所創建的索引,其是一個非負整數(通常是小整數),用于指代被打開的文件,所有執行 I/O 操作的系統調用都通過文件描述符。

oracle 12c 新增的LREG進程及其動態注冊的過程

可以看到有幾個文件描述符,因此,確定有 為進 建的文件描述符和 sockets

那么 LREG 過程(以前的版本 PMON 行的 動態 注冊與文件描述符和 sockets 文件相關的 程是怎 的呢?

這些進程通過系統調用來查看監聽器是否啟動,如果沒有發現監聽進程,則等待,并且在 3000 毫秒之后重新 嘗試 。直到 聽啟 動時 ,文件描述符被 聽打開,并被 定以建立彼此之 接。

要找到 LREG 程正在做什么,我使用 STRACE OS 用程序來跟蹤它的工作。  11g 中的 PMON 程的 出不是完全相同的,因 它不是一個 專門 用于在 聽器中注冊 例的 程。另一方面, LREG 的唯一目的就是 動態 注冊, 這樣 可以解 兩個 程之 使用的系 統調 用之 的差異。

以下是 STRACE LREG 進程的日志:  

oracle 12c 新增的LREG進程及其動態注冊的過程

  從以上 strace 日志可以看到主要調用 epoll_wait()  函數 函數表示通 文件描述符來等待某個 I/O 事件發生的 時間 實際 就是一個持 等待某個 IO 事件的 生,而表 到數據 庫層 面, 應該 就可以理解 為監視監聽進程是否啟動的過程,在 epoll_wait(7, {}, 1024, 3000) 的最后一個 參數 示的 時間 以毫秒 3000 毫秒 為單 位(也就是 3 秒)。

關于epoll_wait的解釋:

oracle 12c 新增的LREG進程及其動態注冊的過程

接下來的兩行 getrusage ()函數表示 源使用消耗,而后面 times() 時間 函數返回 時間 ,在前面的 時間 打印很明 可以看出是每 3 行一次函數。

 再繼續往下看是 socket 函數其后面的值為 10 ,表示使用一個 socket 函數來處理文件描述符 10 。猜測這是用來與監聽器進程建立連接的文件描述符。這里使用的套接字是 NETLINK ,用于創建內核和網絡層之間的連接。

oracle 12c 新增的LREG進程及其動態注冊的過程

進一步查看下面的函數, 是對前面函數返回的文件描述符 10 進行嘗試綁定。

oracle 12c 新增的LREG進程及其動態注冊的過程

在接下來的幾行中,這個文件描述符將被用于與 PID 2582 的連接,而這個 PID 2582 LREG 進程的 PID

oracle 12c 新增的LREG進程及其動態注冊的過程

正在嘗試與 IP 地址 127.0.0.1 建立 接,端口號是 1521

oracle 12c 新增的LREG進程及其動態注冊的過程

由于沒有啟動監聽進程,并且還沒有文件描述符 10 與進程 LREG 相關聯,因此連接被拒絕,即也沒有建立的連接。

oracle 12c 新增的LREG進程及其動態注冊的過程

而在啟動監聽之后, lreg 發現監聽,并可以正常建立連接后則沒有沒有報出被拒絕的錯誤 

oracle 12c 新增的LREG進程及其動態注冊的過程

oracle 12c 新增的LREG進程及其動態注冊的過程

oracle 12c 新增的LREG進程及其動態注冊的過程

在以上lreg進程活動的日志可以看出 較多的 epoll_ctl與 epoll_wait函數調用,epoll在這里epoll貌似一種不斷來觸發監聽并操作某些文件描述的過程,lreg調用 epoll_wait  每3秒來監測監聽進程是否啟動,當發生注冊時使用 epoll_ctl去添加刪除某個文件描述符。具體的確實一時 無法 了解清楚。

   

    在監聽程序啟動后,可以使用 lsof –i TCP:1521 命令 來看 lreg 進程與tnslsnr進程的連接。

     ESTABLISHED的意思是建立連接。表示兩個進程正在通信。    ncube-lm是  nCube License Manager (即ncube管理的一個許可證明),意思是被允許,被認證開放的意思,這是tnslnr開啟的并處于LISTEN狀態。

三.總結:

      oracle 12c  除了服務注冊方面,其網絡服務架構在數據庫并沒有變化。在以前的版本中,服務注冊是通過PMON進程來完成。現在 由LREG(listener registration)來處理。LREG 是一個實例級別的后臺進程并且是非常重要, 一旦該進程被殺掉,將導致數據庫實例崩,它會 做一切 PMON 過去在實例注冊的方面執行的,例如:在監聽日志 listener.log 里 service_update, service_register, service_died 。

      由于工作被專屬化,這里我們可以更清晰的了解其工作的過程,例如每3秒一次的監測,每60秒一次的嘗試注冊等,都可以清楚的看到。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会同县| 读书| 葫芦岛市| 本溪| 城市| 出国| 木里| 丹巴县| 沙洋县| 荆州市| 盖州市| 绍兴市| 嘉义县| 三门峡市| 白山市| 都兰县| 西充县| 溧阳市| 镇康县| 承德市| 罗定市| 温泉县| 房山区| 新民市| 资兴市| 凭祥市| 民乐县| 高碑店市| 连云港市| 潮安县| 平度市| 新野县| 望奎县| 仪征市| 崇礼县| 武山县| 眉山市| 菏泽市| 新竹市| 海盐县| 兴海县|