分享更有价值
被信任是一种快乐

怎么收集统计信息不影响数据库

文章页正文上

这篇文章主要讲解了“怎么收集统计信息不影响数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么收集统计信息不影响数据库”吧!大多数情况下,表的统计信息不准导致了优化器对于执行计划的错误计算,因此需要对表的统计信息进行更正,以便让优化器重新选择准确的执行计划。但是在生产情况下,随意的收集统计信息,则会给数据库带来隐患:1、对重新收集统计信息的表,对应的一些SQL可能需要重新硬解析生成执行计划。2、对于重新收集统计信息的表的部分SQL来说,可能会出现收集完统计信息了,但是执行计划更差的情况。3、在业务高峰期收集统计信息,会需要额外的资源开销,影响数据库的性能。在进行SQL优化时,通过查看执行计划,表的统计信息以及表的具体情况,去分析是否是由于统计信息不准导致执行计划有问题,当确定了是统计信息的问题时,不能盲目的去收集统计信息,需要进一步验证“重新收集统计信息可以提升SQL性能”。因此在针对“重新收集统计信息可以提升SQL性能”时,主要介绍一下如何免费主机域名去重新收集统计信息而不影响数据库中正在运行的SQL。在Oracle中,统计信息的收集,都是存储在对应的数据字典里,因此正常收集完统计信息,就会被对应的SQL去用来生成执行计划。但是,Oracle也提供了一种收集完统计信息却不会被记录在数据字典里,因此也不会被对应的SQL使用,只有在需要使用这些统计信息的时候,通过设置一些参数,才可以正常的使用这些统计信息。Oracle中可以利用DBMS_STATS里的Pending Statistics去操作可以控制新收集的统计信息不会被存储到数据字典。大致的意思:可以使用这种方法,针对统计信息正确与否,对执行计划影响的验证。接下来用一个测试来验证。1、创建测试表2、在owner列上创建索引3、统计表的统计信息,并且收集owner列的直方图信息:4、查看SQL的执行计划查看一下owner为demo和sys的数据情况:表demo共有87096行记录,其中owner为demo的有44行记录,owner为sys的有37815行记录。
查看下列SQL的执行计划:
通过执行计划可以看到,使用了索引范围扫描,cost为3通过执行计划可以看到,使用了全表扫描,cost为347更新表中的数据,但是不收集统计信息:
通过执行计划可以发现,使用了索引范围扫描,cost为3。此时的执行计划是错误的,返回的数据行数为59659,不适合在使用索引范围扫描,应该使用全表扫描。但是由于统计信息未更新,所以优化器还是认为表中的数据情况是之前统计信息里的,所以延用了之前的执行计划。需要重新收集统计信息,但是直接收集统计信息的话,会对表demo相关的SQL产生硬解析,并且此时的执行计划不一定就高效,因此需要对表demo收集统计信息,但是不让这些SQL使用统计信息。使用Pending Statistics的方法去收集统计信息,以保证其他SQL不会去使用新的统计信息,同时也可以去判断执行计划是否合理。1、设置表demo上的 PUBLISH 参数为false,默认为true该参数表示,收集完的统计信息,是存储到数据字典(正常情况),还是存储到私有区域。当为true的时候,表示存储统计信息到数据字典,可以被SQL使用当为false的时候,表示统计信息存储到私有区域,不能被SQL使用,除非设置了参数来使用这些统计信息2、收集表demo的统计信息3、把会话的 optimizer_use_pending_statistics 的参数设置为 true,默认为false该参数表示:在私有区域的统计信息是否被会话或者系统使用。当为true的时候,表示会话/系统 可以使用这些统计信息当为false的时候,表示会话/系统 不可以使用这些统计信息4、查看SQL的执行计划5、对存储在私有区域的统计信息操作方法1:把这些统计信息直接删除了,然后重新正常的收集统计信息方法2:把这些统计信息直接发布了,可以让SQL使用(存在隐患)6、设置表demo上的 PUBLISH 参数修改为true7、收集统计信息1、免费主机域名设置表demo上的 PUBLISH 参数为false,默认为true2、收集表demo的统计信息3、把会话的 optimizer_use_pending_statistics 的参数设置为 true,默认为false查看SQL的执行计划此时还是沿用之前的执行计划,索引范围扫描,说明新收集的统计信息并没有被使用到。修改参数:4、查看SQL的执行计划此时执行计划已经变为全表扫描,说明采用了新收集的统计信息。5、对存储在私有区域的统计信息操作这里选择把这些统计信息删除再次查看SQL的执行计划:
执行计划为最初的执行计划,索引范围扫描,说明使用的是旧的统计信息,没有使用新收集的统计信息。6、设置表demo上的 PUBLISH 参数修改为true7、收集统计信息:查看SQL的执行计划通过执行计划可以看到,使用了全表扫描,使用了新收集的统计信息。感谢各位的阅读,以上就是“怎么收集统计信息不影响数据库”的内容了,经过本文的学习后,相信大家对怎么收集统计信息不影响数据库这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是云技术,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: 怎么安装Oracle BBED工具

本篇内容介绍了“怎么安装Oracle BBED工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!BBED的介绍:BBED(Oracle Block Brower…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册