- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的服务器上正在运行应用程序。这个应用程序的问题是,每天我都会遇到近 10-20 次 System.Data.SqlClient.SqlException 超时已过期的情况。操作完成之前超时时间已过,或者服务器仅响应我的 SP 之一。这是我的 SP,
ALTER PROCEDURE [dbo].[Insertorupdatedevicecatalog]
(@OS NVARCHAR(50)
,@UniqueID VARCHAR(500)
,@Longitude FLOAT
,@Latitude FLOAT
,@Culture VARCHAR(10)
,@Other NVARCHAR(200)
,@IPAddress VARCHAR(50)
,@NativeDeviceID VARCHAR(50))
AS
BEGIN
DECLARE @OldUniqueID VARCHAR(500) = '-1';
SELECT @OldUniqueID = [UniqueID] FROM DeviceCatalog WHERE (@NativeDeviceID != '' AND [NativeDeviceID] = @NativeDeviceID);
BEGIN TRANSACTION [Tran1]
BEGIN TRY
IF EXISTS(SELECT 1 FROM DeviceCatalog WHERE [UniqueID] = @UniqueID)
BEGIN
UPDATE DeviceCatalog
SET [OS] = @OS
,[Location] = geography::STGeomFromText('POINT(' + CONVERT(VARCHAR(100 ), @Longitude) + ' ' + CONVERT(VARCHAR(100), @Latitude) + ')', 4326)
,[Culture] = @Culture
,[Other] = @Other
,[Lastmodifieddate] = Getdate()
,[IPAddress] = @IPAddress
WHERE [UniqueID] = @UniqueID;
END
ELSE
BEGIN
INSERT INTO DeviceCatalog
([OS]
,[UniqueID]
,[Location]
,[Culture]
,[Other]
,[IPAddress]
,[NativeDeviceID])
VALUES (@OS
,@UniqueID
,geography::STGeomFromText('POINT(' + CONVERT(VARCHAR(100) ,@Longitude) + ' ' + CONVERT(VARCHAR(100), @Latitude) + ')', 4326)
,@Culture
,@Other
,@IPAddress
,@NativeDeviceID);
IF(@OldUniqueID != '-1' AND @OldUniqueID != @UniqueID)
BEGIN
EXEC DeleteOldDevice @OldUniqueID, @UniqueID;
END
END
COMMIT TRANSACTION [Tran1];
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION [Tran1];
DECLARE @ErrorNumber nchar(5), @ErrorMessage nvarchar(2048);
SELECT
@ErrorNumber = RIGHT('00000' + ERROR_NUMBER(), 5),
@ErrorMessage = @ErrorNumber + ' ' + ERROR_MESSAGE();
RAISERROR (@ErrorMessage, 16, 1);
END CATCH
END
这个SP有什么问题吗?为什么我只在这个 SP 中遇到超时异常?这是堆栈跟踪,
System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at App.Classes.DBLayer.Execute(SqlCommand command, Boolean executeNonQuery)
at App.Helpers.SQLHelper.GetResult(List`1 parameters, Boolean storedProcedure, String commandText, ResultType type)
at App.Helpers.SQLHelper.ExecuteNonQuery(List`1 parameters, Boolean storedProcedure, String commandText)
at App.Services.DeviceCatalogService.InsertOrUpdateDeviceCatalog(DeviceCatalog deviceCataLog)
at WebApplication1.Handlers.RegisterDevice.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
最佳答案
您需要在服务器端对此进行调查,以了解执行超时的原因。注意服务器没有超时,超时是 SqlCommand.CommandTimeout
上默认30秒导致的.
一个好的资源是 Waits and Queues ,这是一种诊断 SQL Server 性能瓶颈的方法。根据超时的实际原因,可以采取适当的措施。您必须首先确定您正在处理的是执行缓慢(糟糕的计划)还是阻塞。
如果我大胆猜测一下,我会说 IF EXISTS... UPDATE
的不健康模式是根本原因。这种模式是不正确的,会导致并发下的失败。两个并发事务执行 IF EXISTS
同时都会得出相同的结论,并且都尝试 INSERT
或UPDATE
。根据数据库中现有的约束,您可能会遇到死锁(幸运的情况)或丢失写入(不幸的情况)。然而,只有适当的调查才能揭示真正的根本原因。可能是完全不同的东西,比如 auto-growth events .
您的过程也错误地处理了 CATCH block 。您必须始终检查 XACT_STATE()
因为在 CATCH block 运行时事务可能已经回滚。也不清楚您对命名事务的期望,这是我看到的一个常见错误,通常与混淆命名事务和保存点有关。对于正确的模式,请参阅 Exception Handling and Nested Transactions .
编辑
以下是调查此问题的可能方法:
CommandTimeout
到 0(即无限)。blocked process threshold
,设置为30秒(之前的CommandTimeout)如果超时是由阻塞引起的,则每次超时时,这些操作都会导致“阻塞进程报告”事件。如果阻塞是由 live-lock 引起的,您的应用程序将继续等待,直到阻塞被移除。然后它将永远等待。
关于asp.net - 偶尔出现SqlException : Timeout expired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16917107/
我的 Twilio 可编程视频控制台定期收到此警告。它似乎并没有影响我的视频 session ,但是因为,好吧,我有点强制症,我想知道如何让这个警告消失。 在房间进行时是否有规定的刷新 token 的
在 stackoverflow 中搜索后,我了解了如何使用 session 过期。感谢计算器! 代码是: session_start();// Starting Session // Storing
我正在尝试遵循 aws s3 cp 的 AWS 文档, 其中 documents the --expires flag作为: --expires (string) The date and time
我正在尝试缓存控制所有静态 css/js 文件。代码看起来像: @Override public void addResourceHandlers(ResourceHandlerRegis
我正在使用 Spring Security 3.0.2 基于表单的身份验证。但我不知道如何配置它,以便在 session 过期时请求不会重定向到其他页面(过期 url)或显示“ session 过期”
我对基于 token 的授权相当陌生。我正在尝试找出自定义过期/ token 刷新方案中的缺陷。 我在 Express API 中有一个基本的 JWT 身份验证设置;我将 JWT 过期时间设置为 1
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
在 android 应用程序中,当使用 DefaultHttpClient 获取 URL 内容(执行 HttpGet)时,我在日志中收到以下警告: W/ResponseProcessCookies(2
这与 DST Root CA X3 Expiration (September 2021) 有关 当在线搜索修复程序以应用于旧服务器(在我的情况下为 Debian 8)时,该服务器确实调用了使用 le
我很难弄明白这一点。我想在 paypal 中创建一个永远不会结束的月度订阅,除非用户取消它。每次订阅运行时,我都希望它调用我的 IPN url。 下面是我正在使用的: 请注意,我删除了 IPN ur
对于下面的 block ,生命周期'b和'c什么时候结束? use core::ops::Deref; #[derive(Debug)] struct A { child_b: &'b T,
我正在尝试为我的网站设置 cookie。我正在使用: ServletActionContext.getResponse().addCookie(); Cookie maxAge 设置为“2592000
我正在尝试编写一个 HOC,在一段时间后将其状态属性 visible 更改为 false。 这是我到目前为止所得到的: const withExpire = (WrappedComponent) =>
在我的 WordPress 网站上,我有数千个过期交易的帖子。它们都属于已存档类别。我正在寻找一个 Mysql 查询或 php 程序,它将在所有标题(存档帖子)前面插入字符串“EXPIRED”。我很感
我为 HTML 和 CSS 制作了一个日历,但我没有足够的 JS(或 jQuery),所以在一定时间后,日期会变得不活动。所有不活动的按钮(带日期)都有“过期”类,我有必要在每天过期后,将“过期”类添
我正在使用 tymondesigns/jwt-auth我的应用程序包,但一段时间后显示 token expired 消息。我已经设置了 'ttl' => null 并删除了 exp 但它没有用。 这是
我正在使用 axios 向 diro 发送请求使用端点 /user/create 创建用户. 但是,我不断收到这样的错误: Error response: { Error: certificate h
尝试使用 Mechanize 从 https asp 站点上抓取一些内容,看起来好像登录页面提交有效,因为我返回了 200。但是当我尝试打开一个可能使用登录后捕获的 cookie 的 url 时,我重
我正在使用以下命令创建 keystore : keytool -genkey -keystore myStore.keystore -keyalg RSA -keysize 1024 -alias m
使用这行代码时,我不断收到错误消息,我试图让 cookie“myCookie”在凌晨 12:00 过期。 但我不确定为什么我无法做到这一点。 这些是错误: 如果我用这个, Response.Cooki
我是一名优秀的程序员,十分优秀!