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

作者简介

案例说明

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

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

1、问题分析

执行计划如下:

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

2、深入分析

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

3、解决方案

解决的代码如下

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

案例启示

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

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏知晓程序

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

1114
来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–应付账款(158)-9 F110使用自动付款程序过账付款

4.10 F110使用自动付款程序过账付款 预付款,贷项凭证和发票之间的差异将被付款程序自动过账。 您可以用经典付款媒介程序或付款媒介工作台来产生付款媒介。在下...

36412
来自专栏ImportSource

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

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

4619
来自专栏程序人生

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

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

3539
来自专栏一名叫大蕉的程序员

一场关于逻辑应该写在哪里的争论No.93

先说结论,我支持将逻辑写在 Java 等应用系统中。 观察了一下,传统企业以及绝大部分转型中的企业的 Java 应用中,很神奇的是,他们的开发人员包括我自己以...

5128
来自专栏大数据文摘

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

1.1K4
来自专栏Spark学习技巧

spark源码导读一

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

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

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

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

1.1K57
来自专栏Golang语言社区

Golang语言-写一个检测 tcp udp 状态的包

因为要跟着 dockerpool 的基友写 Docker 管理的程序,所以今年的目标是学习 go 语言。 看完 go 的入门教程,高深的代码还看不懂,所以决定先...

3525
来自专栏FreeBuf

挖洞经验 | 看我如何发现Google的第三方应用服务漏洞

今年三月我参与了谷歌软件工程师的面试,没想到完全出于意外,我却发现了谷歌(Google)某个应用服务的漏洞,其也成为了我的第一个赏金漏洞。一切请听我细细道来。 ...

2047

扫码关注云+社区