数据库有个大的接口日志表InterfaceRecord,表中有XML字段保存了接口报文,每个月新增6000多万的数据(大约300多GB),数据库有个JOB每周日晚上定时把表中1个月前的数据归档到历史库再保存3年时间(客户要求),表上有个复合索引createtime(创建时间),bipcode(接口编码),有一天运维反映程序页面通过createtime+bipcode精确的查询某个时间点的数据会一直超时。正常情况,这个查询是可以通过索引查找,在数毫秒之内就能得到结果的。

于时我直接到数据库去运行查询语句(select * from InterfaceRecord where createtime='' and bipcode=''),发现数十分钟查询也没有运行完,查看系统线程

      select SUBSTRING(ST.text, ( QS.stmt_start / 2 ) + 1,              ( ( CASE stmt_end              WHEN -1 THEN DATALENGTH(st.text)              ELSE QS.stmt_end              END - QS.stmt_start ) / 2 ) + 1),* from sys.sysprocesses  qs              outer apply sys.dm_exec_sql_text(sql_handle) st              where spid>50 and lastwaittype<>'MISCELLANEOUS' and spid<>@@SPID                or spid in(select blocked from sys.sysprocesses);

发现语句没有被其他进程阻塞(blocked=0),等待类型是I/O(lastwaittype=PAGEIOLATCH_SH),正在执行的语句(第一列)如下:

SELECT StatMan([SC0], [SC1], [SB0000]) FROM (SELECT TOP 100 PERCENT [SC0], [SC1], step_direction([SC0]) over (order by NULL) AS [SB0000] 
 FROM (SELECT [Createtime] AS [SC0], [Bipcode] AS [SC1] FROM [dbo].[Interfacelog] TABLESAMPLE SYSTEM (1.483665e+000 PERCENT) WITH (READUNCOMMITTED) ) 
AS _MS_UPDSTATS_TBL_HELPER ORDER BY [SC0], [SC1], [SB0000] ) AS _MS_UPDSTATS_TBL  OPTION (MAXDOP 1)

(PS:第一反应,这是什么鬼-_-,跟我运行的语句没有半毛钱关系)仔细分析查询,正在对InterfaceRecord表的createtime和bipcode字段做抽样查询(TABLESAMPLE),那就很明显了----正在抽样读取数据,以更新统计信息.

所以事情的经过应该是这样子的:

1、周日晚上的作业,删掉了表中1个月前的数据。

2、运行查询语句时,如果统计信息已经过期,就会先更新统计信息,再运行实际的查询

3、程序的超时设置的是30秒钟,每次还没有等更新完统计信息就超时了,所以统计信息一直没有更新成功。

找到问题,临时解决方案如下:

alter database <dbname> set AUTO_UPDATE_STATISTICS_ASYNC on

作用是运行查询语句时,发现统计信息已经过期,如果AUTO_UPDATE_STATISTICS_ASYNC设置为OFF,数据库会更新统计信息,再运行实际的查询(前面查询语句超时的原因),

如果设置为ON,数据库会根据过期的统计信息先运行查询语句,并在后台继续更新统计信息。设置完之后,查询语句恢复正常。

对于这种大的日志表定期进行归档,最好还是把表变成分区表,直接把整个分区SWITCH给一个临时表,然后TRUNCATE清空临时表,就可以从原来删掉数据所须的数小时变成数秒钟。这个等后面讨论分区的时候再做介绍。

统计信息自动更新导致查询超时相关推荐

  1. SQL调优--记一次表统计信息未及时更新导致查询超级慢

                某日同事丢给我一个看上去复杂的查询(实际就涉及两张表,套来套去)说只是换了日期条件,但一个查询5秒出数据,一个根本查不出来.现在整理下解决过程,及涉及的知识点. 若有不正之处, ...

  2. 统计信息自动收集任务失效原因排查

    环境:Oracle 11.2.0.3 RAC 问题:统计信息自动收集任务失效原因排查 1.查看自动任务的状态 2.进一步查看其它信息 3.解决问题 1.查看自动任务的状态 查看自动任务的状态,确认是e ...

  3. Oracle11g 统计信息——统计信息自动收集任务

    背景: 在使用cacti监控oracle数据库IO的时候发现每天晚上10点钟的时候oracle数据库读写明显增加,如下图所示: 对这个问题,后来查了一下是因为oracle在运行一个信息自动收集任务.o ...

  4. oracle 收集统计信息会锁表吗,统计信息锁住导致收集统计信息失败引起sql执行异常...

    这个是老生产谈的事情,统计信息不准确导致sql执行异常,此次记录的主要是表的统计信息被锁住导致无法正常收集统计信息导致sql执行异常: 收集表的统计信息: SQL> exec DBMS_STAT ...

  5. oracle tabe unlock_Oracle数据库之统计信息锁住导致收集统计信息失败引起sql执行异常...

    本文主要向大家介绍了Oracle数据库之统计信息锁住导致收集统计信息失败引起sql执行异常,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 这个是老生产谈的事情,统计信息不准确导 ...

  6. SQL Server 数据库表的统计信息的更新

    最近在调整基础信息数据时,新增了几个客户类型,意想不到的事情发生了,在使用新增的客户类型作为 查询条件查询报表时,居然出现了超时的现象,但是用其他以前的客户类型查询就没有问题,用一个以前增加的 客户类 ...

  7. PLSQL_统计信息系列10_统计信息过旧导致程序出现性能问题

    2014-11-15 Created By BaoXinjian 一.摘要 在性能的稳定数据库中,所有的job都需要在一定时间内完成 以前在一个银行系统中,突然某一个job原本在30minutes内完 ...

  8. win10自动更新导致显卡驱动出问题,No AMD Graphics driver is installed or.......的解决方案

    想必大多数人会忘记关闭win10该死的自动更新的功能,更新有时候会出现显卡驱动更新不及时的问题.解决方法如下. 解决办法: 法1.下载鲁大师,驱动人生升级驱动.优点:省事省心,但安装慢,是很慢,而且即 ...

  9. svn版本信息自动更新到源代码

    背景:在线上代码和线下代码不一致时,用这个时间先比对是很重要的,首先看时间确定是不是最新的代码,再进行问题排查是很有必要的.Subversion 的 svn:keywords 是一个非常有用的功能,可 ...

最新文章

  1. 推荐!Sublime Text 最佳插件列表
  2. 选择屏幕——按钮、单选复选框
  3. Pandas知识点-比较操作
  4. csrf攻击ajax,如何在使用ajax post时处理CSRF攻击?
  5. javap -c命令详解
  6. cat 查看文件内容,默认输出到屏幕
  7. oracle常见sql笔试题,一路SQL笔试题
  8. springboot面试题
  9. 收集五款常用的HTML编辑软件
  10. 移动数据Moving Data
  11. 【redis】8数据结构(5种基本+3种特殊)
  12. 区块链入门教程(10)--开发简单银行合约
  13. Unity中的宏定义
  14. dashucoding记录2019.6.8
  15. lil9341_使用Python评估Lil John的“拒绝接受什么”
  16. PDF如何编辑修改,怎么编辑PDF文字与图片
  17. 热电阻与热电偶的区别
  18. python网站设计开题报告_(完整word版)网站设计开题报告
  19. 1.2__S3C2440时钟简介
  20. 《网络信息安全》作业题和考试复习题

热门文章

  1. The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in u
  2. ListView和RecycleView的性能比对
  3. 同心圆的画法_BIM微课堂:一种简单的顶管中继间画法
  4. java 物联网 eclipse_Eclipse物联网
  5. OpenShift 4 - Istio-Tutorial (2) 部署三个微服务
  6. SQL COALESCE函数和NULL
  7. 什么使软件程序员成为专业人士?
  8. 基于Tesseract的Android OCR应用程序
  9. python绘制饼图双层_如何在python中绘制双变量数据的饼图?
  10. ionic4 组件的使用(一)