关于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的变化在一定的时间范围内没有明显的规律。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一篇文章带你入门移动安全
- Could not load JDBC driver class [com.mysql.jdbc.Driver]
- [Bazel]自定义规则实现将多个静态库合并为一个动态库或静态库
- [Golang]包管理
- Power Query中避免出错的几种情况
- 我的开发日记(十五)
- 常见未授权访问漏洞总结
- 如何用命令行给mySQL添加用户
- [877]ModuleNotFoundError:no module named ‘tools.nnwrap‘ 解决办法
- Selenium自动化:代码测试与无代码测试
- 个人独立博客搭建教程(win),如何快速搭建博客
- dotnet OpenXML 解压缩文档为文件夹工具
- webpack实战——预处理器(loader)【上篇】
- Mac安装git,brew出现的问题
- dotnet OpenXML 简单聊聊 PPT 文本解析