SQL Server性能调优入门(图文版)

SQL Server Profiler 一、SQL Server Profiler 介绍 SQL Server Profiler 是一个图形界面和一组系统存储过程 作用: 图形化监视SQLServer查询; 在后台收集查询信息; 分析性能; 诊断像死锁之类的问题; 调试SQL语句 模拟重放SQL Server活动; 也可以使用SQL Profiler捕捉在SQL Server实例上执行活动。这样的活动被称为Profiler跟踪。 ... 阅读详情

 

第一步,在业务高峰期抓取样本数据(2个小时左右)。采用的工具是sqlserver自带的profiler,也叫事件探查器,如下图:

进入后,点击最左面的按钮,建立一个新的跟踪:

登录需要用DBO权限,所以可以用sa登录,也可以用windows集成验证方式(如果当前登录的就是sqlserver的话)

新建跟踪,一共有4个tab页进行配置,首先看第一个。跟踪名称不用更改,默认的即可。保存一共有两种方式,一是文件,扩展名是.trc(这种方式方便你把客户那里的跟踪结果发给你),其二是数据库中的表。

为了分析方便,我们把它另存为表。此时sql提示你重新进行登录,这里我们把表保存到master中

假设表名字叫做jq(如果有重复的,系统会提示是否覆盖)

确定后回到了刚才的第一个tab页中:

然后切换到第二个选项卡中:

左面列出了各种事件类(Event Class),右面是当前已有的事件类。对于性能调优,我们不需要安全审核、会话信息,点击删除按钮即可:

继续切换到第三个tab页上,这里的数据列默认就够了,当然,如果你看着不顺眼,可以把Appname/NT username等都删除。

最后一个tab页上,我们需要把系统自己产生的事件ID屏蔽掉:

把那个排除系统ID进行check即可,如下图:

所有项目配置好后,点击“运行”按钮。持续运行两个小时左右即可(业务高峰期,能典型的反应客户最近一段时间内的业务模式)

好了,第一步的准备工作完成了,等待一段时间后,我们开始检查刚才自动保存到master中的表jq。

第二步,开始查找影响速度的地方。

打开查询分析器(sql analyzer),登录到master中,从 表jq里面按照I/O倒序,读取若干个sql。根据我的习惯,一般是读取1000条记录。为什么根据I/O来找呢,而不是根据时间来找呢?原因很简单,一句SQL执行,“稳定”的是I/O,而duration是一个不稳定的因素。我们进行sql调优的目的,就是降低I/O成本,从而提高效率。(一般而言,I/O降低了,duration自然就会降低)详细内容,参考我以前的post:http://blog.joycode.com/juqiang

执行完成后,我们仔细看下面的输出。

1、 XL_TALLY_Proc04这个sp的reads最大,将近100w,duration也达到了25秒多。

2、 Erp_IM_GMBill_GetBill这个sp的I/O不算大,才7w,duration平均都在1秒多点。但是这个sp执行的次数非常多。

经过询问客户,XL_TALLY_Proc04这个sp执行的频度很低,一天也就一两次,但是Erp_IM_GMBill_GetBill大概5分钟就要一次。这样整体I/O就占用的非常大。

所以这里我们要重点分析Erp_IM_GMBill_GetBill这个sp,而不是第一个!

总结一个原则就是:调整的重点是客户最关心的内容,是执行频度最高、看起来I/O又比较大的那种。I/O最大的,不一定是我们要优先解决的内容。

第三步,开始分析刚才看到的那个语句。既然我们要分析I/O,那么就要把I/O打开,这样每次调整sql,我们都能随时看到I/O的变化情况。这句很有用处地:set statistics io on

单纯看I/O变化,我们会晕倒的。因为我们不知道自己做的任何改动,对I/O是如何产生影响的。所以,还要看sql的执行计划是怎佯的。 在查询分析器中,我们按Ctrl+K,或者如下图的菜单,check上即可。

好了,准备工作都做好了,下面开始干活了。

我们首先看sql语句的调优,假设下面这条sql语句性能低下:

上面的sql一共读取了6636条数据,逻辑读是1126。那么这个I/O是否合理呢?大了还是小了?还有改进的余地吗?我们看执行计划:

哦,一共4个咚咚在里面。Index seek的成本占了2%, index scan的占了47%,hash match占了51%,select最终是0%。我们应该牢记第二个原则,所有的index,尽可能的都走index seek。

我们看一下billsoflading的索引信息:

当前索引为什么走scan,这里就不说了,感兴趣的可以随便找一本介绍数据库索引的书籍来看看即可。根据我以前那篇blog的描述,我们知道应该建立一个复合索引(也叫convered index):boldate+companyid+bolcode

然后我们重新执行sql,看看I/O变化情况:

Ooh,非常cool!logical reads降低到了50。为什么会这样呢?我们看一下执行计划:

原来是index scan变成了index seek,效率自然大大的提升!

Sql语句在index上调优的方法,基本就是这样。我们继续看sp的。

 

对于sp的调优,有一点是和sql调优不同的:sp内部的逻辑处理可能非常复杂。单纯从查询分析器中,我们无法得知哪一小块的sql执行的I/O最大,我们只能看到一个总体的描述。所以,我们要知道sp内部的信息。

首先,了解自己当前的spid是多少。一种方法是select @@spid,另一种方法是看查询分析器下面的status bar的信息。

Ooh,我的spid是101。(上图的最下面那个tips)

然后我重新打开profiler(事件探查器),重新建立一个跟踪,这里面要修改第二个tab页的信息,把左面事件列“存储过程”中的SmtpCompleted加上

增加后的样子如下:

然后修改第4个tab页,把刚才看到的spid=101的信息填上:

点击运行后,这样profiler只能抓到在查询分析器中,spid=101那个窗口发送的sql。我们切换回查询分析器,执行有问题的sp,执行完成后,我们再回到profiler,点停止按钮。一个sp内部所有执行的sql,都被分开了!

这次的结果假设保存在了jq2表中,我们把所有执行的小片sql都列出来:

第一个是sp执行后的总体结果,I/O为62328,就是这个sp自己的。第二个是向临时表中插入数据,I/O为61514,我们很容易看到,这一句占用了整个sp的大概95%以上的成本。如果我们把这句insert into #temptable搞定,整个sp的成本自然就下来了。所以我们需要把这句insert搞出来。

但是慢着!default情况下,sqlserver的results只显示很少的字符,第二行的sql,我们根本抓不全的,所以我们需要修改一下设置。在查询分析器的工具-选项菜单中,切换到“结果”这个tab页,修改每列最多字符个数为8192(这是最大的允许值),然后点击“确定”按钮,重新从jq2中读取信息。也许你会问,如果某个sql特别长,怎么办?其实很简单,在你的代码中把这句sql单独写到log中,或者直接修改sp,把这句print出来即可。

Ok,我们把这句insert sql抓下来后,放到查询分析器中。因为temptable我们没有它的结构,所以我们把insert部分注释掉,看后面的select语句。执行后,ooh,在goodsmovement表上的成本是57834。

老办法,我们继续看执行计划:

其实,现在又回归到了sql调优的步骤,下面的工作我就不写啦!

 

这个步骤,看起来很简单,希望大家对于sql调优(索引部分)心中都有这么一个概念,知道第一步作什么,第二步作什么。还是那句话,索引调优,基本上是最简单的。但是貌似简单的东西,我们越应该重视。你随便找一个应用跟踪一下,各种效率低下的索引,会让你实在#¥*#(**……¥

最后,看看偶的桌面,14集何时能够出来呢?期待中……

SqlServer性能检测和优化工具使用详细(sqlserver profiler) 工具概要 如果你的数据库应用系统中,存在有大量表,视图,索引,触发器,函数,存储过程,sql语句等等,又性能低下,而苦逼的你又要对其优化,那么你该怎么办?哥教你,首先你要知道问题出在哪里?如果想知道问题出在哪里,并且找到他,咱们可以借助本文中要讲述的性能检测工具–sql server profiler(处在sql安装文件–性能工具–sql server profiler) 如果知道啦问题出现在哪里,如果你又是绝世高手,当然可以直中要害,写段代码给处理解决掉,但是如果你不行,你做不到,那么也无所谓,可以借助哥 阅读详情

相关推荐

SQL Server 2012从零开始学实战教程

T-SQL是Microsoft SQL Server专有的SQL方言,支持标准SQL的功能,并扩展了变量、控制流语句、函数、异常处理等编程特性。理解T-SQL的语法结构是掌握其使用的关键。

weixin_34268462的博客 787

数据库跟踪——SQL Server Profiler详解

SQL Server Profiler这个工具是SQL Server数据库自带的语句执行跟踪工具,常使用于分析软件修改数据库时所执行的语句,适合用来研究软件运行数据库的原理。如果你的工作是软件运营的工作,那么这个工具还是比较常用的。

weixin_50859534的博客 1万+

SQL Server 2005安装配置图文指南

SQL Server 2005 是微软推出的重要企业级数据库管理系统,它在数据库技术领域引入了众多新特性,包括增强的集成服务(SSIS)、分析服务(SSAS)和报表服务(SSRS),极大提升了企业数据处理能力。该版本支持大规模并发访问与复杂事务处理,具备良好的安全性与可扩展性。其典型应用场景涵盖企业数据仓库构建、实时业务分析、报表自动化生成及跨系统数据集成等关键业务流程。

weixin_34268462的博客 1472

SQL Server Profiler参数说明

上图依次说明为: TextDate 依赖于跟踪中捕获的事件类的文本值; ApplicationName 创建 SQL Server 连接的客户端应用程序的名称。此列由该应用程序传递的值填充,而不是由所显示的程序名填充的; NTusername Windows 用户名。 LoginName 用户的登录名(SQL Server 安全登录或 Windows 登录凭据,格式为“域\用户名”) C...

weixin_30708329的博客 296

SqlServer性能工具Profiler 介绍

第1章 如何打开SQL Server Profile 在企业管理器界面(已连接到相关数据库)依次打开:tool —> SQLServer Profiler —> New Trace(新建跟踪器)—> 链接到相应数据库服务器(connect)—> 运行跟踪(run)—> Clear Trace Window()清除跟踪窗口—>。。。 此时网页同时打开,做相关操作,跟踪窗口即相继显示您在网页操作过程中所执行过的所有T-SQL语句,Pause或Start,点击各个执行过的T-SQL语句,逐个排查。

(一)Tushare Pro教程:股票基本数据接口

 一直使用tushare作数据源,这里开个教程大家一起学习。 一、介绍        tushare是一个python股票数据源,现已升级到tushare pro版本,新版本在数据稳定性和获取速率上大幅提升。与wind、东财等收费数据源相比,tushare pro算是金融数据界的良心之作,其为从事金融工程、量化研究等方向的同学们提供了便利。tushare pro还有一点突出的特色就是已经将股票...

虎毛的博客 4万+

SQL Server性能调优入门(图文版)(转)

SQL Server性能调优入门(图文版) 第一步,在业务高峰期抓取样本数据(2个小时左右)。采用的工具是sqlserver自带的profiler,也叫事件探查器,如下图: 进入后,点击最左面的按钮,建立一个新的跟踪: 登录需要用DBO权限,所以可以用sa登录,也可以用windows集成验证方式(如果当前登录的就是sqlserver的话) 新...

weixin_30718391的博客 209

光伏发电预测(LSTM、CNN_LSTM和XGBoost回归模型,Python代码)

一旦结果与预测差距较大,可能存在光伏系统的问题,需要找出原因,然后采取适当措施来修复光伏系统并做出更好的决策。例如,根据准确的预测,光伏系统运营商可以平衡电力消耗,并将多余的电力储备用于紧急情况。然而,光伏系统的发电量估算是一个挑战,因为光伏系统的发电量受到天气条件的极大影响。整个项目文件夹(第一个文件夹为xgboost模型相关的包文件,xg.py是xgboost模型英文注释版本,xg_chinese.py是xgboost模型中文注释版本)表示空气的温度,通常以摄氏度(°C)或华氏度(°F)为单位。

2301_79699110的博客 3030

SQL Server 2022从入门到精通

本文主要介绍了SQL Server 2022从入门到精通,希望能对学习数据库,尤其是学习SQL Server的同学们有所帮助。 文章目录 1. 前言 2. 书籍推荐 2.1 本书特色 2.2 本书作者 2.3 本书目录 2.4 适合读者

weixin_43178406的博客 2万+

LangGraph实战:用Plan-and-Execute模式5步搭建智能问答机器人(附Tavily搜索集成)

本文详细介绍了如何利用LangGraph的Plan-and-Execute模式,通过规划、执行、动态调整三个核心阶段,构建一个能够处理复杂多步骤问题的智能问答机器人。文章提供了从环境配置、状态管理到核心节点(规划、执行、重新规划)实现的完整实战指南,并集成了Tavily搜索工具,展示了如何将智能任务规划应用于实际信息查询场景。

weixin_29258297的博客 341

【PPS便携式移动电源】如何透彻了解便携式移动电源,仅需要十分钟阅读即可

PPS 便携式储能电源的发展前景广阔,受益于户外经济爆发、应急备灾需求提升及 “双碳” 政策支持,全球市场规模预计持续增长,2025 年出货量将达 2380 万台,未来将向大功率大容量、光充一体化、智能化方向发展,还会拓展家庭储能、移动医疗等新场景,同时钠离子电池应用、双向逆变技术升级将进一步推动行业发展。

昔时扬尘处 272

SQL SERVER 性能调优入门

因为公司的项目在上线运行后遇到了数据库操作的性能问题,需要在不改动代码的情况下优化数据库性能,故查找了相关资料,现将心得写下.       因为公司的项目在上线运行后遇到了数据库操作的性能问题,需要在不改动代码的情况下优化数据库性能,故查找了相关资料,现将心得写下.1.数据库的性能瓶颈大多集中在查询语句,对于SQL SERVER而言,首先要使用事件查看器筛选出哪些SQL语句和存储过程存在性能问题.

1142

ROS从入门到精通2-7:Gazebo仿真之动态生成障碍物

动态生成障碍物在机器人导航、碰撞避障算法测试、多机协同等领域应用广泛,可以帮助开发人员快速测试,本文介绍该技术并提供基于ROS Gazebo的实现

FRIGIDWINTER的博客 4898

SQL server 2008 r2 安装图文详解

文末有官网下载地址、百度网盘下载地址和产品序列号以及密钥,中间需要用到密钥和序列号的可以到文末找 选择网盘下载的下载解压后是镜像文件,还需要解压一次直接右键点击解如图所示选项,官网下载安装包的可以跳过前两步 等待解压完,过程可能会比较慢 解压完后双击如图所示选项 安装SQL Server 2008R2需要.NET Framework 3.5 SP1支持 这

林栖者—戏梦如生 24万+

AI测试入门:如何测试AI对话模型/智能体?「详细介绍」

作为测试人员,我们需要掌握特定的技能和方法来有效地测试这些复杂的AI对话模型和智能体。传统的软件测试方法在这里可能不再完全适用,我们需要开发新的测试策略和技术来应对AI系统的独特特性。在这篇文章中,我们将深入探讨如何测试AI对话模型和智能体。

blues_C的博客 6856

姿态传感器/陀螺仪之BMI270应用原理图设计

BMI270是一款由博世(Bosch)推出的高性能、超低功耗惯性测量单元(IMU),专为可穿戴设备、智能设备及物联网应用设计。

corlin6688的博客 2862

SQL Server的安装和使用入门_2022详细图文教程

它使用 Transact-SQL(T-SQL),一种扩展的 SQL 语言,来管理数据。SQL Server Analysis Services (SSAS) 和 SQL Server Reporting Services (SSRS):提供强大的数据分析和报告功能。SQL Server Enterprise:提供最全面的功能集,适用于大型企业级应用,包括高级分析、数据仓库和机器学习等。接着继续配置SQL Server,点击“新建SQL Server独立安装”。点击“安装”按钮,等待安装完成。

AV_VA1的博客 947

scratch绘制旋转彩球 2023年9月电子学会图形化编程scratch编程等级考试四级真题和答案解析

​ scratch绘制旋转彩球 2023年9月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 1、准备工作 (1)删除小猫角色,从角色库选择Ball角色; (2)默认空白背景。 ​

青少年编程学习指导 1367
上一篇: SqlServer命名规范
下一篇: SQL Server字符串分割
ulark
博客等级 码龄17年 31粉丝 530原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值