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

作者简介

案例说明

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

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

1、问题分析

执行计划如下:

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

2、深入分析

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

3、解决方案

解决的代码如下

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

案例启示

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

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

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-11-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

spark源码导读一

1,业务需求,现有框架满足不了项目需要,需要对源码的一部分进行修改或者叫做二次开发,需要阅读部分源码。那么这个针对性就很强了,修改不符合需求的部分。

871
来自专栏腾讯云数据库(TencentDB)

如何利用MongoDB打造TOP榜小程序

大家好,我叫李晓慧,我没有一页PPT介绍自己,我就自己简单说一下,我以前是一个开发,我感觉很孤独,因为开发的女生很少,我转过两次组,然后一开始做C++开发,后来...

3366
来自专栏知晓程序

小程序微信认证太麻烦?那是你没看这篇文章 | 小程序接入指南

1544
来自专栏大数据文摘

爬虫还在用Python?我与Node.js不得不说的故事

2.5K4
来自专栏程序人生

[技术产品] 用node-webkit做桌面应用

node-webkit是两周前我才刚刚认识的桌面开发利器。那天程序君写了篇关于github atom的文章,中间有段文字做了大胆的猜测:「这就是Atom最大的亮...

4089
来自专栏张善友的专栏

Windows SharePoint Services 3.0 Service Pack 1

微软于2008年3月6日发布了Windows SharePoint Services 3.0 Service Pack 1,Windows SharePoint...

1839
来自专栏ImportSource

微服务业务开发三个难题-拆分、事务、查询(上)

微服务架构变得越来越流行了。它是模块化的一种方法。它把一整块应用拆分成一个个服务。它让团队在开发大型复杂的应用时更快地交付出高质量的软件。团队成员们可以轻松地...

5469
来自专栏腾讯云数据库(TencentDB)

微信小游戏流水过亿的技术揭秘 腾讯云数据库MongoDB攻略篇

腾讯云已为多个爆款微信小游戏提供服务,腾讯云数据库团队在多年MongoDB运营&支持微信小游戏服务经验总结,MongoDB产品经理李晓慧在7月26日在厦门举行的...

1.2K57
来自专栏新智元

微软谷歌再曝 CPU 新漏洞,Intel、AMD、Arm 全部遭殃

1532
来自专栏云计算D1net

云端无服务器架构:亚马逊网络服务(AWS)、谷歌云和微软云

5924

扫码关注云+社区