SQL Server 2008超时过期错误
我有一个简单的sql调用,如:-SQL Server 2008超时过期错误,sql,sql-server,sql-server-2008,asp-classic,Sql,Sql Server,Sql Server 2008,Asp Classic,我有一个简单的sql调用,如:- select col1,col2 from table1 有时系统会运行以下操作:- update table1 set col3 = 'something' where col1 ='s1' and col2 ='s2' 这些查询通过在我们的服务器上运行的各种应用程序运行,它只发生在一个大约有100k行的表上 我有数百万行的表——它们没有超时,但不知道为什么在这一行上会超时 这些查询整天都在运行,没有任何问题,但有时在白天-特别是在高峰时间-它们会失败
select col1,col2 from table1
有时系统会运行以下操作:-
update table1
set col3 = 'something'
where col1 ='s1' and col2 ='s2'
这些查询通过在我们的服务器上运行的各种应用程序运行,它只发生在一个大约有100k行的表上
我有数百万行的表——它们没有超时,但不知道为什么在这一行上会超时
这些查询整天都在运行,没有任何问题,但有时在白天-特别是在高峰时间-它们会失败,并出现错误-超时过期-
你能告诉我我可以尝试解决这个错误吗
我需要执行某种类型的锁定吗
此外,如果一个用户正在更新注释,而系统中的其他用户尝试更新表中的同一行,是否会因为第二个用户的行被锁定以进行编辑而使其超时?是否有办法解决此问题?我找到了答案-
因为它是旧系统中的一个表-以前的用户没有添加主键,认为其中已经有一个虚拟主键,但这是不对的
因为sql的编辑时间太长,会超时
所以我在表中制作了一个复合键,现在它工作正常了
结论-如果要处理更新、删除数据,请不要使用没有主键的表
谢谢大家的评论您对col1和col2有索引吗?索引是什么意思你的意思是如果它是主键吗?是的,就像主键一样,你可能需要在col1和col2上使用一个复合索引(一个多列的索引),这有助于你的
更新查询。@MichaelCapobianco主键会自动创建聚集索引。col3上有索引吗?可能是更新索引需要很长时间?我认为ROWLOCK
会有所帮助,这意味着两次更新不会相互干扰,但会对使用该表的任何SELECT
语句产生负面影响。不幸的是,同一行上的两个更新不可避免地相互竞争,但是如果索引按预期工作,那么查询运行的时间应该很短,因此并发更新将成为过去!结论-不要在没有主键的表中提供无条件的建议。