查看: 22852|回复: 59

[精华] 请教:v$sqlarea中的问题

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
跳转到指定楼层
1#
发表于 2003-5-9 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于有条sql运行特别慢,所以在v$sqlarea跟踪。
select disk_reads,buffer_gets, sql_text from v$sqlarea
发现有一个sql的disk_reads,buffer_gets特别大.分别为14920757    15014272
请问:这两个参数的单位时bytes还是block?
如果根据这两个参数来调整db_block_buffer?

论坛徽章:
26
ITPUB元老
日期:2005-02-28 12:57:00生肖徽章:兔
日期:2006-09-26 21:29:55生肖徽章:兔
日期:2006-09-07 17:01:32生肖徽章:兔
日期:2006-09-07 17:02:25生肖徽章:兔
日期:2006-09-07 17:02:46生肖徽章:兔
日期:2006-09-07 17:06:29生肖徽章:兔
日期:2006-09-18 05:26:00生肖徽章:狗
日期:2006-10-06 13:28:27生肖徽章:狗
日期:2006-10-08 05:28:34生肖徽章2007版:鸡
日期:2008-01-02 17:35:53
2#
发表于 2003-5-9 16:35 | 只看该作者
应该是block吧

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
3#
发表于 2003-5-9 16:40 | 只看该作者
把sql语句贴出来看看

使用道具 举报

回复
论坛徽章:
0
4#
发表于 2003-5-9 17:15 | 只看该作者
不是BYTE也不是BLOCK,是次数。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
5#
发表于 2003-5-9 17:50 | 只看该作者

是 blocks*读

但可能是累积的

所以这个不能说明问题
得要看 执行过多少次 来看平均数

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
6#
 楼主| 发表于 2003-5-10 09:16 | 只看该作者

这个SQL一般每天要跑一遍,难道ORACLE都把他加起来?

数据库是7.3.4的。OS:IBM AIX , S7A ,4CPU ,2G MEM.
我觉得速度慢会不会跟数据库的内存配置有关。
这个数据库的SHARED_POOL_SIZE=500M,db_block_buffers=20000,db_block_size=4k,但shared_pool的实际使用也就30来M,而db_block_buffers的hit radio只有85%。

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
7#
发表于 2003-5-11 10:52 | 只看该作者
最初由 db1 发布
[B]不是BYTE也不是BLOCK,是次数。 [/B]


That's right.

BTW, v$sqlarea should not be used unless you want to look at the parent cursor only (in case there're child cursors). v$sql should be used instead, for performance reason. v$sqlarea.optimizer_mode will show 'MULTIPLE CHILDREN PRESENT' if the cursor has child cursors.

Yong Huang

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
8#
发表于 2003-5-11 11:14 | 只看该作者

我想这个问题应该明确下

buffer_gets

单位应该是   blocks * 读

假如一个full  table scan 读了10个block,则 buffer_gets = 10
假如是 通过index  获取数据,可能是  buffer_gets > 10 ,跟获取数据量和  block 中容纳数据条数 和数据的有序程度有关

片面的说成是 blocks  或者 次数  都是不确切的,应该参考  consistent gets 的意义 ?

使用道具 举报

回复
论坛徽章:
5
数据库板块每日发贴之星
日期:2005-09-17 01:01:28数据库板块每日发贴之星
日期:2005-09-18 01:01:30会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2006-10-06 10:48:17授权会员
日期:2006-10-06 10:49:40
9#
发表于 2003-5-11 12:38 | 只看该作者
两个参数的单位应该多不是bytes,block,要根据你的语句才能看的出

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
10#
发表于 2003-5-11 13:17 | 只看该作者

我们可以看出

buffer_gets =  consistent get +  db block gets  =  logic  IO



SQL> alter system flush shared_pool;

System altered.

SQL> set autotrace on
SQL> select count(*) from t;

  COUNT(*)
----------
     25374


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=12 Card=1)
   1    0   SORT (AGGREGATE)
   2    1     INDEX (FAST FULL SCAN) OF 'T_INDEX' (NON-UNIQUE) (Cost=1
          2 Card=25376)





Statistics
----------------------------------------------------------
        242  recursive calls
          4  db block gets
        132  consistent gets   132 + 4 = 136
         80  physical reads
          0  redo size
        369  bytes sent via SQL*Net to client
        425  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          5  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> set autotrace off
SQL> select buffer_gets,disk_reads from v$sqlarea where sql_text like 'select count(*) from t%';

BUFFER_GETS DISK_READS
----------- ----------
        136         80       132 + 4 = 136

SQL> select count(*) from t;

  COUNT(*)
----------
     25374
SQL> select count(*) from t;

  COUNT(*)
----------
     25374


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=12 Card=1)
   1    0   SORT (AGGREGATE)
   2    1     INDEX (FAST FULL SCAN) OF 'T_INDEX' (NON-UNIQUE) (Cost=1
          2 Card=25376)





Statistics
----------------------------------------------------------
          0  recursive calls
          4  db block gets
         78  consistent gets   78 + 4 = 82
          0  physical reads
          0  redo size
        369  bytes sent via SQL*Net to client
        425  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL>

SQL>  select buffer_gets,disk_reads from v$sqlarea where sql_text like 'select count(*) from t%';

BUFFER_GETS DISK_READS
----------- ----------
        218         80    136 + 82 = 218

SQL> select count(*) from t;

  COUNT(*)
----------
     25374

SQL>  select buffer_gets,disk_reads from v$sqlarea where sql_text like 'select count(*) from t%';

BUFFER_GETS DISK_READS
----------- ----------
        300         80    218 + 82 = 300


SQL>

使用道具 举报

回复

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

本版积分规则 发表回复

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