使用SQL事件探查器优化SQL查询

时间:2012-04-29 11:10:12

标签: sql sql-server profiler

如果我的proc被调用,我在SQL Profiler中有以下记录。

CPU - 78,读取 - 3508,写入 - 0,持续时间 - 81

上面的数据对于我网站上的70人的并发点击是可以的,我的proc在用户正在访问的evey页面上调用,我的服务器上的性能监视器显示当我启用SQL proc调用时,anonmyous用户命中不断增加。

请建议我可以查看的内容和位置!!,我的proc查询如下:

ALTER PROCEDURE [dbo].[GETDataFromLinkInfo] 
-- Add the parameters for the stored procedure here 
(@PageID INT) 
AS 
  BEGIN 
      -- SET NOCOUNT ON added to prevent extra result sets from 
      -- interfering with SELECT statements. 
      SET NOCOUNT ON; 

      -- Insert statements for procedure here 
      SELECT DISTINCT [PUBLICATION_ID] AS n, 
                      [URL]            AS u 
      FROM   [LINK_INFO] WITH(NOLOCK) 
      WHERE  Page_ID = @PageID 
             AND Component_Template_Priority > 0 
             AND PUBLICATION_ID NOT IN( 232, 481 ) 
      ORDER  BY URL 
      FOR XML RAW ('p'), ROOT ('ps'); 

      RETURN 
  END 

2 个答案:

答案 0 :(得分:1)

执行proc 1000次并测量花费的时间。这是判断性能(时间流逝)的最重要指标。不要测量读写。

关于我不建议读/写的建议:但是,读取可以是缓存的,也可以是非缓存的,这是一个巨大的差异。我总是看执行计划,看看为什么查询的行为方式和做法。读/写指标既不会告诉您是否需要采取行动,也不会采取行动。

答案 1 :(得分:0)

正如菲尔所说,用Database Engine Tuning Advisor分析查询可能是你最好的选择。您必须提供更多信息才能获得任何精确答案 - 人们可能会建议一个或多个索引,但索引的效率取决于其中列的选择性。添加无用的索引实际上可能会以其他方式对性能产生负面影响。