热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

模拟bufferbusywaits等待事件

SQLcreatetablebuffer_busy(idnumber,namevarchar2(20));表已创建。SQLinsertintobuffer_busyvalues

 SQL> create table buffer_busy(id number,name varchar2(20));

表已创建。
SQL> insert into buffer_busy values(1,'robinson');

已创建 1 行。

SQL> insert into buffer_busy values(2,'robinson');

已创建 1 行。

SQL> commit;

提交完成。

session 1中
SQL> select sid from v$mystat where rownum=1;

       SID
----------
       150

begin
 
 for i in 1..10000 loop
    update buffer_busy set name='luoluo' where id=1;
    commit;
   end loop;
end;
/

session 2中
SQL> select sid from v$mystat where rownum=1;

       SID
----------
       147
begin
 
 for i in 1..10000 loop
    update buffer_busy set name='luoluo' where id=2;
    commit;
   end loop;
end;
/
session 3中运行如下查询语句
SQL> select event,sid,p1,p2,p3 from v$session_wait_history where sid in(150,147);

EVENT                                                                   SID         P1         P2      P3
---------------------------------------------------------------- ---------- ---------- ---------- ----------
buffer busy waits                                                       147          5         28       1
buffer busy waits                                                       147          5         28       1
buffer busy waits                                                       147          5         28       1
buffer busy waits                                                       147          2        105      29
buffer busy waits                                                       147          2         89      27
buffer busy waits                                                       147          5         28       1
buffer busy waits                                                       147          5         28       1
SQL*Net message to client                                        147 1111838976          1       0
log file sync                                                                147       4380          0       0
buffer busy waits                                                       147          5         28       1
buffer busy waits                                                       150          5         28       1
buffer busy waits                                                       150          5         28       1
buffer busy waits                                                       150          5         28       1
buffer busy waits                                                       150          5         28       1
buffer busy waits                                                       150          5         28       1
buffer busy waits                                                       150          2        137      33
SQL*Net message to client                                        150 1111838976          1       0
log file sync                                                                150       5715          0       0
buffer busy waits                                                       150          5         28       1
buffer busy waits                                                       150          5         28       1

SQL> select * from v$waitstat where count>0;

CLASS                   COUNT       TIME
------------------ ---------- ----------
data block               2107          0
undo header               385          0
undo block                  3          0

直接查询v$session_wait可能查不出什么,因为10000次循环很快就过了,如果想要通过v$session_wait直接查询到buffer busy waits 等待事件
可以将循环次数增加到100000次,我这里就不做了。

可以通过如下语句查询出造成该等待事件的SQL,但是如果该等待事件不是很显著,一闪而过,下面的SQL就不能查询到了,而我这个实验确实不能查询到什么
select sql_text from V$sqlarea  where (address,hash_value) in (select sql_address,sql_hash_value from v$session  where event like '%buffer busy%');

我们可以观察上面等待事件的参数p1,p2,p3,这里p1绝大部分为5,p2绝大部分为28,p3大部分为1,由于数据库是10g,p3代表的是v$waitstat中class列的block id,这里p3为1,说明是data block.通过如下语句找出可疑的对象
SQL> select owner,segment_name,segment_type,block_id from dba_extents where file_id=5 ;

OWNER                          SEGMENT_NAME                                                              SEGMENT_TYPE         BLOCK_ID
------------------------------ --------------------------------------------------------------------------------- ------------------ ----------
ROBINSON                       TEST                                                                      TABLE                       9
ROBINSON                       ROBINSON                                                                  TABLE                      17
ROBINSON                       BUFFER_BUSY                                                               TABLE                      25
我们能确定引起buffer busy waits等待事件的对象是ROBINSON.BUFFER_BUSY,因为只有buffer_busy这个表的block_id最接近28
然后我们可以通过如下查询
SQL> select sql_text from v$sqlarea where sql_text like '%buffer_busy%';

SQL_TEXT
--------------------------------------------------------------------------------------------------------------------

begin   for i in 1..10000 loop     update buffer_busy set name='luoluo' where id=1;     commit;    end loop; end;
begin   for i in 1..10000 loop     update buffer_busy set name='luoluo' where id=2;     commit;    end loop; end;

select sql_text from v$sqlarea where sql_text like '%buffer_busy%'
SQL> select sql_text from v$sqlarea where sql_text like '%BUFFER_BUSY%';

SQL_TEXT
------------------------------------------------------------------------------

select sql_text from v$sqlarea where sql_text like '%BUFFER_BUSY%'
UPDATE BUFFER_BUSY SET NAME='luoluo' WHERE ID=2
UPDATE BUFFER_BUSY SET NAME='luoluo' WHERE ID=1
到这里我们就能够发现引起buffer busy waits等待事件的SQL了。

转:https://www.cnblogs.com/hehe520/archive/2009/11/24/6330673.html



推荐阅读
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
author-avatar
GZJYGZJYGZJY
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有