[20180926]等待事件SQLNet more data from client 7.txt
[20180926]等待事件SQLNet more data from client 7.txt
--//前幾天測試分析等待事件SQLNet more data from client,今天測試改變檔案大小後,檢視檢視V$SESSION_WAIT_HISTORY看到P2的變化.
--//連結在12c for windows測試的.
--//上班在11g for linux重複測試看看.
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
--//sqlnet.ora檔案設定DEFAULT_SDU_SIZE=8192
2.測試建立指令碼:
--//建立指令碼大小8192,命名8192.txt(注意檔案格式是linux格式),指令碼很長不在貼出.
3.建立測試指令碼:
--//先執行如下:
CREATE TABLE tt AS
SELECT sysdate d,0 c,P2,TIME_SINCE_LAST_WAIT_MICRO
FROM V$SESSION_WAIT_HISTORY
WHERE sid = 1
AND event = 'SQL*Net more data FROM client';
$ cat init.sql
variable i number ;
exec :i := 8192;
column sid new_value v_sid
select sid from v$mystat where rownum=1;
set verify off
set head off
$ cat loop.sql
@@8192.txt
insert into tt select sysdate,:i,P2,TIME_SINCE_LAST_WAIT_MICRO from V$SESSION_WAIT_HISTORY where sid=&v_sid and event='SQL*Net more data from client';
host sed -i -e "3s/^.//g" 8192.txt
exec :i := :i - 1;
--//注:8192.txt 第3行最好長一些.至少包括394個字元.
$ cat loop1.sh
#! /bin/bash
sqlplus scott/book <<EOF
@ init.sql
$(seq 1 394 | xargs -i{} echo @loop )
quit
EOF
--//測試394次,每次8192.txt檔案大小減少1個字元.
--//注:我這裡本地連線,沒有透過網路.
4.測試結果如下:
--//執行
$ source loop1.sh
...
--//僅僅C=7844後,不再插入,也就是沒有遇到這個等待事件.
5.繼續分析:
SCOTT@book> select * from tt where c > 8188 order by c desc;
D C P2 TIME_SINCE_LAST_WAIT_MICRO
------------------- ---------- ---------- --------------------------
2018-09-25 09:26:40 8192 10 51
2018-09-25 09:26:40 8191 10 83
2018-09-25 09:26:40 8190 10 77
2018-09-25 09:26:40 8189 10 35
--//可以發現該版本與windwos的測試不同,P2沒有變化.
--//而且與前面的測試也不一樣,前面測試P=30(0x1e).主要問題當是透過網路,
--//這次沒有透過網路.使用本地網路.
--//sql語句長度減少,P2不變.
SELECT *
FROM (SELECT c, p2, LEAD (p2) OVER (ORDER BY c DESC) p2x FROM tt)
WHERE p2 <> p2x + 1 ;
C P2 P2X
---------- ---------- ----------
8192 10 10
8191 10 10
8190 10 10
8189 10 10
8188 10 10
8187 10 10
...
7914 10 10
7913 10 10
7912 10 10
7911 10 10
7910 10 10
7909 10 10
7908 10 10
7898 1 1
7897 1 52
287 rows selected.
--//檔案大小8192減少到7908,P2=10.沒有變化,不理解為什麼?
SCOTT@book> select * from tt where c in (select min(C) from tt);
D C P2 TIME_SINCE_LAST_WAIT_MICRO
------------------- ---------- ---------- --------------------------
2018-09-25 09:26:43 7845 1 77
--//也就是sql語句長度<=7844(如果不包括最後分號,換行,就是7842),不再出現SQL*Net more data from client等待事件.
6.繼續分析:
--//透過網路測試,修改檔案8192.txt大小為8191.
@ &r/spid
@ 8192.txt
--//檢視P2=30.
# tcpdump -l -i eth0 -s 0 -A port 1521 and host 192.168.98.6 -nn -w 8191.raw
--//檢視8192.raw
0002080: 06c0 a864 4ec7 c305 f1dc 3cd7 46b4 1803 ...dN.....<.F...
0002090: c450 1840 2979 4100 0001 7b00 0006 0000 .P.@)yA...{.....
00020a0: 0000 0035 3637 3839 3031 3233 3435 3637 ...5678901234567
00020b0: 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123
00020c0: 34ff 3536 3738 0a61 3132 3334 3536 3738 4.5678.a12345678
~~ --> 長度指示器
00020d0: 3930 3132 3334 3536 3738 3930 3132 3334 9012345678901234
00020e0: 3536 3738 3930 3132 3334 3536 3738 3930 5678901234567890
00020f0: 3132 3334 3536 3738 3930 3132 3334 3536 1234567890123456
0002100: 3738 3930 3132 3334 3536 3738 3930 3132 7890123456789012
0002110: 3334 3536 3738 3930 3132 3334 3536 3738 3456789012345678
0002120: 3930 3132 3334 3536 3738 0a61 3132 3334 9012345678.a1234
0002130: 3536 3738 3930 3132 3334 3536 3738 3930 5678901234567890
0002140: 3132 3334 3536 3738 3930 3132 3334 3536 1234567890123456
0002150: 3738 3930 3132 3334 3536 3738 3930 3132 7890123456789012
0002160: 3334 3536 3738 3930 3132 3334 3536 3738 3456789012345678
0002170: 3930 3132 3334 3536 3738 3930 3132 3334 9012345678901234
0002180: 3536 3738 3930 3132 3334 3536 3738 0a61 56789012345678.a
0002190: 3132 3334 3536 3738 3930 3132 3334 3536 1234567890123456
00021a0: 3738 3930 3132 3334 3536 3738 3930 3132 7890123456789012
00021b0: 3334 3536 3738 3930 3132 3334 3536 3738 3456789012345678
00021c0: 391d 3031 3233 3435 3637 0a2a 2f20 7379 9.01234567.*/ sy
~~ --> 長度指示器,轉換10進位制 29,看來前面的測試僅僅是巧合.^_^.
00021d0: 7364 6174 6520 6672 6f6d 2064 7561 6c00 sdate from dual.
00021e0: 0100 0000 0000 0000 0000 0000 0000 0000 ................
}
--//看來前面的測試只不過是一個巧合.還是無法知道P2是如何確定的.
7.總結:
--//1.SQL*Net more data from client,主要原因就是sql語句太長.與SDU設定存在密切關係.
--//2.我的測試大約78XX上下出現該等待事件,設定SDU=8192的情況下.不過還是無法分析出P2,oracle如何確定的.
--//3.如果應用很多這類sql語句,特別in的情況,可以修改為繫結變數.不行增加SDU.
--//4.看了一些連結我感覺設定大的SDU,會增加PGA記憶體的消耗.必須綜合考慮,連線數量等情況,不過現在的伺服器記憶體都很大,估計影響沒我
--// 想象的這麼嚴重.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2214964/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20180925]等待事件SQLNet more data from client 6.txt事件SQLclient
- [20180922]等待事件SQLNet more data from client 4.txt事件SQLclient
- [20180920]等待事件SQLNet more data from client 3.txt事件SQLclient
- [20180918]等待事件SQL/Net more data from client.txt事件SQLclient
- 【等待事件】SQL*Net more data to client事件SQLclient
- 【等待事件】SQL*Net more data from dblink事件SQL
- [20190622]收集SQLNet Message From Client資訊.txtSQLclient
- 【等待事件】SQL*Net vector date to client事件SQLclient
- 【等待事件】SQL*Net message from dblink事件SQL
- [20181120]SQLNet break/reset to client.txtSQLclient
- [異常等待事件latch undo global data]分析事件
- Solidity事件,等待事件Solid事件
- 【TUNE_ORACLE】等待事件之等待事件類別Oracle事件
- get_data_from_yml
- bd_ticket_guard_client_dataclient
- ABP Framework Consuming HTTP APIs from a .NET ClientFrameworkHTTPAPIclient
- Selenium等待事件Waits事件AI
- 事件 滑鼠事件 表單事件 from表單事件
- Bd-Ticket-Guard-Client-Data逆向client
- OAF export data from VO in xlsx formatExportORM
- read by other session等待事件Session事件
- log file sync等待事件事件
- ORACLE 常見等待事件Oracle事件
- latch等待事件彙總事件
- Latch free等待事件(轉)事件
- gc cr request等待事件GC事件
- 【等待事件】library cache pin事件
- 【等待事件】log file sync事件
- 【TUNE_ORACLE】等待事件之日誌等待“log file sync”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“read by other session”Oracle事件Session
- 【TUNE_ORACLE】等待事件之IO等待“direct path read”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“direct path write”Oracle事件
- Latch free等待事件四(轉)事件
- Latch free等待事件三(轉)事件
- db file scattered read等待事件事件
- db file sequential read等待事件事件
- latch:library cache lock等待事件事件
- Oracle常見UNDO等待事件Oracle事件