由delete导致的超时已过期问题
1. 问题
开发人员反映应用程序中一条简单的delete语句执行报“超时已过期”错误。delete语句形式如下:
delete * from table_1 where id=@value
2. 分析
1)验证delete检索字段是否有索引
首先我想到的是检索字段 id 列上是否有索引,即是否能很快找到这条待删除的语句。
查看表的索引列表后,发现id上是存在索引的,而且是聚集索引。
单独执行 select * from table_1 where id=@value 走的是聚集索引查找,速度是非常快的
所以不是因为检索字段缺失索引导致的
2)验证是否存在阻塞
接下来猜测是不是发生了阻塞,即delete语句等待其他会话释放KEY上的锁以获得X锁来执行删除
使用sys.sysprocesses查询当前delete会话状态,发现并未阻塞
3)查看delete语句的预估执行计划
前两步验证完毕后,越发觉得有点无从下手的感觉。抛下自己所谓的经验,先看下delete语句执行计划吧
因为语句执行超时,不能查看真正的执行计划,所以查看估计的执行计划来分析问题。
以在AdventureWorks2012测试删除为例
执行delete from Person.Person where BusinessEntityID=6,执行计划部分截图为:

3. 结论
从执行计划中,发现了问题原因:
删除数据的表被其他表所引用,SQLServer在删除被引用表数据时,会检查引用表是否存在引用值记录,以保证数据的参照完整性。
而目前引用表在外键字段上没有索引,导致使用索引扫描来查找,并且引用表记录数在百万以上,导致删除超时
4. 处理
在引用表的外键字段上增加非聚集索引
5. 思考
1)应用程序的物理删除数据是否合理及必须呢?是否可以通过增加删除标记或者单据状态之类,来实现逻辑删除呢?
2)引用表中字段的外键是否必须建立呢?看了一些应用系统,如用友、金蝶的系统,表中的外键字段很少。外键字段过多对插入删除的速度会有一定的影响。
3)如果建立了外键约束的话,引用表的外键字段和被引用表的主键字段应该最好要建立索引
如有不对的地方,欢迎拍砖,谢谢!O(∩_∩)O
由delete导致的超时已过期问题的更多相关文章
- 解决SQL查询总是超时已过期
解决SQL查询总是超时已过期 .在WIN8里提示:OLE DB 或 ODBC 错误 : 查询超时已过期; HYT00 1.由于数据库设计问题造成SQL数据库新增数据时超时 症状: Microso ...
- 关于查询报表总是"超时已过期"的问题解决
"超时已过期" 的问题一直在烦扰着我, 在查一些数据量比较大的表或者运行一些复杂存储过程的时候就会出现这个提示, 一开始是按下面的来设,有一些报表是可以正常查出来 a.在企业管理器 ...
- DbCommand :执行超时已过期。完成操作之前已超时或服务器未响应。
问题:“Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应.”的解决方法 在一个链接数据库的时候,老是出现超时的错误:执行超时已过期.完成操作之前已超时或服务器未响应. 就是给这个链接 ...
- [C#.net]SqlDataAdapter 执行超时已过期 完成操作之前已超时或服务器未响应
随着数据库数据的不断增大,查询时间也随之增长.而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s.所以在查询数据的时候,程序会出现 “超时时间已到.在操作完成之前超时时间已过或服务器未 ...
- 使用history.back()出现"警告: 网页已过期的解决办法"
原因: 表单提交页面中使用了 session_start 函数.由于我们后退浏览的是缓存页,而该函数会强制当前页面不被缓存. 解决: PHP: 此提示出现在一个POST提交的页面,点到其它页面后,通过 ...
- Chrome浏览器无法观看视频,一直提示“adobe flash player 已过期” ?
很多新用户在安装了Chrome浏览器或者更新过的的时候,经常提示“ adobe flash player 已过期”的问题,反复提示,导致无法观看视频.于是从网上也找了很多办法都没有解决.这里给大 ...
- 安卓,支付宝app登录时,提示 服务器安全证书已过期或不可信任,请问怎么解决
安卓,支付宝app登录时,提示 服务器安全证书已过期或不可信任,请问怎么解决 请把手机时间调成当前时间.
- 分配给 主机的 Evaluation Mode 许可证已过期。建议升级许可证。
参考文献 http://247its.wordpress.com/2012/04/02/new-build-esxi-5-complaints-licence-has-expired/ http:// ...
- SQL2012 提示评估已过期 解决方案- sql server问题
SQL2012 提示评估已过期 解决方案提示评估已过期的解决方法和 sql2008一样 第1步:进入SQL2012配置工具中的安装中心第2步:再进入维护界面,选择版本升级第3步:进入产品密钥,输入密钥 ...
随机推荐
- 全网最详细使用Scrapy时遇到0: UserWarning: You do not have a working installation of the service_identity module: 'cannot import name 'opentype''. Please install it from ..的问题解决(图文详解)
不多说,直接上干货! 但是在运行爬虫程序的时候报错了,如下: D:\Code\PycharmProfessionalCode\study\python_spider\30HoursGetWebCraw ...
- invokespecial与invokevirtual指令的区别
package com.test19; class Father { public void publicMethod() { privateMethod(); // this是Son对象,调用Fat ...
- 2017年Android百大框架排行榜
框架:提供一定能力的小段程序 >随意转载,标注作者"金诚"即可 >本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. >本文已经开源到Gith ...
- 修改salt-minion的id后报错解决方法
centos7使用命令 /usr/bin/salt-minion start运行报错 Error parsing configuration file: /etc/salt/master - expe ...
- Hadoop基础总结
一.Hadoop是什么? Hadoop是开源的分布式存储和分布式计算平台 二.Hadoop包含两个核心组成: 1.HDFS: 分布式文件系统,存储海量数据 a.基本概念 -块(block) HDFS的 ...
- alloca() 是什么?为什么不提倡使用它?
在调用 alloca() 的函数返回的时候, 它分配的内存会自动释放.也就是说, 用 alloca 分配的内存在某种程度上局部于函数的 ``堆栈帧" 或上下文中. alloca() 不具可 ...
- java Fork/Join框架
应用程序并行计算遇到的问题 当硬件处理能力不能按摩尔定律垂直发展的时候,选择了水平发展.多核处理器已广泛应用,未来处理器的核心数将进一步发布,甚至达到上百上千的数量.而现在很多的应用程序在运行在多核心 ...
- Hadoop/Spark生态圈里的新气象
令人惊讶的是,Hadoop在短短一年的时间里被重新定义.让我们看看这个火爆生态圈的所有主要部分,以及它们各自具有的意义. 对于Hadoop你需要了解的最重要的事情就是 ,它不再是原来的Hadoop. ...
- 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)
source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...
- vue-cli中引入jquery
vue-cli 在引入bootstrap时总是报找不到jquery.(模板用的webpack) 在webpack.base.conf.js里加入 var webpack = require(" ...