在不影响Oracle生产库性能情况下评估整库大小_第1页
在不影响Oracle生产库性能情况下评估整库大小_第2页
在不影响Oracle生产库性能情况下评估整库大小_第3页
在不影响Oracle生产库性能情况下评估整库大小_第4页
在不影响Oracle生产库性能情况下评估整库大小_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在不影响Oracle生产库性能情况下,评估整库大小

最近碰到一个小问题:一TB级的Oracle生产库,因为要走数据迁移,需要先行评估整个库的迁移数据量大小,但又不得影响生产库运行性能。如何搞?大家都知道,expdp数据泵有两个很好用的参数ESTIMATE和ESTIMATE_ONLY,此两个参数可以保证在不真正发起逻辑备份的情况下评估整个迁移生产库的大小。今天念叨下这个小问题。这里使用$expdp-help先看expdp的ESTIMATE和ESTIMATE_ONLY两个参数的介绍:ESTIMATECalculatejobestimates.Validkeywordvaluesare:[BLOCKS]andSTATISTICS.

ESTIMATE_ONLYCalculatejobestimateswithoutperformingtheexport.ESTIMATE默认:blocks指定计算每张表使用磁盘空间的方法ESTIMATE=[BLOCKS|STATISTICS]1.BLOCKS-通过块数和块大小计算

2.STATISTICS-每张表的统计信息计算Expdp可计算导出数据大小容量,一种是通过数据块数量、一种是通过统计信息中记录的内容估算。通过expdp的参数ESTIMATE_ONLY和ESTIMATE来评估导出的性能,ESTIMATE_ONLY仅作评估不会导出数据,通过ESTIMATE参数指定statistics和blocks参数来测试两者的差异。以下是Oracle中的测试数据输出,在此版本中,我们来看下ESTIMATE的statistics和blocks两个参数各自评估大小和用时。两条命令如下:$expdp

\'/

as

sysdba\'

ESTIMATE_ONLY=y

FULL=y

ESTIMATE=blocks$expdp\'/assysdba\'ESTIMATE_ONLY=yFULL=yESTIMATE=statistics具体执行如下:如上可以看出,使用ESTIMATE=blocks评估出来的大小为2599.GB,耗时:00:02:50;接下来再看ESTIMATE=statistics方式。命令如下:如上,使用ESTIMATE=STATISTICS评估出来的大小为2132.GB,耗时:00:04:40;可以看出,两种方式统计的大小不一样,为啥?分析推断:ESTIMATE的默认方式是blocks。个人理解为:Oracle的块大小默认为8KB,直接对库使用的块数计算使用量,简单明了,但考虑到块有高水位线、碎片等因素,故统计不精确。而STATISTICS方式因计算的是对每张表的实际使用情况,故更为精确。但STATISTICS的方式也非很精确,原因为:1.该方式只是对表做统计,没有对索引、列、系统做统计,2.一个表中被修改的行数超过stale_percent(缺省值10%)时才会认为这个表的统计数据过时,需要重新搜集。注意:如果压缩了表,那么使用ESTIMATE=BLOCKS计算的值时不准确的,这个时候就应该使用ESTIMATE=STATISTICS。推荐:使用ESTIMATE的默认方式blocks进行估算,原因很简单,估值按最大值估算申请空间更靠谱。为了加深理解,这里介绍下Oracle统计信息收集大家都知道,Oracle较优执行计划的挑选是基于CBO(costbasedoptimized)判断,而CBO对哪个执行计划较优的判断是基于统计信息。优化器统计范围包含:1.表统计:行数,块数,行平均长度;all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN;2.列统计:列中唯一值的数量(NDV),NULL值的数量,数据分布;DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM;3.索引统计:叶块数量,等级,聚簇因子;DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL;4.系统统计:I/O性能与使用率;CPU性能与使用率;存储在aux_stats$中,需要使用dbms_stats收集,I/O统计在X$KCFIO中;查询表上一次收集统计信息的时间:SQL>selectowner,table_name,last_analyzedfromdba_tableswhereowner='SCOTT';Oracle中如何搜集统计信息?主要有2种方法:方式1:analyze语句analyze可以用来收集表,索引,列以及系统的统计信息和直方图,以下为一些典型用法:从语法可以看出,只有指定列统计信息收集时,才会收集相关列的直方图,此外收集直方图时for子句还可以加size子句,size的取值范围是1-254,默认值是75,表示直方图的buckets的最大数目。而dbms_stats包的size选择则有:数字|auto|repeat|skewonly选项,但analyze的size只能是数字。关于直方图介绍:Ahistogramisaspecialtypeofcolumnstatisticthatprovidesmoredetailedinformationaboutthedatadistributioninatablecolumn.Ahistogramsortsvaluesinto"buckets,"asyoumightsortcoinsintobuckets.直方图就是一种特殊的列统计信息,只有列才有直方图。用于查看analyze后统计信息的SQL;需要注意的一点是fortable选项并不只收集表统计信息,将列和索引的统计信息一块收集了。oracle会监控所有表的DML活动并在SGA中进行记录。监控的信息会定时的刷新到磁盘且可以通过*_tab_modifications视图来查看。可调用dbms_stats.flush_database_monitoring_info过程来手动刷新这些数据。如果想在查询时得到最新信息(在所有统计数据收集之前内部监控数据会被刷新)。可通过查询user_tab_statistics视图中的stale_stats列来查看哪个表的统计数据过时。表的stale_stats被设置为NO,统计数据是最新的。表的stale_stats被设置为YES,统计数据是过时的,表的stale_stats没有被设置说明丢失统计数据。方式2:调用dbms_stats包dbms_stats中负责收集统计信息的几个存储过程:GATHER_DATABASE_STATS--Thisproceduregathersstatisticsforallobjectsinthedatabase.GATHER_DICTIONARY_STATS--Thisproceduregathersstatisticsfordictionaryschemas'SYS','SYSTEM'andschemasofRDBMScomponents.GATHER_FIXED_OBJECTS_STATS--Thisproceduregathersstatisticsforallfixedobjects(dynamicperformancetables).GATHER_INDEX_STATS--Thisproceduregathersindexstatistics.Itattemptstoparallelizeasmuchoftheworkaspossible.Restrictionsaredescribedintheindividualparameters.Thisoperationwillnotparallelizewithcertaintypesofindexes,includingclusterindexes,domainindexes,andbitmapjoinindexes.Thegranularityandno_invalidateargumentsarenotrelevanttothesetypesofindexes.GATHER_SCHEMA_STATS--Thisproceduregathersstatisticsforallobjectsinaschema.GATHER_SYSTEM_STATS--Thisproceduregatherssystemstatistics.GATHER_TABLE_STATS--Thisproceduregatherstableandcolumn(andindex)statistics.Itattemptstoparallelizeasmuchoftheworkaspossible,buttherearesomerestrictionsasdescribedintheindividualparameters.具体使用案例:1.EXEC

DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT',estimate_percent=>80,method_opt=>'FORALLCOLUMNSSIZEAUTO',degree=>4,cascade=>TRUE);2.EXEC

DBMS_STATS.GATHER_TABLE_STATS('SCOTT','EMP',estimate_percent=>80,method_opt=>'FORALLCOLUMNSSIZEAUTO',degree=>4,cascade=>TRUE);3.EXEC

DBMS_STATS.GATHER_INDEX_STATS('SCOTT','PK_EMP',estimate_percent=>80,degree=>4);dbms_stats与analyze的区别:1.analyze收集系统内部对象会报错,而dbms_stats不会;2.analyze不能正确的收集分区表的统计信息,而dbms_stats可以通过指定粒度来实现(granularity)。3.analyze不能并行的收集统计信息,而dbms_stats可以(可以加上degree=>4来实现并行度为4的收集)。4.Oracle推荐使用dbms_stats来收集统计信息,analyze将会被逐渐抛弃。【总结】1.本文介绍了在不影响生产库运行性能的前提下。使用expdp数据泵参数ESTIMATE和ESTIMATE_ONLY,在不真正发起逻辑备份的情况下,可以评估整个迁移生产库大小的用法和差别及分析;2.同时介绍了Oracle的CBO,统计信息、直方图,如何收集统计的两种方法调用dbms_stats包和analyze两种方式,推荐使用调用dbms_stats包;3.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论