平台人生
作者平台人生·2016-12-16 15:19
软件开发工程师·平台人生

数据库使用中的陷阱之DDL操作

字数 738阅读 4806评论 0赞 0

作者韩涛
文章来自微信公众号平台人生


今天隆重介绍数据库中的一个重量级陷阱-DDL操作。在ORACLE数据库中,通常将更改对象定义的操作成为DDL操作,例如:ALTER TABLE、DROP、SPLIT、新建分区等表的分区操作、统计信息收集及拷贝等。如果数据库中DDL操作非常频繁的话,那就要特别注意了,DDL操作有可能造成业务阻塞的情况发生!以删除分区为例,当分区表中存在全局索引时,由于手工指定维护全局索引,DDL操作执行时间就会比较长。对数据库的影响如下:

  1. 在删除分区过程中,如果对同一对象获取X类型锁的操作,会出现library cache lock等待,且无超时;申请X锁操作会导致后续访问该对象DML语句和SELECT语句也产生library cache lock等待,直到删除分区即DDL操作完成,DDL执行时间越长产生影响越大。
  2. 在执行DROP PARTITION的过程中,即使无其他申请X锁的操作,删除的分区也不能进行相关DML语句,会产生TM锁等待,且无超时。
    如果出现问题的对象比较关键,那么麻烦就比较大了!那么如何避免这种情况发生呢?首先,在数据库中应该尽量减少并且错开DDL操作,尤其在业务高峰时段;同时应该尽量缩短DDL操作时间,比如分区表尽量不使用全局索引等;其次,如果DDL操作必须执行,那么应该尽量选择业务低峰时段操作,并注意错开DDL操作。第三,数据库收集统计信息自动任务也会申请获取X类型锁,所以在默认的统计信息窗口内部还是尽量不要进行DDL操作为好。如果选择通过手工调整统计信息自动任务的执行窗口来避开DDL操作,则需要考虑时间段变化后数据库表的数据量、数据分布与以前可能不一样,从而引发执行计划改变的情况。不要忘记统计信息也是一个可怕的陷阱啊!

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

本文隶属于专栏

作者其他文章

相关文章

相关问题

相关资料

X社区推广