Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#在windows窗体中显示MSSQL中的实时查询统计信息所启用的正在执行的查询%?_C#_Sql Server_Visual Studio_Ssms_Sql Execution Plan - Fatal编程技术网

如何使用C#在windows窗体中显示MSSQL中的实时查询统计信息所启用的正在执行的查询%?

如何使用C#在windows窗体中显示MSSQL中的实时查询统计信息所启用的正在执行的查询%?,c#,sql-server,visual-studio,ssms,sql-execution-plan,C#,Sql Server,Visual Studio,Ssms,Sql Execution Plan,在SSMS中,当我启用实时查询统计信息时,我可以在窗口的左下角看到执行百分比 我想在windows窗体上向最终用户显示此递增百分比。到目前为止,我试图在VisualStudio上使用进度条实现这个功能,但在使用数据表之前,这是不可能的 忘记进度条吧,即使我可以在标签上以文本格式显示增量百分比-就像在SSMS中一样,它可以完成这项工作 任何在C#中实现代码的建议都会很有帮助。在SQL Server 2016 SP1+上,可以通过dm_exec_query_profiles完成: -- to e

在SSMS中,当我启用实时查询统计信息时,我可以在窗口的左下角看到执行百分比

我想在windows窗体上向最终用户显示此递增百分比。到目前为止,我试图在VisualStudio上使用进度条实现这个功能,但在使用数据表之前,这是不可能的

忘记进度条吧,即使我可以在标签上以文本格式显示增量百分比-就像在SSMS中一样,它可以完成这项工作


任何在C#中实现代码的建议都会很有帮助。

在SQL Server 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基础架构将增加一些开销。据微软称,如果SQL Server 2016 SP1+是1-2%。在旧版本中,它可以提高75%

在SQL Server 2019中,默认情况下启用LQS,因此无需执行任何操作

有关最近线程中主题的更多信息:


另一个警告是关于准确性:计算是基于查询计划的估计行数,因此估计可能非常粗略,特别是如果统计数据不是最新的

我希望您的问题得到了回答。如果是这样,你能考虑把它标记为这样吗?是的。非常感谢你,亚历山大。