如何判断SQL Azure上的params正在执行哪些存储过程

时间:2014-10-28 04:14:36

标签: stored-procedures azure-sql-database profiler

我已将我的网站移至SQL Azure和Azure网站。我的某些存储过程存在性能问题,这些存储过程是从UI超时的。我需要使用参数捕获完全 SQL调用,并在查询窗口中执行此操作以诊断问题。

在本地运行SQL时,我只运行SQL事件探查器并捕获SQL流量。在SQL Azure中,我无法做到这一点。

我尝试了以下尝试失败:

  1. 为DMV运行查询:

    http://www.developer.com/services/how-to-identify-performance-bottlenecks-on-azure-sql-database.html http://programming4.us/database/2716.aspx http://sqlserverperformance.wordpress.com/2008/01/21/five-dmv-queries-that-will-make-you-a-superhero/

    (这向我展示了性能最差的查询,但是当我点击前端时却没有确切的存储过程调用)

  2. 2已安装Glimpse并检查SQL选项卡(我正在运行DotNetNuke站点并且代码没有使用正确的接口,因此这并未显示正在执行的SQL Server存储过程)

    1. Fiddler(当然,HTTP调用中没有SQL信息)

    2. Azure"管理数据库" - 这显示了最慢的查询,并且非常有用,但不是当前传入的存储过程 http://blogs.msdn.com/b/benko/archive/2012/05/19/cloudtip-14-how-do-i-get-sql-profiler-info-from-sql-azure.aspx

    3. 我最后的办法是在本地复制整个网站和数据库并进行设置,但这似乎是一个如此简单的要求......

1 个答案:

答案 0 :(得分:4)

您可以运行一个查询来获取针对Windows Azure SQL数据库运行的最后500个查询,请参阅下文:

SELECT TOP 500 * 
FROM
(
    SELECT  [Last Execution Time] = last_execution_time,
            [Execution Count] = execution_count,
    [SQL Statement] = (
                    SELECT TOP 1 SUBSTRING (s2. TEXT,statement_start_offset / 2+ 1 ,
    ( ( CASE WHEN statement_end_offset = -1
    THEN ( LEN(CONVERT (NVARCHAR( MAX),s2 .TEXT)) * 2 )
                    ELSE statement_end_offset END )- statement_start_offset) / 2 +1)
                    ),
            [Stored Procedure Name] = COALESCE( OBJECT_NAME(s2 .objectid), 'Ad-Hoc Query'),
            [Last Elapsed Time] = s1.last_elapsed_time,
            [Minimum Elapsed Time] = s1.min_elapsed_time,
            [Maximum Elapsed Time] = s1.max_elapsed_time
    FROM sys.dm_exec_query_stats AS s1
    CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 
) x
WHERE [SQL Statement] NOT LIKE '%SELECT TOP 500%' /* Exclude this query */
ORDER BY [Last Execution Time] DESC

这是否为您提供了需要查看的参数?