SQL*Net message from client 事件產生的原因分析
<div>
</div>
<div>
今天同事在做資料庫巡檢時,發現巡檢報告中有大量的SQL*Net message from client等待事件。同事問什麼情況下回產生SQL*Net message from client,為什麼回產生SQL*Net message from client。<br />
<div>
1.對於資料庫的一個session來說,每時每刻都在wait 的狀態。<br />
WAIT FOR IO / WAIT FOR CPU / WAIT FOR LATCH /WAIT FOR ...<br />
這一點你可以查詢 v$session_wait,總有資料.<br />
SQL>select sid,event,p1,p1raw from v$session_wait;<br />
<br />
2.對於Server process來說,如果客戶端發來一個請求,它處理完所有需要處理的請求之後,它就進入另一個WAIT,<strong>SQL</strong>*<strong>Net</strong> <strong>message</strong> <strong>from</strong> <strong>client</strong> ,等待著Cilent發來請求讓它處理,而我們把這種wait叫做空閒事件(<span>ildel event)</span>,並不代表真正的loading。<br />
舉一日常生活中的例子,你去銀行辦理業務,辦理業務的視窗的業務員。如果有很多客戶在等待辦理業務,那麼業務員會非常忙碌,但是,當他辦理所有排隊的業務後,沒有人辦理業務了,這時,業務員就處於了SQL*Net message from client狀態,一直等待有人走進大廳來辦理業務的客戶。<span>就相當於業務員wait for "業務</span><span style="font-size:x-small;"><strong>from客戶</strong>“,事實上是在休息,也就是沒有loading.<br />
</span><br />
4.當然也有其他情況,比如,業務員辦理完業務後,一直沒有按叫號器,大廳裡有很多人都在等待辦理業務 ,這種情況下的 (SQL*Net message from client<span style="display:none;" id="__kindeditor_bookmark_start_123__"></span>) 就不正常了。相<span style="color:#000000;">對應的Oracle裡的就是網路不暢,<strong>Client</strong>想發資訊給Server process,結果不成功,而Server process一直是wait for <strong>SQL</strong>*<strong>Net</strong> <strong>message</strong> <strong>from</strong> <strong>client</strong> .</span><br />
5.結論,<span>只要網路沒問題。<strong>SQL</strong>*<strong>Net</strong> <strong>message</strong> <strong>from</strong> <strong>client</strong> 這個wait不用管。</span><br />
<br />
<p>
<span style="font-size:18px;"><strong>SQL*Net message to client</strong></span>
</p>
<pre style="display:none;" class="sql" name="code">SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'SQL*Net message to client';
EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3
---------- -------------------------------------------------- --------------- --------------- --------------------
255 SQL*Net message to client driver id #bytes</pre>
這個等待事件發生在伺服器端向客戶端傳送訊息的時候。當伺服器端向客戶端傳送訊息產生等待時,可能的原因是使用者端太繁忙,無法及時接收伺服器端送來的訊息,也可能是網路問題導致訊息無法從伺服器端傳送到客戶端。<br />
<p>
這個等待事件包含兩個引數。
</p>
<p>
driver id:伺服器端和客戶端連線是用的協議資訊。
</p>
#bytes:伺服器端向客戶端傳送訊息的位元組數。<br />
<p>
<br />
</p>
<p>
<span style="font-size:18px;"><strong>SQL*Net message to dblink</strong></span>
</p>
<pre style="display:none;" class="sql" name="code">SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'SQL*Net message to dblink';
EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3
---------- -------------------------------------------------- --------------- --------------- --------------------
256 SQL*Net message to dblink driver id #bytes
</pre>
這個等待事件和SQL*Net message to client相同,不過是發生在資料庫伺服器端和伺服器端之間的等待事件,產生這個等待的原因可能是遠端伺服器繁忙,而無法即時接收傳送過來的訊息,也可能是伺服器之間網路問題導致訊息無法傳送過來。
<p>
<br />
</p>
<p>
這個等待事件包含兩個引數。
</p>
<p>
driver id:伺服器端和另一個伺服器端連線是用的協議資訊。
</p>
<p>
#bytes:伺服器端透過dblink從另一個伺服器端收到的訊息的位元組數。
</p>
</div>
<br />
我們可以透過下面語句查詢資料庫看有什麼在等待,
</div>
<div>
查詢v$session_wait
</div>
<div>
</div>
<div>
SELECT S.SID,<br />
S.SERIAL#, <br />
S.USERNAME,<br />
S.STATUS,<br />
S.MACHINE,<br />
S.PROGRAM,<br />
S.MODULE,<br />
A.SQL_TEXT<br />
FROM V$SESSION S,<br />
V$SQLAREA A<br />
WHERE S.USERNAME IS NOT NULL<br />
AND S.SQL_ADDRESS = A.ADDRESS<br />
</div>
<div>
</div>
<div>
看見<strong>SQL</strong>*<strong>Net</strong> <strong>message</strong> <strong>from</strong> <strong>client</strong> 等待時間最長,其實這個是oracle空閒等待時間,只要網路沒有問題,可以不用考略這個wait。
<div>
</div>
<div>
</div>
</div>
<div>
</div>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2137878/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL*Net message from clientSQLclient
- sql net message from|to client與sql execution countSQLclient
- Oracle的SQL*Net more data from client 等待事件分析OracleSQLclient事件
- SQL* Net message to client 和SQL * Net more data to client等待事件SQLclient事件
- select hang住等待SQL*Net message from ClientSQLclient
- 【等待事件】SQL*Net message from dblink事件SQL
- [20161208]SQL*Net message from clientSQLclient
- 0824SQL/Net message from client 丟包模擬SQLclient
- SQL*Net more data from clientSQLclient
- 產生top sql的原因(zt)SQL
- 0124奇怪的SQL*Net message from dblinkSQL
- 【等待事件】SQL*Net more data to client事件SQLclient
- 【等待事件】SQL*Net vector date to client事件SQLclient
- 生產系統 SQL 執行異常原因分析SQL
- [20180918]等待事件SQL/Net more data from client.txt事件SQLclient
- [20190622]收集SQLNet Message From Client資訊.txtSQLclient
- 【等待事件】SQL*Net more data from dblink事件SQL
- SQL*Net more data to client 等待事件造成的效能問題SQLclient事件
- Redo wastage產生的原因AST
- Script to generate AWR report from remote sql clientREMSQLclient
- 20180126模擬SQL*Net message from dblinkSQL
- [20180925]等待事件SQLNet more data from client 6.txt事件SQLclient
- SQL*Net break/reset to clientSQLclient
- [20180922]等待事件SQLNet more data from client 4.txt事件SQLclient
- [20180920]等待事件SQLNet more data from client 3.txt事件SQLclient
- [20180926]等待事件SQLNet more data from client 7.txt事件SQLclient
- ABP Framework Consuming HTTP APIs from a .NET ClientFrameworkHTTPAPIclient
- SQL*Net break/reset to client等待SQLclient
- 一文簡析電感噪音產生的常見原因分析
- 生產sql調優之統計資訊分析SQL
- 0126奇怪的SQLNet message from dblink模擬SQL
- SDU&SQL*NET MORE data to clientSQLclient
- iebugs產生的原因,zoom:1的作用OOM
- Laravel/Lumen 記錄MySQL 和 MongoDB 產生的 SQL,定位 SQL 產生位置LaravelMySqlMongoDB
- javascript message事件JavaScript事件
- 「RxJava進階」基於原始碼的上游(Observable)事件產生流程分析RxJava原始碼事件
- top sql 產生的歸納SQL
- Form產生時的事件次序; (轉)ORM事件