SQL性能优化案例分析

这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享。

这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集各个上市公司的财报, 然后做各种分析, 数据图表展示, 使用的人数并不多, 仅百人左右。

2期打算面向行外用户, 刚开始预计同时在线人数不超过50, 就以50访问用户/秒的性能测试, 结果在把1期的图表类数据展示响应基本在5分钟左右, 属于严重不可用, 说说我们的服务器配置, 有2台网站前端承载用户访问, 做F5负载均衡, 也就是说一台约25用户/秒的访问量, 有2台数据库做AlwaysOn。通过代码断点跟踪很快确定了性能瓶颈在数据库响应这一层。

既然确定了是数据库的性能问题, 接下来我们就准备开始对服务器的性能进行跟踪, 我们选取了常用的性能指标(内存,CPU,网络,硬盘IO)进行跟踪,然后跑我们的性能测试。

结果显示, CPU基本在测试的过程中是100%, 内存也占用了98%, 数据库硬盘IO的响应时间也超过了2分钟,内存指标是正常的, 由此我们可以得出几个假设:

数据库在不断进行TSQL语句编译,在高并发的情况下可能造成CPU占用率一直很高。

数据库有索引查询需要优化。

数据可能存在死锁

确实存在一些表存在大量数据的情况

事实上我们检查到程序员在编写代码的时候, 并没有利用到正确使用数据库变量,而是动态的生成T-SQL语句, 导致在高并发的时候, 频繁的进行语句编译,这印证了我们的第一点。

再进一步的我们通过Profiler工具找到响应时间较长的语句进行分析, 查看实际的执行计划,  优化了查询条件, 增加了索引,及查询条件优化

令我们意外的发现,是在某一时刻,进行简单的一个表进行查询, 也会长达数十分钟之久, 执行EXECUTE sp_lock, 查到其中一个应用程序正在使用insert into select from 批量插入数据到这一表中, 造成这一表读被锁定, 改用bulk insert解决了问题

1期也使用了一年中, 其实一些表的数据确实也已达到上亿的级别, 考虑到数据图表展示都是以一个月的数据为单位, 我们对这个表的数据进行了分区, 每个月的数据以单独的数据文件进行存储,实际上也取得了很好的效果。

最后在性能测试中, 我们的响应时间从原来的5分钟减少到2秒内, 符合了我们需要。 

 

转载于:https://www.cnblogs.com/frankzye/p/5808909.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端下载图片、pdf、excel、world文件;前端下载图片和pdf文件;前端a标签下载图片和pdf文件;下载文件名称不生效原因。

参考文章1 参考文章2 以下的下载是,拿到了后端给的下载图片的接口地址url > 方法1:将文本或者JS字符串通过 Blob 转换成二进制下载 优点:可以下载,也可以保存名称。 //文件流参数和图片名称 function downloadTxt(str, filenam…

JavaBean规范

(1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public ,如: public class user{......}(2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器 &#…

USB 设备类代码表

USB Class Codes 官方地址:http://www.usb.org/developers/defined_classUSB defines class code information that is used to identify a device’s functionality and to nominally load a device driver based on that functionality. The information is conta…

Redis安装和使用指南

From: http://mwt198668.blog.163.com/blog/static/48803692201132141755962/ Redis安装指南 作者:Red_Ant 时间:2011-04-20 简 介 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string…

员工打卡课后小项目

public class Fm{//员工类public string Id { get; set; }public string Name { get; set; }public int Age { get; set; }public string Gender { get; set; }} public class SI{//打卡类public string Name { get; set; }public DateTime Begin { get; set; }public DateTime…

通过后端接口,预览文件流图片;预览和下载文件流

后端接口返回的是文件流 1.如果是pdf等文件,通过iframe结合文件流,做到文件的下载和预览 // 预览文件openPdf1 () {// 后端下载文件流的地址接口let url G_CGI_PHP.group.documentDownload ?id this.paymentImage1const newWindow window.open()ne…

SAP里删除trace文件的方法

1. stat.DAT:性能统计文件。 这个统计文件增长很快,不小心就涨到900MB以上。 对应的OS路径: D:\usr\sap\DEV\DVEBMGS00\data 处理方法: ST03N -> Expert mode -> Collector and Perfromance DB ->Statistics Records & File -> D…

HID设备类详解

HID设备类 Base Class 03h (HID – Human Interface Device) This base class is defined for devices that conform to the HID Device Class Specification found on the USB-IF website. That specification defines the usable set of SubClass and Protocol values. V…

DatePicker动态设置picker-options 中的disabledDate属性操作;

一、场景&#xff1a; 有两个时间选择器A和B。A的时间任意选&#xff0c;B的时间必须选择A之后的时间。此时就需要给B设置可选时间区间&#xff0c;而且是动态的值&#xff0c;既动态设置picker-options 中的disabledDate。 二、代码片段 html&#xff1a; <el-col :span&…

Linux使用笔记: 设置Samba服务器中新建文件/目录的权限

From: http://easwy.com/blog/archives/set-file-directory-attribute-for-linux-samba/ 通过Samba服务器实现windows和Linux之间的文件共享&#xff0c;相信是绝大多数人的选择。通常我们都会使用Samba的缺省配置&#xff0c;这样&#xff0c;每次通过Samba从Windows向Linux中…

[转]序列化悍将Protobuf-Net,入门动手实录

最近在研究web api 2&#xff0c;看了一篇文章&#xff0c;讲解如何提升性能的&#xff0c; 在序列化速度的跑分中&#xff0c;Protobuf一骑绝尘&#xff0c;序列化速度快&#xff0c;性能强&#xff0c;体积小&#xff0c;所以打算了解下这个利器 1&#xff1a;安装篇 谷歌官方…

单线程写多线程读安全的结构体

大型网络游戏服务器的逻辑大多采用单线程设计&#xff0c;典型的就是一个线程处理一个区域(地图),跨区域通过跳转实现&#xff0c;这样&#xff0c;不同区域的对象在逻辑上是不发生交互的。 这样在一台服务器上开启N个线程就可以处理N个区域。但一个线程处理一个区域毕竟有其瓶…

Linux 内核打印级别

printk的打印级别 #define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "<2>" /* critical conditions */ #define KERN_ERR "…

时间戳转日期;日期转时间戳;

一、 拓展:如何用js将日期转换成时间戳 new Date(2022-06-01).getTime() //1654041600000 //这个safari无法将时分秒转时间戳// 推荐用这个&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

swoole之代码热更新实现

From: http://www.th7.cn/Program/php/201405/211057.shtml 持续的思考: 本人参与的swoole项目有幸被很多朋友使用&#xff0c;我也大力向周边的一些朋友推荐&#xff0c;随着swoole的版本迭代更新&#xff0c;已经足够稳定了&#xff0c;在阿里&#xff0c;腾讯&#xff0c;yy…

题目1168:字符串的查找删除

题目1168&#xff1a;字符串的查找删除 时间限制&#xff1a;1 秒 内存限制&#xff1a;32 兆 特殊判题&#xff1a;否 提交&#xff1a;5092 解决&#xff1a;2097 题目描述&#xff1a;给定一个短字符串&#xff08;不含空格&#xff09;&#xff0c;再给定若干字符串&#x…

C# 文件操作详解(三)---------Directory类

前面两篇介绍了File类和FileInfo类&#xff0c;对于文件的操作基本够用&#xff0c;但是后面还会补充一下FileStream相关的操作&#xff0c;例如StreamReader和StreamWriter的内容。本文主要介绍Directory类的使用&#xff0c;让我们一起看一下Directory类为我们提供了哪些操作…

js实现复制并能保留原格式粘贴;vue中点击复制粘贴功能;vue复制功能(不需要插件);

使用场景&#xff1a;vue项目中遇到点击按钮&#xff0c;复制文本的功能。复制成功后可以黏贴。 <div click"copyDesc">复制</div>methods:{copyDesc () {let url 这是复制的内容&#xff0c;可以是data的变量值或传递的参数等换行文字1换行文字2 let…

Libusb开发教程一 安装

1. 从官网下载需要使用的离线资源包&#xff1a; 进入 libusb.info 的 Download 页 下载 libusb-1.0.9.tar.bz2 下载 libusb-compat-0.1.4.tar.bz2 2. 实验平台 OS: Ubuntu16.04 Kernel: 4.4.0 3. 安装过程 <1> 拷贝步骤一中的离线包到 Linux 系统目录&#xff0c;一般…

在网上接外包

在网上接外包。这个需要一些沟通能力和英文能力 以下是一些可以接到外包的网站&#xff1a; 国内&#xff1a; http://www.taskcity.com/很难接到外包&#xff0c;今年在该网站只完成两个项目。 http://www.sxsoft.com/情况同上&#xff0c;一个小项目。 国外&#xff1a; http…