• oracle阻塞问题


    引起Oracle阻塞的原因

    1、select for update

    2、外键没有创建索引
        (1)主表上有频繁的删除操作
        (2)主键上有频繁的修改操作
        (3)业务上经常会出现主表和从表进行关联查询

    当第一个和第二个条件操作的时候,主表会在从表上创建一个锁定,以保证主表主键的修改不会导致从表的数据在引用上不会出现问题。

    如果经常对主表的主键进行修改都将导致从表被长时间锁定。比如主表每次删除1000条记录,它将扫描从表1000次,以确定每一行记录的改变

    不会造成从表的引用不完整。因此,在从表的外键上应该创建索引。

    oracle阻塞和锁

    1.没有并发,就没有锁。

    数据库中,并发的意思是超过两个(含)以上的用户对同样的数据进行修改(包括插入、修改、删除),并行的意思是将一件事情分成很多小的部分,让每一部分同时执行,最后将执行结果进行汇总。并发和并行是不同的,没有并发,就没有锁。这里主要介绍TM锁和TX锁。

           其实,TM锁更像是一个段级的锁,通常我们叫它表锁,是因为我们把这个表看成了一个段。当某个表中有几个段的时候,可能一个段上有TM锁,而另外的段中没有TM锁(可以进行DDL操作)。TX锁实际上应该叫做事务锁,它主要是为了维护是事务的一致性,从这个角度来看,TX锁并非都是在对数据进行修改时才产生的,只要需要维护事务的一致性,就需要用到该锁。例如分布式事务,一般来说就是通过dblink在几个数据库中处理数据,因为是分布式的操作方式,所以需要一个事务的总协调者,这时候即使都是读取操作,依然需要一个TX锁来维护事务的一致性。

        Oracl中锁的信息是数据库的一个属性,是物理的,并不是逻辑上属于某个表或者某个行。在TX锁中,id1和id2构成了事务在回滚段中的位置。它(id1和id2)的用处是,当其他操作需要读取这个数据块时,会发现这个数据块上有活动的事务,因此需要到回滚段中去找该数据库之前的内容,那么这些内容在回滚段的什么地方?这两个值就告诉了你。对于TM锁,id1就是加锁的段对象,可以是一个表或者表上的一个分区,id2一般为0。

    2.select  for update (no wait)

    3.外键和索引

    如果系统中有主、外键引用关系,并且满足以下情况之一,那么就应该考虑在外键字段中创建索引,以提高系统性能。

    *主表上有频繁的删除操作

    *主表上有频繁的修改操作

    *业务上经常对主表和从表进行关联查询

  • 相关阅读:
    DataGrip破解,汉化. 再见navicate, 再见sqlyog
    centOS安装JIRA 破解版 亲测
    centOS yum 安装 JDK
    CentOS No manual entry for xxx 没有手册文档
    idea集成JRebel热部署破解
    springboot 拦截器取不到 ajax跨域请求的header参数
    centOS安装ELK
    产品经理的”影响力“
    系统设计的一些心得
    EXIF.Js:读取图片的EXIF信息
  • 原文地址:https://www.cnblogs.com/zgyw/p/12320351.html
Copyright © 2020-2023  润新知