♣ 题目部分 在Oracle中,怎样收集表的统计信息?怎样收集分区表的统计信息?...♣ 答案部分 主要采用DBMS_STATS.GATHER_TABLE_STATS包进行统计信息的收集,如下所示: DBMS_STATS.GATHER_TABLE_STATS(USER,'TB_NAME...=>'PARTITION',CASCADE=>TRUE);--针对分区表的单个分区进行收集统计信息 除此之外,还有一些其它的用法,如下所示: l EXEC DBMS_STATS.GATHER_DATABASE_STATS...();--收集当前数据库下所有用户的统计信息 l EXEC DBMS_STATS.GATHER_SCHEMA_STATS(USER);--收集用户下所有对象的统计信息 当系统的分区表数据量很大时,如果每次都收集全部的分区必然会导致统计信息的收集非常慢...INCREMENTAL的值 本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
编辑手记:从11.2开始,可以通过CONCURRENT参数,启用表或分区的并行扫描,加快统计信息的收集速度。 作者简介:何剑敏 Oracle ACS华南区售后团队,首席技术工程师。...多年从事第一线的数据库运维工作,有丰富项目经验、维护经验和调优经验,专注于数据库的整体运维。 对于大表的统计信息收集,我们可以加degree参数,使得扫描大表的时候,进行并行扫描,加快扫描速度。...但是这在收集的时候,还是进行一个表一个表的扫描。并没有并发的扫描各个表。在oracle 11.2.0.2之后,就有了一个参数,可以并发扫描表(或者分区),这就是CONCURRENT参数。...可以通过以下语句看到你的数据库是否启用了CONCURRENT收集统计信息。...EBS的安装文档中(Doc ID 396009.1),也是说将数据上收集统计信息的功能关闭的(_optimizer_autostats_job=false) 参考: https://blogs.oracle.com
在oracle9i中,默认的统计信息收集是不收集直方图信息的,也就是说默认的MOTHOD_OPT模式为FOR ALL COLUMNS SIZE 1 在10g开始,dbms_stats包中默认的METHOD_OPT...DBMS_STATS.GET_PARAM('METHOD_OPT') ——————————————————————– FOR ALL COLUMNS SIZE AUTO 这就说明,从10g开始,统计信息收集中的直方图部分...,收集与否是有oracle自从判断,从实际的使用来看,oracle的智能判断并不是100%正确, oracle往往会大量的收集一些并不是必须的直方图信息,而有些直方图信息又会对查询造成不必要的影响 由于我们简单的对直方图进行删除后...,oracle的自动统计信息又会重新收集,所以我们需要采取一些必要的方法,来规避这个问题 10g中: 解决方案 删除表的统计信息 手工收集标的统计信息,不收集直方图 lock表的统计信息 创建JOB手工收集统计信息...11g中 在11g中,oracle对dbms_stats包添加了新功能,提供给我们进行修改,可以使用dbms_stats.set_table_prefs包 删除直方图信息: dbms_stats.delete_column_stats
环境:Oracle 11.2.0.4 采用并行的方式,快速收集全库统计信息,多用于跨版本升级之后,对全库的统计信息重新进行快速收集: --开启计时 set timing on --设置并行收集 exec...dbms_stats.set_global_prefs('CONCURRENT','TRUE'); --开始收集全库统计信息 begin dbms_stats.gather_database_stats...exec dbms_stats.set_global_prefs('CONCURRENT','FALSE'); 注意degree的值并不是设置越高就越快,同时要根据实际CPU具体情况来设置。...本文来自同事的经验分享,这里主要用到dbms_stats包的set_global_prefs和gather_database_stats过程。...详见官档描述: https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm
如果你依赖于自动收集统计信息job来维护这类表的统计信息,那么统计信息会经常显示此表为空。因为晚上此表是空的,而收集统计信息的job也正是晚上才开始执行。...然而,在oracle 12c版本,现在可以实现每个使用全局临时表的会话拥有自己独立的统计信息。...图13:改变默认方式:从全局临时表不共享统计信息到共享统计信息 如果你是从11g升级到12c,但数据库应用没有被修改去利用全局临时表的会话统计信息,你可能需要保持全局临时表默认的方式与升级之前一致,通过设置...exec dbms_stats.set_global_prefs('autostats_target','oracle') 内部对象统计信息 从oracle数据库12c开始,内部对象统计信息如果之前没有被收集过...with Oracle Database 12c Release 2 Oracle白皮书:Database 12c Real Application Testing Overview
主题:关于Oracle开启自动收集统计信息的SPA测试 环境:Oracle RAC 11.2.0.4(Primary + Standby) 需求:生产Primary库由于历史原因关闭了自动统计信息的收集...,目前客户需求是想要重新开启统计信息的自动收集,虽然一般来说,有了更准确的统计信息,SQL会有更好的执行计划,但由于生产环境数据复杂,实际上还是需要评估哪些SQL会因为重新开启自动统计信息收集性能反而会下降...: --光闭自动统计信息收集,(慎用,除非有其他手工收集统计信息的完整方案,否则不建议关闭) BEGIN DBMS_AUTO_TASK_ADMIN.disable( client_name...这里首先需要开启统计信息自动收集,并可以把自动收集的窗口时间提前到现在,减少等待的时间。...: Oracle的窗口和自动任务 5.4 变更后再次分析性能 测试运行SQL Tuning Set中的SQL语句,分析所有语句在收集统计信息之后的执行效率: 参考规范: EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK
从Oracle 11G开始,数据库统计信息的自动收集被整合到自动维护任务中,满足大多数情形下的运行需求。但对于在线商城,交易系统而言,可能需要调整其执行时间或者自行指定收集窗口。...一、缺省的统计信息相关状态查看 1、查看自动收集统计信息对应的task(也就是program的名称)及状态 --当前状态 SQL> select * from v$version...Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production --如下查询表明统计信息的收集是位于gather_stats_prog...--统计信息收集的时间窗口 --如下查询周一至周五时间为22点,周六日为6点 --此外持续也不相同,周一至周五为4小时,周六日为20个小时...--如下查询,scott表上的统计信息已更新 SQL> select TABLE_NAME,NUM_ROWS,BLOCKS,LAST_ANALYZED from dba_tables where
在线收集统计信息 在Oracle Database 12 c中,在线收集统计信息"piggybacks"作为直接路径数据加载操作的一部分进行收集, 例如, 像使用CTAS的方式创建表,以及IAS方式插入数据...见 Oracle 白皮书,《Database 12c Real Application Testing Overview》有关更多详细信息 (请参见21页上的参考资料)。...Oracle数据库中的所有具有此属性的表都默认设置为1,为了加快统计信息的收集,可以在对大表进行收集统计信息时显示指定该参数,或者你可以设置degree为auto_degree;Oracle将根据对象的大小自动确定应该用于收集统计信息的适当的并行服务器进程数量...通过让Oracle充分利用多处理器环境,同时去收集多个表和(sub)分区的统计信息可以减少收集统计数据所需的总体时间。...,那么Oracle将为每个非分区表以及分区表的每个(子)分区创建一个单独的统计信息收集作业。
本文将详细讨论,在Oracle常见的场景中何时以及如何收集统计信息,文章大致分如下几个部分: 如何收集统计信息 何时收集统计信息 提高统计信息质量 快速收集统计信息 何时不用收集统计信息 收集其他类型统计信息...如何收集统计信息 在Oracle中优选的方式是统计信息自动收集。...使用这种方式,我们将会指定哪些指定统计信息被默认收集,而不需要在收集统计信息的时候调整参数。我们可以自由的使用默认参数收集表/用户/数据库级别的统计信息,并且确定这些统计信息收集策略已经被使用。...更重要的是,我们可以在自动和手动统计信息收集之间自由切换。 自动统计信息收集 oracle数据库需要收集那些缺少或者已经“stale”过期统计信息的对象统计信息。...METHOD_OPT METHOD_OPT参数控制柱状图是否在收集过程中被创建。柱状图是oracle数据库中一类特殊类型的列统计数据,用户提供表中列数据分布的详细信息。
♣ 题目部分 在Oracle中,当收集表的统计信息时应该注意哪些问题?...⑥ 统计信息收集作业采样比例:对于Oracle 11g及其以上的版本收集统计信息的采样比例建议采用DBMS_STATS.AUTO_SAMPLE SIZE。...如果是Oracle 10g,那么建议将采样比例的初始值设为30%,然后根据目标SQL的实际执行情况再做调整。 ⑦ 系统统计信息:如果系统的硬件环境发生了变化,那么建议要额外收集一次系统统计信息。...⑧ 内部对象统计信息:在明确诊断出系统已有的性能问题是因为X$表的内部对象统计信息不准引起的,这个时候就应该收集X$表的内部对象统计信息,其它情形就不要收集了。...21 如果加载数据量比较大,并且是分区表,每个分区的业务数据呈现的是均匀的,在Oracle 11g可以考虑采用DBMS_STATS.COPY_TABLE_STATS先把统计信息做个快速的设置,然后,再收集该分区的统计信息
Oracle优化器(CBO)依赖数据库统计信息来计算目标SQL各种可能的执行路径的成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划。...如果统计信息不准确甚至是错误,会导致优化器选择错误SQL执行计划的概率大大增加。 目前计划对该数据库统计信息进行重新收集,因为生产环境的复杂性,不排除重新收集正确的统计信息后,整体性能反而下降的情况。...故而在收集之前需要对原有的统计信息做好备份,如发现收集后性能反而下降的极端情况,也可以快速回退到原有的统计信息。...收集数据库的统计信息,需要在业务闲时操作: --开启计时 set timing on --开始收集全库统计信息 begin dbms_stats.gather_database_stats( ESTIMATE_PERCENT...如果数据库是11.2.0.2及以上版本,还可以通过DBMS_STATS.SET_GLOBAL_PREFS设置并发收集进一步提升收集效率,具体可参考: Oracle 11g快速收集全库统计信息 3.回退方案
AUTO_INCREMENT=582 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC mysql库中有innodb_index_stats、innodb_table_stats 对innodb的信息进行统计...,可根据统计信息,分析表的复杂度,为优化做准备。...------------+-----------------------------------+ 数据详解: 可以看到IDX_dashboard_org_id_plugin_id 实际上存了3个统计信息...(原因:统计索引信息时,是根据最左原则,要统计各种组合的。...比如(a,b) 索引,要统计(a), (a,b), (a,b,pk) 三种信息,而不是只统计(a,b)这个信息) 1 stat_name=size时:stat_value表示索引的页的数量 2
引言 在Oracle的11g版本中,统计信息为自动收集功能,在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能);且有时候在生产环境中,还会对一些对象做手动统计信息的搜集...如果对一次执行SQL时发现涉及对象(表、索引等)没有被分析、统计过,那么ORACLE会采用一种叫做动态采样的技术,动态的收集表和索引上的一些数据信息。...Oracle的统计信息自动搜集策略 接下来讲一讲统计信息收集那点事。统计信息可分为自动收集和手动收集。...对于分区表,如果仅仅是一个分区有了较大改动,只需要收集一个分区的统计,但是收集整个表的分区也是必要的; 4. 其他。 3....这个功能貌似带来了统计数据采集上的便捷,但是Oracle 11g自动收集统计信息的时间是22:00--2:00。 这个时间段往往是业务的高峰期,给本已紧张的系统带来更大的负担。
♣ 题目部分 在Oracle中,如何并发地收集统计信息? ♣ 答案部分 对于大表的统计信息收集可以通过DEGREE参数使得扫描大表的时候进行并行扫描,从而加快扫描速度,缩短了收集统计信息的时间。...但是,即使加了DEGREE参数,在收集统计信息的时候,还是进行一个表一个表的扫描,并没有并发的同时扫描多个表。...在Oracle 12c的版本上,可以设置以下的值: MANUAL:只有当手动收集时,并发有效 AUTOMATIC:只有当自动收集时,并发有效 ALL:当手动/自动收集,并发都有效 OFF:并发无效 可以通过以下的视图...,对并发统计信息收集进行监视: DBA_OPTSTAT_OPERATION_TASKS:当前和历史的统计信息收集的执行任务 DBA_OPTSTAT_OPERATIONS:当前和历史的统计信息收集的执行操作...& 说明: 有关并发地收集统计信息的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2134312/ 本文选自《Oracle程序员面试笔试宝典
前言 Oracle中的统计信息相信大家都不陌生,统计信息中有Pending Statistics这个概念。...统计信息准确性对于CBO评估SQL的各种可能执行路径的Cost非常重要,当统计信息不准时,很可能CBO选择了不佳的执行计划,此时需要收集统计信息。...或者当进行SQL优化时,怀疑是统计信息不准导致的问题时,需要收集统计信息。...但生产环境下统计信息的收集也是有风险的,有可能当收集了统计信息后执行计划反而变的更差,此时就可以利用Pending Statistics。 默认的,当收集完统计信息后,统计信息会存储到数据字典表中。...要点总结 1.使用set_table_prefs过程将表的publish选项设置为false,收集统计信息时表和索引的统计信息都会被收集为pending statistics,可以查看视图dba_tab_pending_stats
背景:有时我们会希望可以对Oracle的统计信息整体进行导出导入。...比如在数据库迁移前后,希望统计信息保持不变;又比如想对统计信息重新进行收集,但是担心重新收集的结果反而引发性能问题,想先保存当前的统计信息,这样即使重新收集后效果不好还可以导入之前的统计信息。...Oracle提供给我们一些方法,比较常用的粒度有两种: schema级别统计信息的导出导入 通过调用DBMS_STATS.EXPORT_SCHEMA_STATS和DBMS_STATS.IMPORT_SCHEMA_STATS...统计信息存放的表可以通过DBMS_STATS.CREATE_STAT_TABLE和DBMS_STATS.DROP_STAT_TABLE来进行创建或是删除。...然后在某一张表插入数据,重新收集该表的统计信息: SYS@orcl> insert into jingyu.ash_tmp select * from jingyu.ash_tmp; SYS@orcl>
Online Statistics Gathering for Bulk Loads Oracle12c后,在大批量灌数后,提供了自动收集统计信息的方式。...大批量灌数后立即查询是很多数据库的痛点,通常都会因为统计信息不准导致计划出问题,下面总结下Oracle的解决方法: 什么场景会触发自动收集统计信息?(已验证) create table as。...delete清空表,做bulk insert不会收集统计信息,因为表有segment,必须是空表才行。 分区表:遵循上述规则的前提下 对父表的insert只会收集父表统计信息。...但在实践中,由于疏忽或等维护窗口没有收集统计信息,是生成错误计划的主要原因。 “Bulk Loads统计信息收集” 分区表 如果插入父表,则收集父表统计信息,不会收集子表。...注意在bulk loads统计信息收集中,Oracle不会收集列统计信息。 “Bulk Loads统计信息收集” 限制,下面场景不会自动收集统计信息: 目标对象已经有数据了。
♣ 题目部分 在Oracle中,新建索引后统计信息是否自动收集?...♣ 答案部分 在Oracle 10g后有个隐含参数“_OPTIMIZER_COMPUTE_INDEX_STATS”,意思是是否对新建索引收集统计信息,该参数默认是TRUE,表示默认收集新建索引的统计信息...LAST_ANALYZED DISTINCT_KEYS ------------------- ------------- 2019-05-15 17:06:01 0 本文选自《Oracle
♣ 题目部分 在Oracle中,自动收集统计信息的机制有哪些?10g和11g在自动收集统计信息方面有哪些区别?...在Oracle 10g之前并没有自动收集统计信息的机制,从Oracle 10g开始引入了自动收集统计信息的功能,这个功能在Oracle 10g中被称为自动统计信息收集(Automatic Statistics...Oracle的初始化参数STATISTICS_LEVEL控制收集统计信息的级别,有三个参数值: l BASIC:收集基本的统计信息 l TYPICAL:收集大部分统计信息(数据库的默认设置) l ALL...:收集全部统计信息 当使用Oracle自动收集统计信息时,必须要确保Oracle的参数STATISTICS_LEVEL的值为TYPICAL或者ALL。...时或自上次自动统计信息收集作业完成之后目标表被执行过TRUNCATE操作,那么该表的统计信息就变为陈旧状态,Oracle就会在指定时间段自动收集统计信息。
在11g之前,当表的数据量改动超过总数据量的10%,就会晚上自己主动收集统计信息。怎样推断10%。之前的帖子有研究过:oracle自己主动统计信息的收集原理及实验。...这个STALE_PERCENT=10%,是无法改动的,假设表很大。10%是许多的数据,很有可能造成统计信息不准确。...exec dbms_stats.gather_database_stats(user); –收集当前数据库用户下全部对象的统计信息 exec dbms_stats.gather_schema_stats...(user); –收集数据字典的统计信息 exec dbms_stats.gather_dictionary_stats(); –当系统有非常大的分区表时,假设总是所有收集则会比較慢。...dbms_stats.get_prefs(‘INCREMENTAL’,null,’table_name‘) from dual;–查看分区表INCREMENTAL的值 –获取global的统计信息收集设置选项
领取专属 10元无门槛券
手把手带您无忧上云