Oracle session的sid与serial的简单学习

oracle,session,sid,serial,简单,学习 · 浏览次数 : 3

小编点评

**sid** 是一个会话槽的概念,它是一个存储会话信息的地方。 **serial** 是一个会话的序列号,它在多个会话之间保持唯一。 **会话池** 是一个存储会话信息的池,包含每个会话的描述信息。 **每个会话占用1K字节**,所以会话池可以存储3000个会话的信息。 **每个会话Slot保存一个会话的信息,包括**: * 会话ID * 序列号 * 状态 * 绑定变量的信息 **当一个会话断开连接后,过一会,又有一个会话连接时,Oracle会将话信息保存在同一个Slot中。** **每个Slot可以保存多个会话的信息,每个Slot对应一个serial#。** **sid 与 serial 是一个一对一的映射关系。** **每个线程可以使用相同的sid创建多个会话。** **每个会话都有一个serial#,用于区分多个会话。**

正文

Oracle session的sid与serial的简单学习


ITPUB vage的说法

这样说吧,Oracle允许的会话数(或者说连接数)是固定的,比如是3000个。假设每个会话要占1K字节,哪一共就需要3000K。
这3000K就是一个小内存池,可以称为会话池。会话池中每个1K保存一个会话的信息,可以称为一个会话Slot。
假设编号为100的会话Slot(也就是Sid为100),有一个会话连接,Oracle将会话信息保存在100号Slot(也就是新建立的连接会话号为100),此时serail#为1。
当此会话断开连接后,过一会,又有一个会话连接,Oracle又将会话信息保存在100号Slot(也就是会话号又是100),此时Serail#为2。
Serial#,代表第几次使用同一个会话Slot。

http://www.itpub.net/thread-1600999-1-1.html

自己的理解

之前总结过 Oracle其实是有 专用模式和共享模式的
但是官方说的 session=1.1*process+5的经验值设置大法并没有直接说明 是专用模式下还是共享模式.

按照理解. 专用模式下面 process的数据量应该肯定会大于session的数量 因为session和process 是需要一对一的. 但是process 并没有必须创建session的创景.

在按照vage大神的说法. sid 其实就是一个slot 槽的概念, 其实没有实际的意义, 不相同是应该,相同的话是运气. 
决定具体执行SQL以及SQL结果的是 serial#的数值,以及游标的信息. 

在java 的连接池模式下. 理论上我一个线程的多个短促事务非常有可能使用到相同的sid, serial# 在部分情况下可能指向的是连接的会话.

cursor 会指向会话内的一个具体的SQL执行,用于返回结果集. 

sid 与数据库里面的process 相关(理论上使用PGA的内存空间)
serial 与会话相关. 表名是谁在连接, 并且可能还没有显示的进行终止
会话终止了. process会进入等待被使用的状态. sid就会变成空闲. 然后下一个会话进来时 可能使用相关的sid 但是serial会 +1 进行区分. 

然后没执行一条SQL会对应一个cursor.
这里面oracle的一些参数就跟linux的参数比较类似了. 

process和session 的最大值只的是整个系统的
open_cursor的最大值 指的却是每一个 session 的. 
所以理论上一个数据库能够支撑的游标总数可能是 open_cursor*max_session. 是比较恐怖的.

cursor和process一样都是需要占用内存进行存储结果的.
cursor 可能还会跟library cache相关联. 

一条SQL进入数据库, 会先进行md5的处理
如果library cache中有相同的md5 那么就是soft parse 如果没有就是hard parse
soft 比 hard 性能和速度要好很多, 这个里面就是 绑定变量让SQL的 md5值保持一致来减少CPU消耗提高并发性能的根本原理. 

然后如果cursor中会有,相同SQL的执行记录, 那么就会 soft soft parse. 速度更快消耗更少, 但是会让session占用更多的内存,
也就是session_cursor 类型的参数来决定能够储存 解析过SQL多少的能力.  也是空间换时间的逻辑. 

parse 完后其实就是进入了 CBO的逻辑 这里与今天的思考没关系,就不展开了(我也没闹明白)

部分实验

可以使用
select session_ID,COUNT(1) from v$active_session_history GROUP BY session_ID ORDER BY 1 DESC  
查看当前数据库的最大的SID的值
比如我这边服务器就显示: 6389

select * from gv$parameter where name like '%session%'
查看对应的参数发现结果为:
6784

理论上肯定与最大值比较接近, 其实是session就是一个艰难的数值类型. 
select session_ID,COUNT(1) from v$active_session_history GROUP BY session_ID ORDER BY 2 DESC  

按照 没有被刷出ASH内存的表中统计的序列号的多少看 可以发现那个session使用量最大.
当然了. 不一定是序号的总数 有可能是序号被统计的次数比较多, ASH表是每十秒取样一次. 并不是精确数值. 

select * from v$active_session_history where session_id = '2121' order by session_serial# desc 
发现这个最大的是一个 后台进程 !-_-! 理论上很多后台进程 除非服务器重启后者是其他严重异常才会退出. 

简单总结

数据库非常复杂. 边学边记...

与Oracle session的sid与serial的简单学习相似的内容:

Oracle session的sid与serial的简单学习

Oracle session的sid与serial的简单学习 ITPUB vage的说法 这样说吧,Oracle允许的会话数(或者说连接数)是固定的,比如是3000个。假设每个会话要占1K字节,哪一共就需要3000K。 这3000K就是一个小内存池,可以称为会话池。会话池中每个1K保存一个会话的信息

Oracle process/session/cursor/tx/tm的简单学习

Oracle process/session/cursor/tx/tm的简单学习 Oracle的部署模式 Oracle安装时有专用模式和共享模式的区别 共享模式(Shared mode): 在共享模式下,会话可以同时读取数据库的数据,多个会话可以并发地进行读取操作。 这意味着多个会话可以共享相同的数

[转帖]ORACLE 并行(PARALLEL)实现方式及优先级

http://blog.itpub.net/25542870/viewspace-2120924/ 一、 Parallel query 默认情况下session 是ENABLE状态 1. 实现方式 1 Alter session force parallel query; 2 Alter table

CTAS建表时报错ORA-65114

环境: Oracle 19.16 多租户架构 1.问题现象: SQL> create table T1 as select * from v$active_session_history * ERROR at line 1: ORA-65114: space usage in container i

oracle并发与多版本控制

1 相关概念 1.1 并发控制 数据库对多个用户同时查询或者操作数据的管理。 1.2 多版本控制 oracle能物化多个版本的数据,使在一个时间点读一个表,保证在这个时间点读到的表数据是一致的。oracle的多版本控制机制是oracle提供读一致性的基础。 1.3 事务的作用 事务使数据库从一种一致

Oracle优化神技之临时表

Oracle临时表在处理临时数据、会话数据隔离和复杂查询优化方面非常有用。 其底层逻辑是通过Oracle特殊的临时表来减少I/O操作和日志开销,提高了数据库性能和查询效率。开发者可以根据具体需求和场景,合理使用临时表来简化数据处理逻辑和提高系统性能。 早期开发人员在使用Oracle数据库时,经常因为

Oracle修改字段长度及属性

首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247486117&idx=1&sn=02e2cd05e5db7eaa5758c70e81cf3972&chksm=ea375ed5dd40d7c

实现并发新高度:23ai的无锁列值保留

Oracle Database 23ai支持Lock-Free Reservation,中文通常译为“无锁列值保留”。 本文将通过3个部分来阐述Lock-Free Reservation的这个特性: 1.应用场景 2.实现原理 3.使用限制 1.应用场景 Lock-Free Reservation这

Oracle "脑残" CBO 优化案例

今天晚上下班回来才有空看群,群友发了一条很简单的慢SQL问怎么优化。 非常简单,我自己模拟的数据。 表结构: -- auto-generated definition CREATE TABLE HHHHHH ( ID NUMBER NOT NULL PRIMARY KEY, NAME VARCHAR

[转帖]Oracle Linux 9 - Oracle 提供支持 RHEL 兼容发行版

https://sysin.org/blog/oracle-linux-9/ Oracle Linux 是一个开放、全面的操作环境,提供虚拟化、管理、云原生计算工具和操作系统,通过一个统一的支持解决方案满足您的业务需求。Oracle Linux 与 Red Hat Enterprise Linux