添加索引导致微服务异常

一、现象

某app部分功能不可用,提示“连接服务器超时,请稍后尝试”。

二、分析

1、分析发现数据库存在大量的TM争用。

        

2、继续分析发现存在TM行锁的阻塞会话主要是以下几个:

3、查看其阻塞源头是1940

4、而1940进程在这个时间段是在跑新增索引的操作,造成TM锁阻塞

该表有1.9亿条记录,索引创建时间会比较长。    

而在新增索引的时候会有TM锁,而该表又有大量的insert、update等,因此会对这些dml语句造成阻塞。

三、解决

1、将该新增索引的语句停掉,阻塞消失。

2、在新增索引的时候加online参数,而online产生的TM锁时间比较短。

     执行DDL时,最好使用ONLINE选项,随着oracle版本升级,online状态下可执行的DDL逐步增加,大部分普通DDL上,可以使用ONLINE选项,例如

   online选项执行create index命令,不是以shared模式,而是以sub-shared(ss)(意向共享锁)模式获得TM锁的这句话的解释是:

    创建索引的时候获取的TM锁的模式是SS模式(sub-shared)  v$lock中lmod 是2;

    对表做DML获取的TM锁的模式是SX(Sub-exclusive)  v$lock 中lmod是4;

    两种模式sub-shared 和 sub-exclusive 可以共享性。

       普通创建索引的命令create index会先锁表,然后再创建索引,如果表中数据量很大,会造成阻塞DML语句。

加了online后,可以以非独占的方式创建和删除索引。

但是加online字段有一些限制:

ONLINE

Specify ONLINE to indicate that DML operations on the table will be allowed during creation of the index.

Restrictions on Online Index Building

Parallel DML is not supported during online index building. If you specify ONLINE and then issue parallel DML statements, Oracle returns an error.

You cannot specify ONLINE for a bitmap index or a cluster index.

You cannot specify ONLINE for a conventional index on a UROWID column.

For a unique index on an index-organized table, the number of index key columns plus the number of primary key columns in the index-organized table cannot exceed 32.

翻译如下:

在创建索引的过程中指定ONLINE参数

四、建议

1、对大表新增索引尽量停业务,就算加上online不会造成阻塞,但对性能也有影响,特别是这种性能敏感的系统。

可在检修停业务的情况下通过并行快速创建索引。

2、在生产数据库务必一定使用online方式创建索引。

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值