我正在使用ADO.NET访问SQL Server 2005,并希望能够从我正在调用的T-SQL存储过程内部进行日志记录.这有可能吗?
在使用ADO.NET时,我无法看到'print'语句的输出,因为我想使用日志记录来调试理想的解决方案,就是从SysInternals向DebugView发出消息.
我多年来一直在研究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>用内联值替换这些更改中的任何一个"修复"了问题,但在运行原始查询时,性能问题将会返回.
解决方案
在这一点上,我猜测查询的执行计划已经损坏或者其他东西,做了 …