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

oracle,process,session,cursor,tx,tm,简单,学习 · 浏览次数 : 8

小编点评

**Oracle 数据库部署模式** **专用模式 (Shared mode)** * 在共享模式中,多个会话可以共用相同的数据库资源。 * 每个会话都有它自己的独立连接和事务管理。 * shared 模式是一种简单易用的模式,但它不能处理高并发性问题。 **事务模式 (Transaction mode)** * 在事务模式中,多个会话可以并发执行事务操作。 * 每个事务都具有自己的事务隔离和隔离级别。 * 事务模式是一种更复杂的模式,但它可以处理高并发性问题。 **乐观模式 (Optimistic mode)** * 在乐观模式中,每个会话使用乐观锁来获取数据库资源。 * 如果一个会话成功获取锁,它就可以成功访问数据库资源。 * 如果另一个会话也成功获取锁,它会等待。 *乐观模式是一种比事务模式更安全的方法,但它可能导致性能下降。

正文

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的简单学习相似的内容:

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

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

[转帖]Oracle数据库的两种授权收费方式详解

https://www.jb51.net/article/265823.htm 现在Oracle有两种授权收费方式,按CPU(Process)数和按用户数(Named User Plus),前一种方式一般用于用户数不确定或者用户数量很大的情况,典型的如互联网环境,这篇文章主要介绍了Oracle数据库

[转帖]Oracle大页未正常使用导致大量SWAP案例分析

http://blog.itpub.net/30310891/viewspace-2927363/稀奇古怪的.. 故障背景 某次,用户反馈一套已经正常运行一段时间的 Oracle 11.2.0.4 RAC 数据库( 128G 物理内存),在调整 process 阈值之后, R AC 集群中其中一个节

Ergonomics JVM 的一种FullGC的说明

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html 2 Ergonomics Ergonomics is the process by which the Java Virtual Ma

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