暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

线程竞争

原创 2023-05-02
424
  1. 分析等待事件,找出瓶颈。

    a. 使用各种性能分析工具, 如AWR报告、实时监控、Trace等等找到线程竞争的问题;

     -- 举例:使用AWR报告获取等待事件
     SELECT event, total_waits, time_waited_micro/1000000 AS "Wait_secs", 
            round(time_waited_micro/1000/decode(total_waits,0,1,total_waits)) AS "Avg_ms/wait"
     FROM dba_hist_system_event
     WHERE event LIKE 'enq: %' AND time_waited_micro > 0
     ORDER BY time_waited_micro DESC;
    

    b. 监控等待事件, 在确定瓶颈点之前,需要先了解哪些进程在等待。

     -- 举例:查询正在等待锁定的进程
     SELECT s.sid, s.username, l.type, l.request, l.lmode, l.block, l.ctime
     FROM v$lock l JOIN v$session s ON(l.sid=s.sid)
     WHERE block=1;
    
  2. 调整应用程序以减少锁定或资源争用。

    a. 应用程序架构调整,采用尽可能寻找让数据更好地被共享的技术;

     -- 举例:使用乐观锁控制并发访问
     UPDATE table_name SET value = new_value, version = next_version
     WHERE primary_key = old_primary_key AND version = old_version;
    

    b. 对于必须使用锁的场景,如序列,可以考虑采用行级锁替换表级锁,并制定合理的释放策略。

     -- 举例:使用行级锁实现并发访问
     SELECT * FROM table_name WHERE primary_key = key_value FOR UPDATE NOWAIT;
    
  3. 调整参数如INITRANS和MAXTRANS,以减少事务等待。

    a. 正确配置参数如INITRANS和MAXTRANS很有必要去减少对资源的等待时间;

     -- 举例:调整INITRANS和MAXTRANS值来提高效率
     ALTER TABLE table_name INITRANS 5 MAXTRANS 10;
    

    b. 合适的设置过渡期(“transitional period”)并逐步实验是保证真正的应用前最好的选择。

  4. 考虑使用分区、并行操作或其他优化技术来减少竞争。

    a. 分区增加全局索引, 并提高查询效率;

     -- 举例:创建分区表以支持高效分析
     CREATE TABLE sales
     ( year       NUMBER(4),
       month      NUMBER(2),
       day        NUMBER(2),
       product    VARCHAR2(20),
       region     VARCHAR2(20),
       amount_sold NUMBER(10,2)
     )
     PARTITION BY RANGE(year)
     INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
     (PARTITION p1 VALUES LESS THAN (2008),
      PARTITION p2 VALUES LESS THAN (2009),
      PARTITION p3 VALUES LESS THAN (2010));
    

    b. 并行操作可增加处理大量数据的效率,并利用所有可用CPU资源分摊线程压力。

     -- 举例:使用并行查询
     SELECT /*+PARALLEL(table_name, 4) */ * FROM table_name WHERE column_name = 'value';
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论