前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >“月底难过”- 都是统计信息惹的祸

“月底难过”- 都是统计信息惹的祸

作者头像
数据和云
发布2018-03-06 17:08:48
6430
发布2018-03-06 17:08:48
举报
文章被收录于专栏:数据和云数据和云

作者简介

案例说明

某大型电商公司数据仓库系统经常出现在月底运行缓慢的情况,但在平时系统运行却非常正常。这是因为月底往往有月报等大批量作业运行,而就在这个时间点上,常常会出现缓慢情况,因此业务人员一到月底就非常紧张。这也成了一个老大难问题,困扰了很长时间。

DBA介入处理,发现一个很奇怪的现象:某条主要SQL是造成执行缓慢的主因,其执行计划是不确定的,也就是说因为执行计划的改变,导致其运行效率不同。而往往较差的执行计划发生在月底几天,且由于月底大批作业的影响,整体性能比较饱和,更突显了这个问题。针对某个出现问题的时间段,做了进一步分析,结果表明是由于统计信息的缺失导致了优化器产生了较差的执行计划,并据此指定了人工策略,彻底解决了这个问题。

1、问题分析

执行计划如下:

执行计划中,多表关联并用了嵌套循环,这点对于OLAP系统来说是比较少见的。一般优化器更倾向于使用SM和HJ。进一步检查发现其成本竟然是0,怪不得优化器使用了嵌套循环。

2、深入分析

检查发现索引数据统计信息异常,这是分区索引,仅两天的分区统计信息都是0。导致优化器认为嵌套循环的执行效率更高,而不是使用哈希连接。结合业务发现,月底是业务高峰期,对于系统统计信息的作业收集,在指定的时间窗口内无法完成。最后导致统计信息不完整,优化器采用了错误的执行计划。

3、解决方案

解决的代码如下

分析完对象的统计信息即恢复正常。

案例启示

统计信息是优化器优化的重要参考依据,一个完整、准确的统计信息是必要条件。往往在优化过程中,第一步就是查看相关对象的统计信息。

分区机制是Oracle针对大数据的重要解决手段,但其也很容易造成所谓“放大效应”。即对于普通表而言,统计信息更新不及时可能不会导致执行计划偏差过大;但对于分区表、索引来说,很容易出现因更新不及时出现0的情况,进而导致执行计划产生严重偏差。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档