`
teachertina
  • 浏览: 12500 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

oracle多版本控制/读一致性和非阻塞读(2)

 
阅读更多

所谓的读一致性,就是sql语句的结果对于查询开始的时间点来说是一致的! 正是因为这一点,下面的sql语句可以插入可以预知的数据集:

insert into t select * from t;

 

这个insert 语句在之前得到了一个t 表的读一致性视图,它看不到刚刚插入的数据行,而只是在insert操作刚开始时候的记录行,所以不用担心在Insert过程中,因为不断的插入,导致select 出来的结果无止境的问题,有效的解决了这个看是死循环问题!

 

非阻塞读

很多数据库为了读取数据的一致性,会在读取的时候加锁,大概分为两种锁的机制:

1.读取的时候,给整张表加上锁,在读取的这一刻不允许数据更新,

2.或者缩小到数据级,在读取到的数据行进行锁定,又称为(共享读锁);

无论是哪一种都会对高并发产生性能影响,oracle对读取没有进行加锁,那他又是如何做的呢,现假如一个表结构如下:

create table t_name (c_id number ,c_num number );
--并且插入三条测试数据
insert into t_name values (1,300);
insert into t_name values (2,400);
insert into t_name values (3,500);

--现在有 一个查询需要计算总的分数为多少
select sum(c_num) from t_name;

sum(c_num)
---------------
  1200

 高并发环境下,阻塞读取是当查询到第二条数据的时候,另外一个线程将c_id为1的分数减掉150,并且附加到c_id=3的记录上;

 

当查询到第三条数据(c_id=3)的时候,由于数据更新给c_id=3的记录进行了加锁,所以查询被阻塞了!等待锁的释放,之后查询得到c_num = 650;

 

--现在有 一个查询需要计算总的分数为多少
select sum(c_num) from t_name;

sum(c_num)
---------------
  1350

 在oracle中,查询到c_id=3,发现存在数据修改(数据被加锁了)!那么他会回到查询c_id=1的时间点上,然后从回滚段中获取c_id=3的数据 c_num=500;数据是否加锁不会对其产生影响! 最后的查询结果:

--现在有 一个查询需要计算总的分数为多少
select sum(c_num) from t_name;

sum(c_num)
---------------
  1200

 

分享到:
评论

相关推荐

    mysql和oracle的区别

    ### MySQL与Oracle数据库的主要区别 #### 一、并发性 **MySQL**的并发处理主要依赖于不同的存储引擎。...总体而言,MySQL在SQL语句的便捷性和灵活性方面更具优势,而Oracle则在数据一致性、并发处理等方面更为强大。

    《Oracle9i&10g编程艺术》学习心得

    Oracle数据库通过多种机制保证读一致性的同时,还能实现非阻塞读。 **1. 读一致性:** 读一致性是指查询过程中看到的数据状态始终如一。Oracle通过多版本并发控制(MVCC)机制来实现这一特性,即每个事务都能看到其...

    Oracle Concepts 10g R2 pdf 中英文对照版

    - **一致性读**:Oracle提供了一种称为“一致性读”的特性,使得用户可以在不阻塞其他事务的情况下读取数据。 #### 14. 可管理性 - **自动管理**:Oracle通过自动诊断资源管理器(ADDM)等工具提供了自动化管理的...

    Oracle9i&10g编程艺术:深入数据库体系结构.pdf

    7. **并发与多版本**:研究了并发控制机制和多版本读一致性。 - **事务隔离级别**:详细介绍了不同级别的隔离性和其应用场景。 - **多版本读一致性**:解析了Oracle如何处理多版本数据的一致性问题。 - **写一致...

    Oracle 9i&10g编程艺术

    Oracle数据库采用多版本读一致性(Multi-Version Read Consistency)机制,允许不同事务同时读取同一数据的不同版本。这避免了读取操作对写入操作的阻塞,提升了并发处理能力。具体而言,当一个事务开始时,它可以看到...

    ORACLE学习心得

    多版本并发控制是Oracle的核心,保证了事务的一致性和并发性。游标管理与数据量无关,它在打开时确定了获取的数据,不受后续数据变化的影响。 总的来说,Oracle数据库的学习和优化是一个持续的过程,需要深入理解...

    事物处理与并发控制

    - Oracle通过锁和多版本并发控制来平衡并发性和数据一致性。锁机制防止数据冲突,而MVCC允许非阻塞读取,提高了并发性能。 - SET TRANSACTION语句允许设置事务的隔离级别,以适应不同的应用需求。例如,READ ONLY...

    Expert one on one Oracle.pdf

    - **分布式事务**:探讨了跨多个数据库或资源管理器的事务处理机制,以及Oracle如何支持这类复杂场景下的事务一致性。 ### 5. 重做与回滚 - **重做日志**:阐述了重做日志在事务提交过程中的作用,以及它是如何...

    oracle 内存分析

    9. **锁信息**:非进程控制的锁信息,例如用于保护数据一致性的一些内部锁。 ##### SGA的重要参数: - **DB_CACHE_SIZE**:设置数据缓冲区的大小。 - **LOG_BUFFER**:设置重做日志缓冲区的大小。 - **SHARED_POOL...

    Oracle Locking Survival Guide

    4. **多版本并发控制(MVCC)**:Oracle的Read Committed和Read Repeatable Read隔离级别利用MVCC实现非阻塞读操作,从而提高并发性能。 为了优化锁定性能,可以考虑以下策略: 1. **适当设计事务**:尽量减少事务...

    LINUX下ORACLE11GR2安装GRID依赖包

    2. **集群支持**:Oracle GRID Infrastructure依赖于`libaio`来提供高效的数据同步和通信机制,确保在集群环境中各个节点之间的数据一致性。 安装这两个RPM包的步骤如下: 1. 首先,确保你的Linux系统支持`i386`...

    oracle与sql_server的区别

    Oracle通过使用回退段有效地避免了此类阻塞,确保事务间的独立性和一致性。 ### 外键约束 在处理外键约束时,SQL Server允许级联删除和级联更新,而Oracle仅支持级联删除。这意味着在SQL Server中,当主表中的记录...

    oralce编程艺术

    - 讨论事务的特性,包括原子性、一致性、隔离性和持久性,以及多版本并发控制(MVCC)如何支持非阻塞读操作。 #### 分区与并行 - 阐释分区技术如何提高大型数据集的管理效率,以及并行处理如何加速数据处理速度。 #...

    Oracle数据库面试题.pdf

    40. **读一致性和多版本并发控制**: - **读一致性**:保证不同事务读取的数据一致性。 - **多版本并发控制**:通过保留旧数据版本支持并发操作。 #### 三、高级知识(41-60) 41. **实例的启动与关闭过程**: ...

    db2与oracle差别.pdf

    Oracle 支持一些非 SQL 标准的数据类型,例如 VARCHAR2,这些是不被 DB2 支持的;另外,Oracle 中的日期、时间格式和 DB2 中相应类型在语义上不完全一致;最后 Oracle 的 PL/SQL 存储过程所支持的一些标量数据类型在...

    Oracle--vb代码.rar

    9. 异步操作:在VB.NET版本中,可以利用异步编程模型(如`Async`和`Await`关键字)实现非阻塞的数据库操作,提高用户体验。 10. Oracle特有函数:Oracle数据库提供了一些特有的函数,如TO_DATE、TO_CHAR等,VB代码...

Global site tag (gtag.js) - Google Analytics