ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在高并发和高负载环境下的数据维护

在高并发和高负载环境下的数据维护

原创 Linux操作系统 作者:mayitong 时间:2008-07-13 22:58:36 0 删除 编辑

        有的时候在数据维护的时候,往往会导致一些非常严重的逻辑性错误,例如避免丢失更新,千万不要认为update中a.userid=b.userid就万事大吉。如果一定要用游标方式来进行更新,切记使用临时表来做循环,而不用原表来实现循环,以最大限度的避免ORA-01555错误的发生。

        另外在高并发环境下,对于DDL操作一定要慎之又慎,比如对一个表增加约束,如果操作不慎可能会阻塞select 语句的操作,因为此时在share pool解析语句的时候,不能获得对象的句柄,因此造成了library cache pin的等待事件,语句处于等待解析过程中,从而阻塞了读。可以有两种方法来解决该问题:

      1.online创建一个唯一索引,然后增加约束,使用using index index_name选项,这样在删除约束的时候会自动删除索引。

      2.创建非唯一索引,然后增加约束,使用using index index_name novalidate,这个过程中不会阻塞读,最后alter table  ....modify constraint constraint_name validate。

      上面提到了增加索引,增加索引可能导致应用走了错误的执行计划,如果新建立的索引没有分析,这就会导致一些SQL语句认为这个执行计划会更好,要解决这样的问题,只要在建立索引的时候增加compute statistics就可以了;但是如果你要修改一个索引的列,不能只就drop原来的索引,再增加一个新的索引,如果哦表很大的话,就可能导致在新的索引建立好之前,相关的应用无法使用该索引,比较好的办法是,先online方式创建并分析索引,然后drop index,最后rename to,这样对应用的影响就小的多了。直方图的建立建议建立在比较恒定的列上,不要建立在日期型的列上,并且该列上发生很多update操作。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/48620/viewspace-400044/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-07-06

  • 博文量
    43
  • 访问量
    73649