转自http://blog.sina.com.cn/s/blog_69e7b8d701019cal.html
这里的统计信息指的是优化器(OPTIMIZER)统计信息,当Oracle数据库工作在CBO(COST BASED OPTIMIZER)模式下,优化器根据数据字典中记录的对象统计信息,评估SQL语句不同执行计划的成本,从而找到最优或者是相对最优的执行计划。从这一点来看统计信息的准确性就显得非常重要了,尤其是对于oracle10g以后的数据库,因为oracle10g以后,Oracle默认的优化器模式是all_rows,也就是基于成本的优化器。
优化器工作原理图:
统计信息包含的内容很多,比如表的,索引的,列的,列的直方图的等
收集Oracle数据库的统计信息,方法很多
1.oracle自动收集统计信息
a.oracle 10g,调用用gather_stats_job自动收集统计信息
工作日每天晚上10点到第二天早上六点,周末全天,oracle自动收集没有统计信息的和统计信息过
旧的对象的统计信息
这样做可能会对性能有影响,收集统计信息是要消耗大量资源的,所以很多DBA选择关掉这个job,
采用手动收集统计信息
默认这个job是打开的,关掉的方法如下:
EXEC DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
b.oracle 11g,使用自动任务来完成,并且窗口细化到每天一个,当然时间也可以调整
SQL> select client_name from dba_autotask_client;
CLIENT_NAME
----------------------------------------------------------------
auto optimizer stats collection
auto space advisor
sql tuning advisor
默认这个自动任务是打开的,当然也可以关掉
禁用任务:
BEGIN
dbms_auto_task_admin.disable(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
启用任务:
BEGIN
dbms_auto_task_admin.enable(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
2.用户手动收集统计信息
手动收集统计信息适合于对于新建表、刚做完数据装载的表和表里数据变化比较频繁的
表(一天超过10%),如果仅仅是为了收集统计信息,建议使用dbms_stats包来实现
a.使用DBMS_STATS程序包
对于新建的表,默认是没有统计信息的
SQL> create table e as select empno,ename,sal from emp where rownum<=8;
Table created.
SQL> select table_name,num_rows,
2 blocks,to_char(last_analyzed,'yyyy-mm-ddhh24:mi:ss')
3 from user_tables
4 where table_name='E';
TABLE_NAME NUM_ROWS BLOCKS TO_CHAR(LAST_ANALYZ
------------------------------ ---------- ---------- -------------------
E
使用exec dbms_stats.gather_table_stats收集统计信息
SQL> exec dbms_stats.gather_table_stats('SCOTT','E');
PL/SQL procedure successfully completed.
SQL> select table_name,num_rows,blocks,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss')
2 from user_tables
3 where table_name='E';
TABLE_NAME NUM_ROWS BLOCKS TO_CHAR(LAST_ANALYZ
------------------------------ ---------- ---------- -------------------
E 8 4 2012-10-31 11:06:56
b.ANALYZE 命令
往表里插入一条记录,在没有对表从新分析前,user_tables里的统计信息是不变的,或者说不准确的
SQL> insert into e select empno,ename,sal from emp where rownum=1;
1 row created.
SQL> commit;
Commit complete.
SQL> select table_name,num_rows,blocks,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss')
2 from user_tables
3 where table_name='E';
TABLE_NAME NUM_ROWS BLOCKS TO_CHAR(LAST_ANALYZ
------------------------------ ---------- ---------- -------------------
E 8 4 2012-10-31 11:06:56
使用analyze table 收集表的统计信息,下面的两个语句使用其中一个就可以了
compute 完全采样,也就是100%,适合于小表和索引
SQL> analyze table e compute statistics;
Table analyzed.
或者
estimate 部分采样,可以指定采样比率,本例采样20%,适合于大表
SQL> analyze table e estimate statistics sample 20 percent;
Table analyzed.
不管使用上面语句当中的哪一个,都会看到准确的统计信息
SQL> select table_name,num_rows,blocks,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss')
2 from user_tables
3 where table_name='E';
TABLE_NAME NUM_ROWS BLOCKS TO_CHAR(LAST_ANALYZ
------------------------------ ---------- ---------- -------------------
E 9 8 2012-10-31 11:13:48
3.动态采样
对于没有统计信息的表,oracle为了能够得到相对准确的执行计划,会在执行SQL语句之前对语句设计
到的表做动态采样
从10g开始,oracle默认把optimizer_dynamic_sampling的等级设为2,那就会出现如果对象没有统计信
息,oracle就会在每次查询的时候进行采样,所以oracle看起来会相当的智能。
SQL> show parameter dyna
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_dynamic_sampling integer 2
相关推荐
白色大气风格的建筑商业网站模板下载.rar
内容概要:本文详细介绍了面向对象编程语言Objective-C的基础语法,包括其历史背景、特点、环境搭建、基本语法、面向对象编程、高级特性和实际应用。具体涵盖的内容包括Objective-C的历史发展、面向对象编程的核心特性、变量和数据类型、控制结构、函数、数组和字典的使用,以及类、对象、属性和方法的定义与使用。此外,还介绍了高级特性如协议和委托、类别和扩展、ARC、块和GCD。最后,通过示例项目展示了如何在Xcode中创建和调试Objective-C程序,以及如何使用Cocoa和Cocoa Touch框架。 适合人群:具备一定的编程基础,希望学习或深入了解Objective-C编程的开发人员。 使用场景及目标:适用于需要开发macOS和iOS应用的开发者,帮助他们掌握Objective-C的基本语法和高级特性,提高编程效率和代码质量。 其他说明:本文不仅提供了详细的理论讲解,还通过实际代码示例展示了如何在Xcode中创建和调试Objective-C项目,适合初级到中级水平的开发人员学习和参考。
本次开发的微信小程球馆预约系统,有管理员,用户两个角色。管理员功能有个人中心,用户管理,场地类型管理,球馆信息管理,球馆预约管理,系统管理。用户可以在微信小程序上面注册登录,查看球馆信息,对球馆进行预约操作。 开发本程序后台用到了SSM开发技术,微信端用的是uni-app技术。数据库采用关系数据库市场占有率最高的MySQL作为本程序使用的数据库,完全符合程序使用并且有丰富的拓展余地。 用户在微信小程序注册登录后可以看到首页,首页可以搜索球馆名称,也可以查看球馆资讯,下面是导航栏。 用户点击球馆信息可以进行预约,预约需要输入相关时间等信息。 我的里面可以修改个人信息,可以退出,还可以查看球馆预约信息和我的收藏信息。
1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用KEIL 标准库开发,当前在STM32F030C8T6运行,如果是STM32F030其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、编译时请注意提示,请选择合适的编译器版本。
廖鹏盛 - 时代进行曲.zip
白色大气风格的人体艺术摄影网站模板下载.zip
白色大气风格的服装设计师模板下载.zip
白色大气风格的景观设计HTML网站模板.zip
优质的机器学习资源是当今科技领域的热点,其中TensorFlow作为谷歌公司的开源库,成为最受欢迎的深度学习框架之一,广泛应用于各类项目中。TensorFlow提供了丰富的功能和灵活性,使得开发者可以轻松构建和训练复杂的神经网络模型,处理图像、文本和其他类型的数据。由于其开源性质,拥有庞大的社区支持,用户可以放心使用,并从开源社区中获取宝贵的经验和资源。 mnist数据集是机器学习领域的经典数据集之一。它包含着大量的手写数字图像,供开发者用来训练和测试各种算法和模型。这个数据集的规模相对较小,因此对于绝大多数人来说,无论是数据的下载还是训练过程,都不会对电脑性能提出过高的要求。这使得mnist成为了理想的入门数据集,适合初学者探索和理解机器学习算法的基本原理。 结合Pygame与TensorFlow,你将能够为机器学习实验创建出图形化界面,以及实现交互式处理。Pygame是一款面向游戏和多媒体应用的Python库,但同样也可以用于数据可视化和图形化交互。利用Pygame,你可以展示训练过程中的图像输出、模型的预测结果等,增强对机器学习算法运行情况的直观认识。而且,Pygame的简单。内
基于两种坐标系的超螺旋滑模观测器的永磁同步电机pmsm无位置(速度)传感器控制模型 支持 dq旋转坐标系和静止坐标系建立smo 引入二阶滑模超螺旋算法替代一阶滑模 dq坐标系引入锁相环PLL估计转速及转子位置 有效削弱抖振 赠送超螺旋滑模搭建推导文档及相关参考资料 仿真模型
汇编实验算数运算程序设计.docx
小区监控视频监控方案.doc
白色大气风格的HTML商务模板下载.zip
白色大气风格响应式运动健身瑜伽企业网站模板.zip
单片机实验仿真设计报告
白色大气风格的设计公司整站网站模板下载.zip
白色大气风格的html商务模板.zip
白色大气风格的英文网站模板下载.zip
白色大气风格的科研教育模板下载.zip
本摄像头ov7670驱动程序已经通过本人的验证可以正常运行,不同的stm32开发板只需要修改引脚即可使用