天天看點

關于oracle session的簡單測試

平時檢視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

select sid,serial# from v\$session where sid=(select sid from v\$mystat where rownum

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

257         95

257         97

動态調整間隔時間為3秒,發現沒有任何的改變。

       257        137

       257        139

       257        141

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

10

       257        167

      257        169

30

       258        515

       258        517

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

       258        565

        21         31

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

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

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

        21       1603

        21       1605

        21       1607

        21       1609

        21       1611

       253        135

       253        175

       257        175

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

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

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

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

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