我怎样才能显示由实况查询统计在MSSQL中使用C#Windows窗体启用执行查询%?

问题描述 投票:3回答:1

在SSMS,当我启动实时查询统计,我可以看到在窗口的左下角的执行率。

我想这显示比例递增到最终用户在Windows窗体上。到目前为止,我试图执行的Visual Studio中使用这个进度条,但事实证明,直到我用一个数据表,这是不可能的。

忘了进度条,即使我可以在标签上显示文本格式的增量比例 - 酷似SSMS它会做的工作。

任何建议,以实现在C#代码将是有益的。

c# sql-server visual-studio ssms sql-execution-plan
1个回答
2
投票

在SQL服务器2016 SP1 +可以通过dm_exec_query_profiles完成:

-- to enable LQS infrastructure, you have to do it once, also it can be set a startup trace:
DBCC TRACEON(7412, -1)

-- Session to track:
DECLARE @YourSessin INT = 760

-- Query that track a progress
SELECT  session_id ,
        node_id ,
        physical_operator_name ,
        SUM(row_count) row_count ,
        SUM(estimate_row_count) AS estimate_row_count ,
        IIF(COUNT(thread_id) = 0, 1, COUNT(thread_id)) [Threads] ,
        ISNULL(CAST(SUM(row_count) * 100. / NULLIF(SUM(estimate_row_count),0) AS DECIMAL(30, 2)),0) [PercentComplete] ,
        CONVERT(TIME, DATEADD(ms, MAX(elapsed_time_ms), 0)) [Operator time] ,
        DB_NAME(database_id) + '.' + OBJECT_SCHEMA_NAME(QP.object_id,
                                                        qp.database_id) + '.'
        + OBJECT_NAME(QP.object_id, qp.database_id) [Object Name]
FROM    sys.dm_exec_query_profiles QP
WHERE QP.session_id = @YourSessin
GROUP BY session_id ,
        node_id ,
        physical_operator_name ,
        qp.database_id ,
        QP.OBJECT_ID ,
        QP.index_id
ORDER BY session_id ,
        node_id

和更紧凑的版本:

DBCC TRACEON(7412, -1)

DECLARE @YourSessin INT = 760

SELECT MIN( CAST(row_count * 100. / NULLIF(estimate_row_count,0) AS DECIMAL(30, 2))) [PercentComplete]         
FROM    sys.dm_exec_query_profiles QP 
WHERE QP.session_id = @YourSessin

请注意,使LQS基础设施会增加一些开销。根据MS,如果SQL Server 2016 SP1 +是1-2%。在旧版本的它提升高达75%

在SQL Server 2019 LQS是默认启用的,所以不需要操作。

在最近的线程主题的更多信息:https://dba.stackexchange.com/questions/228957/sql-server-2014-view-any-live-execution-plan-in-activity-monitor/228958#228958

另一个警告是关于精度:计算是基于查询计划的estimate_row_count,因此估计可能是很粗糙的,特别是如果统计数据不是最新的

© www.soinside.com 2019 - 2024. All rights reserved.