我们在两个应用程序(一个 ASP.Net 和一个 WinForms)SQL Server 应用程序上遇到看似随机的超时。我让 SQL Profiler 在一个小时内运行,以查看可能导致问题的原因。然后我隔离了超时发生的时间。
有大量的读取,但发生超时错误时和不发生超时错误时的读取没有很大差异。在此期间几乎没有写入(主要是因为每个人都超时而无法写入)。
示例:超时发生在 11:37。平均每分钟有 1500 个事务导致超时,大约有 5709219 次读取。
这似乎很高,除了在超时之间的一段时间(超过十分钟),每分钟有同样多的事务,读取也一样高。读取在超时前会出现一点峰值(跃升至超过 6005708),但在非超时期间,它们高达 8251468。超时在两个应用程序中都发生。
这里更大的问题是,这只是在过去一周才开始发生,并且该应用程序已经启动并运行了几年。所以是的,Profiler 为我们提供了大量数据,但当前的问题是超时。
我应该在 Profiler 中寻找其他什么东西,还是应该移到服务器上的性能监视器(或其他工具)?
一个可能的罪魁祸首可能是数据库大小。数据库相当大 (>200 GB),但 AutoGrow 设置设为 1MB。可能是 SQL Server 正在调整自己的大小并且该事务没有在探查器中显示自己?
非常感谢
我有一个简单的查询,我已经变成了存储过程:
create procedure GetAmount as
declare @amnt decimal(25,2)
select @amnt=66666.67
set @amnt = @amnt/3.00
print @amnt
return @amnt
Run Code Online (Sandbox Code Playgroud)
如果我打印@amnt,它返回22222.22
但是,如果我使用EXEC并将其分配给变量:
declare @x numeric(25,2)
exec @x=SP_GetAmount()
print @x
Run Code Online (Sandbox Code Playgroud)
它返回22222.00
谁知道为什么?
谢谢