作为开发人员,在实际数据库应用中,难免遇到SQL Server查询、更新或者插入等操作慢的情况,那么如何去分析’定位具体在哪步慢呢?下面对于SQL Server数据库慢 分析和监控工具SQL Server Profiler使用详解进行说明,具体步骤和过程如下:
一、 在SQL Server Management Studio->工具-->SQL Server Profile打开
SQL Server Profiler工作原理
那么对于上面的图:
1、SQL Server事件是指由SQL Server本身内部触发的活动,或者由客户端与SQL Server进行连接时在SQL Server内部触发的活动。事件包含很多不同的种类。
2、因为事件发生在SQL Server的内部,SQL Trace的任务就是根据Filter来捕获自己感兴趣的事件。
3、一旦事件被SQL Trace捕获,那么发生的事件与相关的事件信息就会被保存在内存的队列中。
4、SMO(Server Management Objects),是可以直接的访问SQL Server的对象模型。其实,SQL Trace对于我们而言,就可以将之看成是一个黑盒,我们能做的就是通过一些方式和工具去与这个黑盒交互,SQL Profiler和系统的存储过程就是这样的工具。
二、新建跟踪任务
登陆成功后可看到主界面,文件-->新建跟踪
切换到“事件选择”选项卡,选择需要监控的事件,这次主要是监控慢SQL,因此只勾选了SQL:BatchCompleted的所有选项,如果有存储过程,则勾上RPC:Complated的选项
三、 慢SQL事件选择
点击 列筛选器,如下
我们从上图上依次说明为:
TextDate | 依赖于跟踪中捕获的事件类的文本值 |
ApplicationName | 创建 SQL Server 连接的客户端应用程序的名称。此列由该应用程序传递的值填充,而不是由所显示的程序名填充的; |
NTusername Windows | 用户名 |
LoginName | 用户的登录名(SQL Server 安全登录或 Windows 登录凭据,格式为“域\用户名”) |
CPU | 事件使用的 CPU 时间(毫秒)。 |
Reads | 由服务器代表事件读取逻辑磁盘的次数。 |
Writes | 由服务器代表事件写入物理磁盘的次数。 |
Duration | 事件占用的时间。尽管服务器以微秒计算持续时间,SQL Server Profiler 却能够以毫秒为单位显示该值,具体情况取决于“工具”>“选项”对话框中的设置 |
ClientProcessID | 调用 SQL Server 的应用程序的进程 ID。 |
SPID | SQL Server 为客户端的相关进程分配的服务器进程 ID。 |
StratTime | 事件(如果可用)的启动时间。 |
EndTime | 事件结束的时间。对指示事件开始的事件类(例如 SQL:BatchStarting 或 SP:Starting)将不填充此列。 |
BinaryData | 依赖于跟踪中捕获的事件类的二进制值。 |
配置列筛选器,选择Duration项,过滤掉低于100ms的SQL记录,只看大于等于100ms的SQL,点击确定并运行,现在测试,就先不作配置,将会显示所有SQL日志。
如图可见已经启动profile,接下来执行效果
Duration列为执行完成用时,通过这个字段可以看出SQL用时,点击这一行,下面会显示出这个SQL的具体语句,可见这是一个存储过程的语句,比较复杂,因此执行时间也较长。
有了这个工具,我们可以针对这些语句进行优化,我们的优化思路是:
1、降低存储过程的使用频率与复杂度,把复杂逻辑交给程序去处理
2、找出where查询条件中未配置索引的列,加入索引
下一篇:Mysql 查询当前日期下某个字段重复且有多条记录的数据_mysql 通过时间查询出来的数据有重复-CSDN博客