关于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

       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的变化在一定的时间范围内没有明显的规律。

时间: 2024-07-30 19:57:48

关于oracle session的简单测试的相关文章

asp.net session 简单测试应用程序

asp教程.net session 简单测试应用程序 <%@ page language="c#" autoeventwireup="true"  codefile="default.aspx.cs" inherits="_default" %> <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "htt

Oracle字符集的简单图解,中文乱码解决

Oracle字符集的简单图解,中文乱码解决 经常碰到SQLPLUS展现乱码的问题,字符集和相关的定义都有说明但是很少有能把这些关系说的很简单易懂的. 在此之前我们需要搞清楚三个概念,操作系统字符集,客户端字符集,Oracle字符集: 操作系统字符集:对应的参数是LANG,这个参数应该是Oracle数据库的超集,如果操作系统不支持,那么我们的数据就会乱码.这里的操作系统指的是客户端的操作系统.服务器端的操作系统不会影响数据的存取. 数据库字符集:NLS_CHARACTERSET,可以在nls_da

MySQL Profile在5.7的简单测试

MySQL Profile对于分析执行计划的开销来说,还是有一定的帮助,至少在分析一些性能问题的时候有很多的参考依据. 我在5.6, 5.7版本中进行了测试,没发现差别,还是以5.7为例进行演示吧. mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.10    | +-----------+ 1 row in set (0.00 sec) 传统的使用Profile都是使用show profile这样的

struts2+hibernate+spring注解版框架搭建以及简单测试(方便脑补)

为了之后学习的日子里加深对框架的理解和使用,这里将搭建步奏简单写一下,目的主要是方便以后自己回来脑补: 1:File--->New--->Other--->Maven--->Maven Project--->Next(之后界面如下所示:) --->Next(点击next之后出现如下界面:选择最后一个 maven-archetype-webapp,然后点击next) --->Next(点击next之后出现如下界面,然后选择好组织号,工程号,版本号即可),最后点击Fi

smarty简单测试例子

smarty简单测试例子      <?phprequire 'smarty/libs/Smarty.class.php';$smarty = new Smarty;$smarty->template_dir="smarty/templates/templates";$smarty->compile_dir="smarty/templates/templates_c";$smarty->config_dir="smarty/temp

AJAX简单测试代码实例_AJAX相关

本文实例讲述了AJAX简单测试代码.分享给大家供大家参考.具体如下: 客户端:代码如下:(AJAX_test.html ) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/x

mysql convert函数性能简单测试

得到了这样一个需求,需要按照拼音字母排序,而mysql数据库使用的是utf编码. 如果使用gbk的话,排序规则是按拼音的. 而mysql中convert函数,可以对数据进行转换. 我们对这个convert进行了简单的性能测试,下面介绍一下测试过程,以及测试结果,如有问题,请各位指出. 软硬件环境 硬件配置:2核CPU.2G内存 数据库:Mysql 5.5 表结构 1 2 3 4 5 CREATE TABLE `test_gbk` ( `id` int(11) NOT NULL AUTO_INCR

java-求:junit的简单测试案例

问题描述 求:junit的简单测试案例 哪位大神能给我一个junit的简单测试案例,新手,初次使用junit4,谢谢. 最好是带参数的. 解决方案 1:引入junit包: 2:@Test public void test(){ //写入要执行的方法 } 此时不需要main方法,该方法体也可以执行. 解决方案二: 网上搜索一下会有一大堆

.net 获取session进行简单的数据登录验证问题?

问题描述 .net 获取session进行简单的数据登录验证问题? 设计包含一个包含Login.aspx和Welcome.aspx两个页面的网站.要求用户登录界面如下图,输入合法的用户名和密码后才能打开Welcome.aspx页面,此时页面中显示用户名及欢迎信息.如果用户级别是admin,页面中显示"管理所有用户"和"修改个人信息"链接按钮,如果用户级别为normal页面中只显示"修改个人信息"链接按钮. [要求]: 1. 合法用户名和密码,自己