oracle dbfile数,通过案例学调优之--Oracle参数(db_file_multiblock_read_count)

通过案例学调优之--Oracle参数(db_file_multiblock_read_count)

应用环境:

操作系统: RedHat EL55

Oracle:   Oracle 10gR2

Oracle DB_FILE_MULTIBLOCK_READ_COUNT是Oracle比较重要的一个全局性参数,可以影响系统级别及sessioin级别。主要是用于设置最小化表扫描时Oracle一次按顺序能够读取的数据块数。通常情况下,我们看到top events中的等待事件db file scattered read时会考虑到增加该参数的值。

1、参数DB_FILE_MULTIBLOCK_READ_COUNT(MBRC)       参数DB_FILE_MULTIBLOCK_READ_COUNT简写为(MBRC)。

该参数是最小化表扫描的重要参数,用于指定Oracle一次按顺序能够读取的数据块数。理论上该值越大则能够读取的数据块越多。

实现全表扫描,索引全扫描及索引快速扫描所需的I/O总数取决于该参数,以及表自身的大小,是否使用并行等等。

Oracle 10gR2以后会根据相应的操作系统及buffer cache以最优化的方式来自动设定该参数的值。通常情况下该值为1MB/db_block_size。

在最大I/O为1MB的情况下,block的大小为8KB,则参数的值为128。如果在最大I/O为64KB,block为8KB,则参数的值为8。

对于OLTP和batch环境该参数的值为4到16,DSS环境应设置大于16以上或大的值。

该参数的变化对数据库性能产生整体性的影响,过大的设置会导致大量SQL访问路径发生变化,如原先的索引扫描倾向于使用全表扫描。

按照Oracle的建议在10g R2之后尽可能使用oracle自动设置的值。

2、参数DB_FILE_MULTIBLOCK_READ_COUNT与SSTIOMAX     In Release 9.2 and above; follow the explanation below:

Each version of Oracle on each port, is shipped with a preset maximum of how much data can be transferred in a single read (which of course is equivalent to the db_file_multiblock_read_count since the block size is fixed).

For 8i and above (on most platforms) this is 1Mb and is referred to as SSTIOMAX.

To determine it for your port and Oracle version, simply set db_file_multiblock_read_count to a nonsensical value and Oracle will size it down for you.

从上面的描述可知,Oracle 9.2之后,有一个名叫SSTIOMAX的东东,限制了MBRC的设置。

由于SSTIOMAX大多数平台最大单次I/O为1MB,db_block_size为8kb,因此MBRC参数的最大值通常为128。128*8kb=1mb。

对于设置大于1MB的情形,即MBRC*db_block_size>SSTIOMAX的情形,则设置的值并不生效,而是使用符合SSTIOMAX的最大MBRC值。

3、如何计算MBRC     The formula as internally used is as below:

db_file_multiblock_read_count = min(1048576/db_block_size , db_cache_size/(sessions * db_block_size))

设置DB_FILE_MULTIBLOCK_READ_COUNT以充分利用操作系统I/O缓冲区的大小。应考虑DB_FILE_MULTIBLOCK_READ_COUNT <= 操作系统I/O缓冲区 / Oracle Block的大小,如果DB_FILE_MULTIBLOCK_READ_COUNT设置的太大,会使优化器认为全表扫描更有效而改变执行计划,然后实际情况并非如此。

如果必须创建小的区间,创建其大小是操作系统I/O缓冲区大小的整数倍

设置区间尺寸大小的考虑思路应该是合理的利用Oracle的能力以便在全表扫描时执行多块存取,同时读操作又是不能跨区间的。举个例子,假设操作系统I/O缓冲区大小是64KB,考察读取一个640KB大小的表,如果设置为每个区间64KB,一共10个区间,如果执行全表扫描,则Oracle需要10次读操作(相当于一次读一个区间);如果设置为一个640KB的区间,则Oracle还是需要10次读操作(因为操作系统I/O缓冲区大小是64KB),可见压缩区间并不能提高性能;如果设置为每个区间80KB,一共8个区间,则每个区间Oracle需要读两次,第一次读64KB,第二次读这个区间剩余的16KB(读操作不能跨区间),所以总共需要16次读操作(相当于一次读一个区间)。区间尺寸的设置对性能的影响是显而易见的。

案例分析:

案例1

15:21:10 SYS@ test1 >show parameter mult

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_file_multiblock_read_count        integer     128

1)查看表中extent分配

14:46:03 SCOTT@ test1 >col segment_name for a20

14:46:15 SCOTT@ test1 >select segment_name,extent_id,bytes,blocks from user_extents

14:46:36   2   where segment_name=‘T1‘;SEGMENT_NAME          EXTENT_ID      BYTES     BLOCKS

-------------------- ---------- ---------- ----------

T1                            0      65536          8

T1                            1      65536          8

T1                            2      65536          8

T1                            3      65536          8

T1                            4      65536          8

T1                            5      65536          8

T1                            6      65536          8

T1                            7      65536          8

T1                            8      65536          8

T1                            9      65536          8

T1                           10      65536          8

T1                           11      65536          8

T1                           12      65536          8

T1                           13      65536          8

T1                           14      65536          8

T1                           15      65536          8

T1                           16    1048576        128

SEGMENT_NAME          EXTENT_ID      BYTES     BLOCKS

-------------------- ---------- ---------- ----------

T1                           17    1048576        128

T1                           18    1048576        128

T1                           19    1048576        128

T1                           20    1048576        128

T1                           21    1048576        128

22 rows selected.

2)配置10046进行分析14:48:00 SCOTT@ test1 >alter session set events ‘10046 trace name context forever,level 8‘;

Session altered.

14:48:57 SCOTT@ test1 >select count(*) from t1;

COUNT(*)

----------

5002

14:49:09 SCOTT@ test1 >alter session set events ‘10046 trace name context off‘;

Session altered.

3)查看trace文件

[[email protected] ~]$ more  /u01/app/oracle/diag/rdbms/test1/test1/trace/test1_ora_4160.trcWAIT #2: nam=‘db file sequential read‘ ela= 9 file#=11 block#=691 blocks=1 obj#=16394 tim=1408604404294713

WAIT #2: nam=‘Disk file operations I/O‘ ela= 26 FileOperation=2 fileno=4 filetype=2 obj#=16394 tim=1408604404294846

WAIT #2: nam=‘db file sequential read‘ ela= 9 file#=4 block#=143 blocks=1 obj#=16394 tim=1408604404294872

WAIT #2: nam=‘db file scattered read‘ ela= 23 file#=4 block#=157 blocks=3 obj#=16394 tim=1408604404294998

WAIT #2: nam=‘db file sequential read‘ ela= 8 file#=4 block#=164 blocks=1 obj#=16394 tim=1408604404295041

WAIT #2: nam=‘db file sequential read‘ ela= 8 file#=11 block#=727 blocks=1 obj#=16394 tim=1408604404295069

WAIT #2: nam=‘db file sequential read‘ ela= 8 file#=4 block#=183 blocks=1 obj#=16394 tim=1408604404295097

WAIT #2: nam=‘db file scattered read‘ ela= 33 file#=4 block#=187 blocks=5 obj#=16394 tim=1408604404295156

WAIT #2: nam=‘db file sequential read‘ ela= 8 file#=4 block#=199 blocks=1 obj#=16394 tim=1408604404295191

WAIT #2: nam=‘db file scattered read‘ ela= 51 file#=11 block#=153 blocks=8 obj#=16394 tim=1408604404295272

WAIT #2: nam=‘db file scattered read‘ ela= 50 file#=11 block#=203 blocks=8 obj#=16394 tim=1408604404295355

WAIT #2: nam=‘db file scattered read‘ ela= 52 file#=11 block#=213 blocks=8 obj#=16394 tim=1408604404295442

......

从以上文件可以看出,在“db file scattered read”中每次读取的数据块个数(blocks=8)不超过extent中blocks的大小(8个);在“db file sequential read”中每次读取的数据块个数(blocks)为1个。

案例2:

15:21:10 SYS@ test1 >show parameter mult

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_file_multiblock_read_count        integer     128

1)创建新的segment

15:08:28 SCOTT@ test1 >create table t2 (id int)

15:08:35   2  storage (initial 2048k next 2048k pctincrease 0);

Table created.

15:08:41 SCOTT@ test1 >col segment_name for a20

15:08:53 SCOTT@ test1 >select segment_name,tablespace_name,extent_id,bytes,blocks from user_extents

15:09:19   2   where segment_name=‘T2‘;SEGMENT_NAME         TABLESPACE_NAME                 EXTENT_ID      BYTES     BLOCKS

-------------------- ------------------------------ ---------- ---------- ----------

T2                   USERS                                   0    1048576        128

T2                   USERS                                   1    1048576        128

2)配置10046进行分析15:11:00 SCOTT@ test1 >alter session set events ‘10046 trace name context forever,level 8‘;

Session altered.

15:14:57 SCOTT@ test1 >select count(*) from t2;

COUNT(*)

----------

32002

15:15:09 SCOTT@ test1 >alter session set events ‘10046 trace name context off‘;

Session altered.

3)查看trace文件

[[email protected] ~]$ more  /u01/app/oracle/diag/rdbms/test1/test1/trace/test1_ora_4260.trcPARSE #5:c=0,e=302,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,plh=0,tim=1408605696796384

EXEC #5:c=1000,e=1131,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,plh=3321871023,tim=1408605696797594

WAIT #5: nam=‘db file sequential read‘ ela= 75 file#=11 block#=512 blocks=1 obj#=16404 tim=1408605696797838

WAIT #5: nam=‘db file sequential read‘ ela= 15 file#=11 block#=514 blocks=1 obj#=16404 tim=1408605696797913

WAIT #5: nam=‘db file scattered read‘ ela= 1123 file#=11 block#=528 blocks=48 obj#=16404 tim=1408605696799202

从以上文件可以看出,在“db file scattered read”中每次读取的数据块个数(blocks=48)不超过extent中blocks的大小(128个);在“db file sequential read”中每次读取的数据块个数(blocks)为1个。

附注:

7a0d301a341fbf654701c00ec47142d3.png

0ee5b4badc7141b5f263522731187659.png

af3cc596309bc68aa8361d3c0a53ca83.png

原文:http://tiany.blog.51cto.com/513694/1543199

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转行程序员后,我开始后悔没做这件事

全世界有3.14 % 的人已经关注了数据与算法之美程序 数据结构 算法 ——图灵奖得主&#xff0c;计算机科学家N.Wirth(沃斯)作为程序员&#xff0c;我们做机器学习也好&#xff0c;做python开发也好&#xff0c;java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据…

工业互联网的两种极端想法和两点反思

目 录1. 概述2. 两种极端想法3. 两点反思1. 概述最近走访了很多企业&#xff0c;涉及到的行业包括&#xff1a;军工、特钢、有色、加工制造&#xff08;海洋钻井平台&#xff09;、建材、纺织等&#xff0c;在与不同的行业交流的过程中&#xff0c;我发现…

兵马未至,数据先行,且看如何进行数据挖掘!

从数据中抽取信息从信息中挖掘知识随着大数据时代的到来&#xff0c;数据挖掘的重要性越发显著。可谓是兵马未至&#xff0c;数据先行。所谓数据挖掘&#xff0c;一般是指从大型数据库中将隐藏的预测信息抽取出来的过程&#xff0c;而更为精确的解释就是“从数据中挖掘知识”。…

微软加入字节码联盟,进一步开发支持Blazor 的WebAssembly技术

字节码联盟 (Bytecode Alliance)宣布已正式成为 501(c)(3) 非营利组织&#xff0c;参与组建的企业/组织包括 Fastly、英特尔、Mozilla 和微软&#xff0c;此外还邀请到了 Arm、DFINITY Foundation、Embark Studios、谷歌、Shopify 和加州大学圣地亚哥分校加入并成为正式会员。B…

传说中的贝叶斯统计到底有什么来头?

全世界有3.14 % 的人已经关注了数据与算法之美贝叶斯统计在机器学习中占有一个什么样的地位&#xff0c;它的原理以及实现过程又是如何的&#xff1f;本文对相关概念以及原理进行了介绍。引言&#xff1a;在很多分析学者看来&#xff0c;贝叶斯统计仍然是难以理解的。受机器学习…

更新两个WPF开源项目

前言好久没更新博客了&#xff0c;最近准备重拾博客&#xff0c;将更新恢复起来。开源项目这些年零零散散做了很多项目&#xff0c;准备整理一下&#xff0c;将其开源&#xff0c;现整理了两个项目&#xff1a;绑定引擎&#xff08;BindingEngine&#xff09;&#xff0c;插件式…

OpenGL ES 3D 粒子系统小结

2019独角兽企业重金招聘Python工程师标准>>> 所谓粒子系统可以想象为一堆粒子由一个点或一个面按照一定的规律进行喷射。 粒子系统大致分为2类&#xff1a;一类为“点喷式”&#xff0c;一类为“面喷式”。可以想象前者由一个点进行喷射&#xff0c;类似于焰火&…

理科生用创意毁灭世界,爆笑!

全世界有3.14 % 的人已经关注了数据与算法之美1、青年问禅师&#xff1a;“大师&#xff0c;我很爱我的女朋友&#xff0c;她也有很多优点&#xff0c;但是总有几个缺点让我非常讨厌&#xff0c;有什么方法能让她改变&#xff1f;”禅师浅笑&#xff0c;答&#xff1a;“方法很…

我的C#/.NET学习诀窍——LINQPad

在我以往的文章中&#xff0c;尤其涉及代码演示的&#xff0c;都使用了同一个工具——LINQPad。但许多客户面对我分享的.linq源文件都迷茫不知所措&#xff0c;因此有必要来聊聊一下这个强大的工具。本文首先将对该工具做个简单的介绍&#xff0c;并且分享一些LINQPad的优点&am…

数学在生活中无处不在,36个生活小故事涵盖小学所有的数学知识!

数学不是脱离生活的&#xff0c;而是源于生活&#xff0c;更要回归于生活。解决生活中遇到的问题&#xff0c;就是最自然的数学应用题。生活场景中的学习&#xff0c;是最生动的体验式学习机会。用学到的数学知识来解决生活中的问题&#xff0c;正是孩子体会数学奥妙的绝佳机会…

面试八股文:你写过自定义任务调度器吗?

最近入职了新公司&#xff0c;尝试阅读祖传代码&#xff0c;记录并更新最近的编程认知。思绪由Q1引发&#xff0c;后续Q2、Q3基于Q1的发散探究Q1. Task.Run、Task.Factory.StartNew 的区别&#xff1f;我们常使用Task.Run和Task.Factory.StartNew创建并启动任务&#xff0c;但是…

快速掌握MATLAB应用,从这一步开始

有人说&#xff0c;“MATLAB除了不会生孩子&#xff0c;什么都会。”矩阵运算、数据可视化、GUI&#xff08;用户界面&#xff09;设计、甚至是连接其他编程语言&#xff0c;MATLAB都能轻松实现&#xff01;那么&#xff0c;MATLAB到底有多厉害&#xff1f;MATLAB拥有丰富的算法…

mobile.php discuz,电脑访问discuz手机版【触屏版跳转标准版的修改方法】

推荐方法&#xff1a;以前我们介绍过如何通过修改Chrome浏览器运行参数的方法来模拟手机访问网站&#xff0c;但是在Chrome 32和33版本以后增加了更加便捷的方法&#xff0c;在开发者工具中只需要设置一下就能方便的模拟各种手机型号的访问效果了。方法如下&#xff1a;1、打开…

深入探究ASP.NET Core读取Request.Body的正确方式

前言相信大家在使用ASP.NET Core进行开发的时候&#xff0c;肯定会涉及到读取Request.Body的场景&#xff0c;毕竟我们大部分的POST请求都是将数据存放到Http的Body当中。因为笔者日常开发所使用的主要也是ASP.NET Core所以笔者也遇到这这种场景&#xff0c;关于本篇文章所套路…

追MM的各种算法

全世界有3.14 % 的人已经关注了数据与算法之美动态规划基本上就是说&#xff1a;你追一个MM的时候&#xff0c;需要对该MM身边的各闺中密友都好&#xff0c;这样你追MM这个问题就分解为对其MM朋友的问题&#xff0c;只有把这些问题都解决了&#xff0c;最终你才能追到MM。因此&…

ML.NET 示例:对象检测

ML.NET 版本API 类型状态应用程序类型数据类型场景机器学习任务算法v1.4动态API最新控制台应用程序图像文件对象检测深度学习Tiny Yolo2 ONNX 模型有关如何构建此应用程序的详细说明&#xff0c;请参阅Microsoft Docs网站上附带的教程。问题对象检测是计算机视觉中的一个经典问…

双十一来了,揭秘菜鸟物流背后的那些算法黑科技

又是一年双十一&#xff0c;又一个巨大的挑战摆在了包括菜鸟网络在内的物流面前&#xff0c;但随着人工智能、大数据的应用越来越广泛&#xff0c;无人化仓储、无人化配送越来越多&#xff0c;供应链越来越扁平化&#xff0c;各种算法应用到物流领域的每一个细节。那么&#xf…

开源推荐:Asp.Net Core入门学习手册!

前言推荐一个入门级的.NET Core开源项目&#xff0c;非常适合新手入门学习.NET Core。开源地址:https://github.com/windsting/little-aspnetcore-book。手册在线下载地址&#xff1a;https://nbarbettini.gitbooks.io/little-asp-net-core-book/content/chapters/mvc-basics/c…

如何拿到高薪数据分析师offer?从精准解读一篇招聘信息开始!

大家好&#xff0c;我是大鹏&#xff0c;目前是一名数据分析师&#xff0c;从非本专业成功转行&#xff0c;创立“数据团学社”“城市数据研习社”&#xff0c;运营数十万人社群&#xff0c;联合发起“城市数据团”。最近有很多学弟学妹咨询我入行数据分析师的情况。总体上说&a…

微软翻译api的使用介绍和注意事项

google翻译api已经收费了&#xff0c;而微软翻译api目前是免费的&#xff0c;支持几种不同的方式访问&#xff0c;如果感兴趣可以自己封装下协议处理。官方介绍&#xff1a; http://msdn.microsoft.com/en-us/library/hh454950.aspx。 这里介绍一下java下的使用。Java下使用微软…