博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
性能压测,SQL查询异常
阅读量:5970 次
发布时间:2019-06-19

本文共 816 字,大约阅读时间需要 2 分钟。

    早上测试对性能压测,发现取sequence服务大量超时报错,查询线上的监控SQL:

    

  大量这个查询,我在DeviceID和Isdelete上建有复合索引,应该很快,而且我测试了一下,取值,执行效率很高,不会出现慢的情况。

但是通过SQL Profile工具监控,发现这个sql,执行的CPU和IO都是很高,取出profile监控出来的sql:

   exec sp_executesql N'select * from AppCustomerDevice where DeviceID=@DeviceID  and IsDelete=0',N'@DeviceID nvarchar(4000)',@DeviceID=N''

原来这条数据查出17多万条数据,所以执行很慢。后来沟通下来DeviceID='' 是一些错误数据,技术可以把这些IsDelete=0的数据改成IsDelete=1,改成1后,按情况SQL应该优化好了,

但是通过SQL Profile工具发现,还是这个sql执行起来很慢,看其执行计划还是走的全表扫描,让技术把这个参数化的写法改成非参数化,但是要发版,后来在@DeviceID=N‘2’ 随便取值还是IO很高。

  看情况是执行计划有午,要么固定其执行计划,加上 with(index=索引名),但是发版时间长,感觉就是统计信息不对,

  在这个库上执行了一下更新统计信息:  EXEC sp_updatestats  ,在清空一下缓存: dbcc freeproccache

  再次执行,发现用到索引。问题解决。

  总结:

    1,一直以为建索引就OK,其实要看查询sql这个的数据量有多少,刚好这个查询就是查得最大的,17多万条,而且全部取出,

    2,参数化查询后,执行计划未选择最优,可以考虑先更新一下数据库的统计信息 ,在清空一下缓存

转载于:https://www.cnblogs.com/zping/p/11053286.html

你可能感兴趣的文章
Delphi字符串函数Delete
查看>>
Ubuntu14.04 + Matlab2014a + caffe + cuda + cudnn环境搭建
查看>>
CCNA-EiGrp学习
查看>>
一些简单的编程练习题
查看>>
Video4Linux2 part 2: registration and open()
查看>>
12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间
查看>>
Vim命令之查找和替换
查看>>
tar time stamp in the future 报错 解决方案
查看>>
计算节点宕机了怎么办?- 每天5分钟玩转 OpenStack(43)
查看>>
review what i studied `date` - 2017-4-24
查看>>
面向方面编程(Spring AOP)
查看>>
深入理解移动开发的模板复用机制
查看>>
《3D数学基础系列视频》1.1向量基本概念
查看>>
zabbix之使用proxy实现分布式监控
查看>>
jquery高版本全选与全部选无法正常工作
查看>>
通过帧中继验证OSPF支持的不同网络类型
查看>>
Python OpenCV学习笔记之:分水岭算法分割图像
查看>>
11月国内网站统计:淘宝得益于双11流量直逼腾讯
查看>>
Android NDK JNI 的简单使用
查看>>
SVN 创建版本库
查看>>