1. 程式人生 > 其它 >關於oracle session的簡單測試(r2筆記95天)

關於oracle session的簡單測試(r2筆記95天)

平時檢視v$session的時候要定位一個session,需要sid,serial#這個兩個值,其實更多時候我們關注更多的是sid,對於serial#卻不太瞭解。 至少從v$mystat中,可以看到,是隻能定位到sid的,對於serial#的值還需要藉助v$session來查詢。 SQL> desc v$mystat Name Null? Type ----------------------------------------- -------- ---------------------------- SID NUMBER STATISTIC# NUMBER VALUE NUMBER

有時候看著sid,serial#的變化,想可能裡面有一定的規律,今天還是下決心寫個程式自己簡單測試下,測試結果僅供參考。 我寫了如下的指令碼, -rw-r--r-- 1 ora11g dba 57151 Sep 15 08:11 check.log -rw-r--r-- 1 ora11g dba 183 Sep 15 07:52 check.sh -rw-r--r-- 1 ora11g dba 45 Sep 15 07:53 loop.sh -rw-r--r-- 1 ora11g dba 2 Sep 15 08:05 sleep_time.par [ora11g@rac1 chk_session]$
loop.sh的內容很簡單就是迴圈呼叫check.sh,然後寫入日誌check.log while true do ksh check.sh >> check.log done check.sh的內容也很簡單,就是每次使用sqlplus來建立一個session。然後sleep一定的時間。 sleep_time=`cat sleep_time.par` sqlplus -s n1/n1 <<EOF select sid,serial# from v$session where sid=(select sid from v$mystat where rownum<2); EOF echo $sleep_time sleep $sleep_time
為了能夠更加靈活的控制建立session之後的sleep時間,我們可以動態的修改sleep的時間,具體的值在sleep_time.par中,可以動態修改。 [ora11g@rac1 chk_session]$ cat sleep_time.par 3 有了如上的準備工作,來看看輸出的check.log的內容吧。可以看到在1秒的間隔時間下,重新建立的session的sid不會發生變化,而serial#會按照2的間隔遞增。

SID SERIAL# ---------- ---------- 257 93

1

SID SERIAL# ---------- ---------- 257 95

1

SID SERIAL# ---------- ---------- 257 97 動態調整間隔時間為3秒,發現沒有任何的改變。

SID SERIAL# ---------- ---------- 257 137

3

SID SERIAL# ---------- ---------- 257 139

3

SID SERIAL# ---------- ---------- 257 141

在我重新調整了時間,從3秒調整到10秒,還是沒有改變,然後調整為30秒的時候。發現sid發生了變化,而且serial#不是從1開始遞增。

10

SID SERIAL# ---------- ---------- 257 167

10

SID SERIAL# ---------- ---------- 257 169

30

SID SERIAL# ---------- ---------- 258 515

30

SID SERIAL# ---------- ---------- 258 517

然後sid開始固定,serial#開始遞增

SID SERIAL# ---------- ---------- 258 565

30

SID SERIAL# ---------- ---------- 21 31

30

我在想不是serial#有個臨界值之類的。

於是把間隔時間調整為0秒。

結果serial#遞增到1500多還是沒有任何反應。然後由0秒調整為3秒後的變化如下:

SID SERIAL# ---------- ---------- 21 1603

0

SID SERIAL# ---------- ---------- 21 1605

3

SID SERIAL# ---------- ---------- 21 1607

3

SID SERIAL# ---------- ---------- 21 1609

3

SID SERIAL# ---------- ---------- 21 1611

3

SID SERIAL# ---------- ---------- 253 135

SID SERIAL# ---------- ---------- 253 175

3

SID SERIAL# ---------- ---------- 257 175

如果觀察足夠仔細,就會發現最後的sid為257的session在最開始的時候已經用過,只是serial#部分不同,新建的session 257,175和之前的部分也沒有衝突,是從上一次中斷的那個serial#值開始的。

林林總總做了一圈測試,發現session的sid,serial#有如下的基本規律。

serial#按照2的頻度進行遞增。

serial#的分配由資料庫自動控制,有點類似連線池的味道,下次某個session在sid相同的情況下,serial#會從上一次的值開始繼續遞增。

sid的變化在一定的時間範圍內沒有明顯的規律。