查看: 28770|回复: 113

[性能调整] 被误读的buffer busy waits系列问题讨论

[复制链接]
论坛徽章:
490
红宝石
日期:2014-04-05 19:53:18海蓝宝石
日期:2014-04-05 21:24:30数据库板块每日发贴之星
日期:2013-05-27 22:53:45生肖徽章:鸡
日期:2014-08-24 18:39:29青年奥林匹克运动会-羽毛球
日期:2014-09-24 08:37:59马上有房
日期:2015-01-03 10:23:28喜羊羊
日期:2015-03-04 14:54:422015年新春福章
日期:2015-03-06 11:59:47秀才
日期:2017-04-06 18:09:28版主6段
日期:2014-05-27 02:19:57
跳转到指定楼层
1#
发表于 2013-4-9 14:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 guoyJoe 于 2013-4-25 07:53 编辑

buffer busy waits的等待事件网上资料很多,很多人可能误读了buffer busy waits。puber们把你们对buffer busy waits等待事件的理解统统说出来,大家一起讨论学习,共同进步!
最好有实验步骤加以验证,可以让大家完完全全的彻底理解buffer busy waits。

讨论主题:
1、你能重现buffer busy waits等待吗?

2、重现buffer busy waits等待之后,你抓住产生buffer busy waits 的原凶了吗?

3、加大log buffer会减少buffer busy waits等待吗?

4、找到原凶之后如何优化buffer busy waits等待?


讨论时间:2013.4.9--2013.4.21

活动奖励:活动结束后将会抽取三位会员赠送《SQL 语言详解》图书一本。


获奖人员:blacksheep119,yindi002,AnddyHua





论坛徽章:
490
红宝石
日期:2014-04-05 19:53:18海蓝宝石
日期:2014-04-05 21:24:30数据库板块每日发贴之星
日期:2013-05-27 22:53:45生肖徽章:鸡
日期:2014-08-24 18:39:29青年奥林匹克运动会-羽毛球
日期:2014-09-24 08:37:59马上有房
日期:2015-01-03 10:23:28喜羊羊
日期:2015-03-04 14:54:422015年新春福章
日期:2015-03-06 11:59:47秀才
日期:2017-04-06 18:09:28版主6段
日期:2014-05-27 02:19:57
2#
 楼主| 发表于 2013-4-9 14:03 | 只看该作者
本帖最后由 guoyJoe 于 2013-4-20 22:33 编辑

1、你能重现buffer busy waits等待吗?
测试DB版本11g:
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production


(一)、用Dtrace +mdb跟踪模拟buffer busy waits等待事件
SQL> select sid from v$mystat where rownum=1;
       SID
----------
       125
SQL> select spid from v$session s,v$process b where s.paddr=b.addr and s.sid in(select sid from v$mystat where rownum=1);
SPID
------------------------
1887
SQL> select rowid,name from t1 where id=1;
ROWID              NAME
------------------ ----------
AAASTVAAGAAAACnAAA BBBBBB
SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from t1;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------ ------------------------------------
                                   6                                  167
SQL> select hladdr from x$bh where file#=6 and dbablk=167;
HLADDR
----------------
00000003A41E4080
00000003A41E4080


(二)、再开一个窗口用mdb设mdb断点
-bash-3.2# mdb -p 1887

(三)、再回到125号会话:对 rowid='AAASTVAAGAAAACnAAA'这条记录做修改
update t1 set name='BBBBBB' where rowid='AAASTVAAGAAAACnAAA';
这时已被阻塞

(四)、接第二步骤开始用mdb跟踪
Loading modules: [ ld.so.1 libc.so.1 ]
> sskgslcas :b
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> sskgsldecr :b
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgsldecr
mdb: target stopped at:
sskgsldecr:     lock subq %rsi,(%rdi)
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> :c
mdb: stop at sskgsldecr
mdb: target stopped at:
sskgsldecr:     lock subq %rsi,(%rdi)
> :c
mdb: stop at sskgslcas
mdb: target stopped at:
sskgslcas:      movq   %rsi,%rax
> ::step
mdb: target stopped at:
sskgslcas+3:    lock cmpxchgq %rdx,(%rdi)

(五)、打开144号会话:查询rowid='AAASTVAAGAAAACnAAA'的这行记录
SQL> conn gyj/gyj
Connected.
SQL> select distinct sid from v$mystat;
       SID
----------
       144
SQL> select * from t1 where rowid='AAASTVAAGAAAACnAAA';

这时查询被阻塞

(六)、打开138号会话:观察等待事件
SQL> select sid,event,total_waits,time_waited_micro from v$session_event where lower(event)  like 'buffer%';
       SID EVENT
---------- ---------------------------------
TOTAL_WAITS TIME_WAITED_MICRO
----------- -----------------
       144 buffer busy waits
          1           7005803
重现了buffer busy waits等待事件

2、重现buffer busy waits等待之后,你抓住产生buffer busy waits 的原凶了吗?

buffer busy waits 的原凶是:写阻塞读的原因!

3、加大log buffer会减少buffer busy waits等待吗?

一、当log_buffer=5210112时分别在两会话上跑SQL,产生buffer busy waits等事
1.查当前的log_buffer大小,即为5M
sys@OCM
> show parameter log_buffer;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_buffer                           integer     5210112


2.分别在两会话上跑sql
begin
for i in 1 .. 500000 loop
   update t1 set id=id+0 where rowid='AAAS1wAADAAAAFUAAA';
   commit;
  end loop;
end;
/

declare
  m_name varchar2(50);
begin
  for i in 1..500000 loop
     select name into m_name from gyj.t1 where rowid='AAAS1wAADAAAAFUAAA';
  end loop;
end;
/


3.产生的buffer busy waits等事
sys@OCM> sys@OCM> select sid,event,total_waits,time_waited_micro from v$session_event where event in('log buffer
space','buffer busy waits') and sid in(141,24);

       SID EVENT                                                            TOTAL_WAITS TIME_WAITED_MICRO
---------- ---------------------------------------------------------------- ----------- -----------------
        24 buffer busy waits                                                      14915          13445559
        24 log buffer space                                                          41          12871945
       141 buffer busy waits                                                       1866            554125
       141 log buffer space                                                          31          14763344


二、当log_buffer=40960000时分别在两会话上跑SQL,产生buffer busy waits等事
1.  修改log_buffer=5210112为20480000
   
sys@OCM> alter system set log_buffer=20480000 scope=spfile;
   
sys@OCM> startup force;
   
sys@OCM> show parameter log_buffer
   NAME                                 TYPE        VALUE
   ------------------------------------ ----------- ------------------------------
    log_buffer                           integer     20480000


2.分别在两会话上跑sql
begin
for i in 1 .. 500000 loop
   update t1 set id=id+0 where rowid='AAAS1wAADAAAAFUAAA';
   commit;
  end loop;
end;
/

declare
  m_name varchar2(50);
begin
  for i in 1..500000 loop
     select name into m_name from gyj.t1 where rowid='AAAS1wAADAAAAFUAAA';
  end loop;
end;
/

  3.产生buffer busy waits等事
sys@OCM> select sid,event,total_waits,time_waited_micro from v$session_event where event in('log buffer
space','buffer busy waits') and sid in(142,20);

       SID EVENT                                                            TOTAL_WAITS TIME_WAITED_MICRO
---------- ---------------------------------------------------------------- ----------- -----------------
        20 buffer busy waits                                                      17259           7585360
       142 buffer busy waits                                                       4902           1343520


三、对步骤一与步骤二对比
  
sys@OCM> sys@OCM> select sid,event,total_waits,time_waited_micro from v$session_event where event in('log buffer
space','buffer busy waits') and sid in(141,24);

       SID EVENT                                                            TOTAL_WAITS TIME_WAITED_MICRO
---------- ---------------------------------------------------------------- ----------- -----------------
        24 buffer busy waits                                                      14915          13445559
        24 log buffer space                                                          41          12871945
       141 buffer busy waits                                                       1866            554125
       141 log buffer space                                                          31          14763344
  

sys@OCM> select sid,event,total_waits,time_waited_micro from v$session_event where event in('log buffer
space','buffer busy waits') and sid in(142,20);

       SID EVENT                                                            TOTAL_WAITS TIME_WAITED_MICRO
---------- ---------------------------------------------------------------- ----------- -----------------
        20 buffer busy waits                                                      17259           7585360
       142 buffer busy waits                                                       4902           1343520

比较TIME_WAITED_MICRO,明显是步骤一的比步骤二的大。步骤一的log_buffer=5M ,步骤二的log_buffer=20M
说明步骤二的buffer busy waits的等待时间少。即增大log_buffer可以减少buffer busy wait等待的时间。




4、找到原凶之后如何优化buffer busy waits等




buffer busy waits优化的重点是写,即写操作的时间更快一点或着写操作的次数更少一点!!!








使用道具 举报

回复
论坛徽章:
70
夏利
日期:2013-09-29 21:02:15天蝎座
日期:2016-03-08 22:25:51嫦娥
日期:2014-03-04 16:46:45ITPUB年度最佳技术原创精华奖
日期:2014-03-04 16:19:29马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:11
3#
发表于 2013-4-9 14:08 | 只看该作者
期待大家的精彩总结,

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
4#
发表于 2013-4-9 14:09 | 只看该作者
占楼!

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
3
ITPUB社区千里马徽章
日期:2013-08-22 09:58:03问答徽章
日期:2014-04-02 13:20:04马上有对象
日期:2014-12-21 11:18:07
5#
发表于 2013-4-9 14:10 | 只看该作者
占位,期待总结。

使用道具 举报

回复
论坛徽章:
1
ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:33
6#
发表于 2013-4-9 14:15 | 只看该作者
俺也来凑个热闹哈。

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
7#
发表于 2013-4-9 14:16 | 只看该作者
ORACLE高深莫测的技术,期待总结

使用道具 举报

回复
论坛徽章:
0
8#
发表于 2013-4-9 14:17 | 只看该作者
先占个位置

使用道具 举报

回复
论坛徽章:
123
红孩儿
日期:2006-09-26 17:31:45玉兔
日期:2007-04-09 12:06:45生肖徽章:猪
日期:2007-09-14 17:25:47玉兔
日期:2007-09-26 17:05:03会员2007贡献徽章
日期:2007-09-26 18:42:10嫦娥
日期:2007-11-03 11:38:11红孩儿
日期:2007-11-06 12:16:39铁扇公主
日期:2007-11-08 13:16:21Heart of PUB
日期:2007-11-30 08:21:32嫦娥
日期:2007-12-17 11:19:57
9#
发表于 2013-4-9 14:18 | 只看该作者
凑热闹

使用道具 举报

回复
论坛徽章:
3
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:512014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08
10#
发表于 2013-4-9 14:18 | 只看该作者

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表