相关疑难解决方法(0)

如何登录T-SQL

我正在使用ADO.NET访问SQL Server 2005,并希望能够从我正在调用的T-SQL存储过程内部进行日志记录.这有可能吗?

在使用ADO.NET时,我无法看到'print'语句的输出,因为我想使用日志记录来调试理想的解决方案,就是从SysInternals向DebugView发出消息.

sql t-sql sql-server ado.net logging

12
推荐指数
4
解决办法
2万
查看次数

慢速运行查询,CF 9和MSSQL 2008; 腐败的执行计划?

我多年来一直在研究Coldfusion/MS SQL,这是我见过的最奇怪的问题之一.问题本身已经解决,但我真的不明白发生了什么; 这个问题试图清楚地了解可能的原因.

问题

在稳定的生产环境中,没有明显的原因,一个查询开始返回大约1,000-1,500毫秒(比通常慢大约10倍).我能够把它分离出来:

<cfquery datasource="#ds#" name="query">
   select 1
   from eLearning.v_courseCompletion cc
   where 
      cc.memberIncId = <cfqueryparam value="3" cfsqltype="cf_sql_integer"> and
      cc.courseId = <cfqueryparam value="25" cfsqltype="cf_sql_integer"> and 
      cc.currentCourseCompleted = 1
</cfquery>
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这种行为在循环中会加剧,即使只有一次迭代,就像在这个例子中一样:

<cfloop from="1" to="1" index="i">
   <cfquery datasource="#ds#" name="query">
      select 1
      from eLearning.v_courseCompletion cc
      where 
         cc.memberIncId = <cfqueryparam value="3" cfsqltype="cf_sql_integer"> and
         cc.courseId = <cfqueryparam value="25" cfsqltype="cf_sql_integer"> and 
         cc.currentCourseCompleted = 1
   </cfquery>
</cfloop>
Run Code Online (Sandbox Code Playgroud)

这应该和上面完全一样,对吗?循环应该没有效果,但相反,此测试运行速度慢约10倍,返回7,000-16,000毫秒.这就是问题的检测方法; 如果循环迭代超过5或6次请求将超时,则从循环体调用查询(隐藏在对象方法中).

对我而言,这表明Coldfusion方面存在问题,但重新启动服务,或者确实是机器,什么也没做.

同时,一旦被隔离,我注意到对查询本身进行任何更改都会导致性能恢复到预期的水平,大约150-190毫秒.例如:

  • 更改选定的字段(即.select *)
  • 删除表别名(cc)
  • <cfqueryparam>用内联值替换
  • 删除任何条件

这些更改中的任何一个"修复"了问题,但在运行原始查询时,性能问题将会返回.

解决方案

在这一点上,我猜测查询的执行计划已经损坏或者其他东西,做了 …

coldfusion sql-server-2008 coldfusion-9

7
推荐指数
1
解决办法
666
查看次数