首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server删除语句超时

Server删除语句超时
EN

Stack Overflow用户
提问于 2013-05-20 15:34:01
回答 1查看 3.1K关注 0票数 1

我有一个过程,在我们的业务休息时间运行。进程偶尔会在delete语句上失败。delete语句是通过执行的(我不知道这是否重要),还有级联删除也会发生。

我们得到的错误如下:超时过期。

在操作完成或服务器没有响应之前经过的超时时间。声明已被终止。

我想找出是什么导致了这一切。我发现,我们有另一个进程在同一时间运行,该进程从视图中选择数据,其内容与发生删除的文件相同。读取此视图可以“阻止”删除吗?

代码语言:javascript
复制
 public void DeletePolicySegments(IList<int> segmentIds)
    {
        using (Models.PolicyContainer context = new Models.PolicyContainer())
        {
            if (segmentIds != null && segmentIds.Count > 0)
            {
                foreach (var segmentId in segmentIds)
                {
                    var x = context.PolicySegments.Where(t => t.SegmentId == segmentId).Single();
                    context.PolicySegments.DeleteObject(x);
                }
                context.SaveChanges();
            }
        }
    }

它应该只删除"DeletePolicySegments“的每个调用2-4个”段“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-20 15:48:17

是的,读取可以阻止删除。

但是,造成这种情况的也可能是级联删除。

我们遇到了完全相同的问题,结果发现问题不是我们从表A中删除的表,而是具有外键引用的表(表B)。

在表B中,我们没有作为表A的外键的字段索引,因此对于从表A中删除的每一条记录,必须对表B进行顺序扫描,以查找外键约束。当我们尝试一次从表A中删除大约1000条记录时,查询就会超时。

一旦我们向表B中的字段添加了一个索引,表A上的删除就从10分钟到瞬间运行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16653001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档