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


Oracle的部署模式

Oracle安装时有专用模式和共享模式的区别

共享模式(Shared mode):
在共享模式下,会话可以同时读取数据库的数据,多个会话可以并发地进行读取操作。
这意味着多个会话可以共享相同的数据快照,并且彼此之间不会阻塞。 独占模式(Exclusive mode):在独占模式下,会话可以对数据库进行读取和修改操作。
当会话处于独占模式时,它会获取适当的锁资源,以防止其他会话并发地读取或修改相同的数据。
这种模式在写入和修改数据时非常常见。 需要注意的是,共享模式适用于读取操作,但不适用于写入和修改操作。
如果有写入和修改操作,需要考虑使用独占模式(Exclusive Mode)或其他适合的模式来保证数据的一致性和完整性。 另外,具体使用共享模式的可行性和效果还取决于数据库的配置、硬件资源、数据量、应用程序的设计和代码实现等多个因素。
在实际应用场景中,建议综合考虑这些因素,并进行性能测试和优化,以选择和配置合适的数据库模式 因为一般情况下Oracle数据库都需要实时修改 OLTP, 所以建议都是使用 独占模式 进行安装与部署.

process

Oracle 的process 包含的内容其实比较多. 

有background 也有 foreground
前台进程(foreground process)和后台进程(background process)。 前台进程是由客户端应用程序启动的与用户交互的进程,
它负责接收和处理来自客户端应用程序的请求,并将这些请求发送到数据库服务器进行处理。
前台进程与用户会话(session)相关联,负责处理用户的查询、事务处理和其他数据库操作。 后台进程则是在数据库启动时由数据库实例自动创建的进程,它们在后台运行以执行各种关键任务. 后台任务主要有DBWR LGWR CKPT 等等进程. 需要注意 process的数量不全是 客户端连接过来的.一般一个数据库可能有 50-70的非前端用户进程使用.

session

这里主要讨论专用模式下的session

专用模式下. 一个客户端连接到Oracle数据库.
数据库会创建一个单独的process 与数据库进行交互. 专用模式下. session 与前台process 基本上是一对一的关系. 所以独占模式下基于session的临时表就存在于session的存在时间. session失效了 临时表就会历史取消和删除.
全局临时表是在数据库中定义的一种特殊类型的表,它在创建时会被分配给所有会话,
但其中存储的数据是会话私有的,并且在每个会话结束时自动清空。 其实不管是全局临时表还是实表临时表最好是增加清理和删除机制, 避免占用太多的系统资源. 所以基于session的全局临时表 如果使用连接池时必须要在事务完成之后进行一次dispose. 将连接返还给连接池. 会话级别隔离:使用连接池获取数据库连接时,可以通过设置 setSessionInitMode(oracle.jdbc.OracleConnection.SESSION_INIT_NEW)
来确保每个连接的会话是全新的。这样可以避免不同会话之间共享全局临时表的数据,确保每个会话都有属于自己的临时表数据空间,保证隔离性。 连接回收与关闭:在使用连接池获取连接后,及时释放该连接以便连接池能回收并重新分配给其他会话。
确保在会话结束时关闭连接,以释放相关的资源,包括全局临时表的数据。这样可以确保下一个会话获得的连接不会共享之前会话的全局临时表数据。 适当的临时表设计:在设计全局临时表的时候,应该考虑到不同会话之间的隔离需求。可以通过为每个会话添加唯一的会话标识列,
或者将会话 ID 作为会话的前缀,避免不同会话之间的数据冲突。

cursor

专用模式下 process与session 可以理解为部分一对一的关系

但是一个session并不是只能够执行一个SQL.

一个session 执行SQL时是可以并发进行处理. 他的返回结果是通过 cursor 游标方式进行关联.
所以可以看到. 正常的awr报告, 每一个session可能有 40-60个cursor. 高并发的情况下, cursor/session 的比率会升高 占用的资源也会升高.

session与TCP的关系

session 与 前台进程对应. 也跟客户端和数据库之间的TCP有一定的对应关联.

当使用连接池时, 连接池会管理客户端与数据库的 TCP连接, 并且能够保持 min 的最少连接信息

客户端创建对数据库的连接时是一个成本很高的过程. 

不仅有TCP连接的建立,还需要oracle数据库创建process.session 并且分配PGA等等过程. 

所以当如果大量的连接建立时 一般会导致响应速度变慢. 

数据库的连接数与process其实没有特定的关系. 但是如果是专用(仅部署了Oracle数据库,并且是专用模式)
接数的上涨可能与数据库process的变化量保持正相关.

数据库锁与事件等待

数据库的锁是保证数据库一致性的核心资源.
因为有锁的存在, 冲突的其他方必须有等待.
等待会导致响应时间变慢,吞吐量下降.
但是是作为一个数据库实现一致性的必备条件
主要分类有如下: Concurrency
User I/O
System I/O
Administrative
Other
Scheduler
Configuration
Cluster
Application
Queueing
Idle
Network
Commit select a.WAIT_CLASS from v$event_name a group by a.WAIT_CLASS; Oracle 12c 有 1800 余个等待事件.
其中 enq 开头的有 720个 比较容易看到的主要有: enq: TX - allocate ITL entry
enq: TX - contention
enq: TX - index contention
enq: TX - row lock contention
enq: TM - contention 需要注意:
“Enqueue” 是 Oracle 数据库中用于管理并发访问和数据一致性的一种机制。它是一种资源锁,用于控制对共享资源(如表、索引、行等)的并发访问
以确保数据库的数据一致性和完整性。 在 Oracle 数据库中,enqueue 锁分为多种类型,每种类型都对应着不同的资源锁。一些常见的 enqueue 锁类型包括: TX:行级事务锁,用于控制对表中行的并发修改。
TM:表级锁,用于控制对整个表的并发访问,例如表的结构变更。
TM - contention:表示表级锁的争用,通常发生在多个会话同时对同一表进行 DDL 操作时。
SQ:序列器锁,用于控制对序列器的并发访问,以确保序列号的唯一性。
CI:区间并发锁,用于控制对索引的并发修改,以保证索引的一致性。
RO:只读锁,用于控制对某些资源的只读访问,以确保读取一致性。
当一个会话(进程)需要访问一个资源时,它会在 enqueue 队列中请求相应的锁。如果该资源的锁目前被其他会话持有,
则请求会进入等待状态,直到锁可用为止。当锁可用时,请求会话获得锁,并可以访问相应的资源。 通过监控 enqueue 等待情况,可以帮助识别数据库中的并发冲突和争用问题,以及设计和优化适当的并发控制策略,以提高数据库的性能和稳定性。

锁的简单解释-主要来源自Wetab

1. enq: TX - contention” 是 Oracle 数据库中的一种等待事件,表示等待行级事务锁(TX)的争用。
当多个会话同时试图修改同一行数据时,会发生行级事务锁的争用。 行级事务锁用于控制对表中行的并发修改。当一个会话开始修改某一行数据时,会获取该行的行级事务锁。
如果其他会话同时试图修改相同的行,它们就需要等待行级事务锁的释放,以确保数据一致性和完整性。 当出现 “enq: TX - contention” 等待事件时,意味着有多个会话正在等待获取相同行的行级事务锁。
这可能是因为同时修改相同行的会话数量较多、对事务隔离级别的要求较高或者业务逻辑造成的。 解决 “enq: TX - contention” 等待事件的方法包括: 调整事务隔离级别:使用适当的事务隔离级别可以减少行级事务锁的争用。例如,将隔离级别从 Serializable 降低到 Read Committed。
减少事务的长度和范围:尽量缩短事务的执行时间和涉及的数据范围,以减少行级事务锁的保持时间。
并发控制优化:通过分析和优化表结构、索引设计,以及调整应用程序逻辑,减少同时修改相同行的需求。
考虑使用更高级的锁机制:如果业务需求允许,可以考虑使用更细粒度的锁(如行级锁)或乐观锁,以减少锁的争用和冲突。 总之,处理 “enq: TX - contention” 等待事件需要根据具体情况进行分析和优化,以提高并发性能和减少锁的争用 2. enq: TM - contention” 是 Oracle 数据库中的一种等待事件,表示等待事务管理(Transaction Management)的争用。
当多个会话同时竞争事务管理资源时,会发生事务管理的争用。 事务管理包括分配事务编号、管理数据库日志、维护事务的隔离、并发控制等操作。当多个会话同时请求事务管理资源时,
会出现 “enq: TM - contention” 事件,表示有会话在等待获取或释放事务管理资源。 “enq: TM - contention” 事件的出现可能是因为以下原因: 高并发事务:当有大量的会话并发执行事务操作时,会导致对事务管理资源的竞争。
长时间事务:长时间运行的事务会持有事务管理资源较长时间,导致其他会话等待获取这些资源。
数据库锁竞争:数据库中的锁机制也可能导致事务管理资源的争用,例如行级锁、表级锁等。

Oracle process/session/cursor/tx/tm的简单学习的更多相关文章

  1. Oracle入门4-REF Cursor

    Oracle入门4-REF Cursor 转自:http://blog.sina.com.cn/s/blog_55dbebb00100gxsc.html 自:http://blog.csdn.net/ ...

  2. oracle中REF Cursor用法

    from:http://www.111cn.net/database/Oracle/42873.htm 1,什么是 REF游标 ? 动态关联结果集的临时对象.即在运行的时候动态决定执行查询. 2,RE ...

  3. oracle下session的查询与删除

    oracle下session的查询与删除 1.查询当前session SQL> select username,sid,serial# from v$session where username ...

  4. Oracle(1)之虚拟机下安装与简单使用

    Oracle介绍与安装 简介 Oracle 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器 (CLIENT/SERVER) 或 B/ ...

  5. shiro简单学习的简单总结

    权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...

  6. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  7. html css的简单学习

    html css的简单学习 css的内边距:padding (auto.length.%)(顺序:上.右.下.左)padding-toppadding-leftpadding-rightpadding ...

  8. Vagrant 安装Oracle19c RAC测试环境的简单学习

    1. 学习自网站: https://xiaoyu.blog.csdn.net/article/details/103135158 简单学习了下 能够将oracle RAC开起来了 但是 对后期的维护和 ...

  9. Swoole 简单学习(2)

    Swoole 简单学习(2) swoole之tcp服务器: //创建tcp服务器new swoole_server(string $host,int $port,int $mode=SWOOLE_PR ...

  10. 简单学习一下ibd数据文件解析

    来源:原创投稿 作者:花家舍 简介:数据库技术爱好者. GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 简单学习一下数据文件解析 这是尝试使用Golang语言简单解析My ...

随机推荐

  1. LeetCode 数、二叉树、二叉搜索树篇(94、144、145)

    94. 二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? / ...

  2. gh-pages在线演示踩的坑

    git在线演示 1.新建一个gh-pages分支 2.打包好的dist上传到分支里 3.访问:https://[用户名].github.io/[项目名]/dist ( 会自动访问dist下的index ...

  3. Java 在PPT中添加文本、图片超链接

    本文介绍通过Java程序在PPT幻灯片中添加超链接的方法,可以给文本或者图片设置超链接,设置超链接时,可设置包括网页链接.邮件地址链接.幻灯片跳转链接等不同指向对象的链接.文中方法使用了免费版PPT类 ...

  4. DevCloud加持下的青软,让教育“智”上云端

    摘要:构建多体系人才云实践环境,提供企业所需人才培养平台,构建以学习为中心的全新教育生态. 本文分享自华为云社区<[云享·伙伴]第5期:华为云DevCloud加持下的青软,让教育"智& ...

  5. CANN 5.0硬核技术抢先看

    摘要:2021年12月,CANN5.0版本也将与大家正式见面,通过软硬件协同优化,该版本将会实现训练性能再翻倍,凭实力展现AI领域的「中国速度」! 本文分享自华为云社区<CANN 5.0硬核技术 ...

  6. 掌握渗透测试,从Web漏洞靶场搭建开始

    摘要:漏洞靶场,不仅可以帮助我们锻炼渗透测试能力.可以帮助我们分析漏洞形成机理.更可以学习如何修复提高代码能力,同时也可以帮助我们检测各种各样漏洞扫描器的效果. 本文分享自华为云社区<Web漏洞 ...

  7. 云小课|打造企业数据“高内聚,低耦合”--试试GaussDB(DWS)逻辑集群,实现数据物理隔离

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:逻辑集群是基于No ...

  8. 浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战

    作为前端老鸟,从IE的6.7.8开始做前端,各种兼容性折磨死人.js还好有了jQuery.chrome出来后,真是救苦救难,解救程序员的于水火.但是可恶的boss还是要求兼容ie6,7.感谢淘宝团队的 ...

  9. web messaging与Woker分类:漫谈postMessage跨线程跨页面通信

    web messaging 跨文档通信(cross-document messaging):跨就是我们国内更为熟知的HTML5 window.postMessage()应用的那种通信: 通道通信(ch ...

  10. DevSecOps: CI/CD 流水线安全的最佳实践

    上一篇文章我们了解了 IAST 及其优势.工具类型以及重要性. 本期文章将为你介绍 CI/CD 流水线安全的最佳实践. ✦ ✦ CI/CD 流水线是指由持续集成(Continuous Integrat ...