Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
Sql server 查询在跟踪中显示的持续时间值大于查询本身运行时的持续时间值_Sql Server_Database_Performance_Trace - Fatal编程技术网

Sql server 查询在跟踪中显示的持续时间值大于查询本身运行时的持续时间值

Sql server 查询在跟踪中显示的持续时间值大于查询本身运行时的持续时间值,sql-server,database,performance,trace,Sql Server,Database,Performance,Trace,sql server profiler跟踪中的持续时间值显示的查询值比我运行同一查询并查看查询执行持续时间时的值大。为什么会这样,或者我错过了什么其他东西?多大?您知道在分析器中,持续时间是以微秒为单位存储的,对吗?所以1000000意味着1秒 除此之外,您还需要考虑其他因素,如执行计划的重用,甚至SSMS是一个UI工具,在将查询发送到数据库之前,可能正在对查询执行其他操作,而profiler直接从数据库上的执行中获取统计信息,哪一个可以解释执行过程中的几秒钟时间是动态生成的SP的版本分析部分

sql server profiler跟踪中的持续时间值显示的查询值比我运行同一查询并查看查询执行持续时间时的值大。为什么会这样,或者我错过了什么其他东西?

多大?您知道在分析器中,持续时间是以微秒为单位存储的,对吗?所以1000000意味着1秒


除此之外,您还需要考虑其他因素,如执行计划的重用,甚至SSMS是一个UI工具,在将查询发送到数据库之前,可能正在对查询执行其他操作,而profiler直接从数据库上的执行中获取统计信息,哪一个可以解释执行过程中的几秒钟时间

是动态生成的SP的版本分析部分

e、 g

大多数SP在第一次执行后都是预编译的,但是具有非静态代码(如上面的代码段)的SP永远不会成为预编译的SP。但是如果在查询窗口中您正在运行

select * from the_table_name

这可能会显示出你所看到的差异。不过我恐怕有点猜测。如果查询是SP等的一部分,您可以告诉我们有关如何运行查询的更多信息。

是的,探查器中的持续时间以微秒为单位。精确值为13958727,约为13秒。但是,当我正常运行同一个查询时,只需要2-3秒。因此,下一个问题是,能否根据SSMS优化查询的事实来解释查询执行时间的巨大差异?不……比如,您是如何获得13958727值的?查询从哪里运行?如果打开SSMS,在配置文件上启动跟踪并在SSMS上运行查询,则值将相同(或非常接近)。是的,我正在配置的查询是动态生成的SP的一部分。它是这样的:-exec sp_executesql N'从BusinessObject_SourceCMEHMatchRecord this_uuu内部连接BusinessObject_IncomingFile incomingfi1_u上选择此.Id作为Id167_1_u,incomingfi1_1.Id作为Id164_0_u,其中incomingfi1_1.SystemId=@p0按此u.SystemId asc;',N'@p0 int',@p0=1然而,当我通过SSMS运行此查询时,无论是完整查询(使用exec sp),还是仅选择部分(使用参数),它都需要相似的时间。我能想到的唯一原因,不知道它是否正确,是因为原始查询是从web应用程序触发的,这可能还包括将数据提取到web服务器的时间,这是一个巨大的过程。然而,当通过SSM运行时,获取数据可能很简单。那么您直接在服务器上运行查询?而webapp是远程的?不过,如果您正在分析这一点,那么当您测量查询在服务器上花费的时间时,这应该无关紧要。顺便说一句,我不知道为什么需要这样构建查询,因为唯一的“动态”部分是where语句上的变量。
select * from the_table_name