国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

由delete導(dǎo)致的超時(shí)已過期問題

2024-07-21 02:49:30
字體:
供稿:網(wǎng)友
由delete導(dǎo)致的超時(shí)已過期問題 2014-08-11 09:03 by JentleWang, ... 閱讀, ... 評論, 收藏, 編輯

1. 問題

  開發(fā)人員反映應(yīng)用程序中一條簡單的delete語句執(zhí)行報(bào)“超時(shí)已過期”錯(cuò)誤。delete語句形式如下:

  delete * from table_1 where id=@value

2. 分析

  1)驗(yàn)證delete檢索字段是否有索引

  首先我想到的是檢索字段 id 列上是否有索引,即是否能很快找到這條待刪除的語句。

  查看表的索引列表后,發(fā)現(xiàn)id上是存在索引的,而且是聚集索引。

  單獨(dú)執(zhí)行 select* from table_1 where id=@value 走的是聚集索引查找,速度是非常快的

  所以不是因?yàn)闄z索字段缺失索引導(dǎo)致的

  2)驗(yàn)證是否存在阻塞

  接下來猜測是不是發(fā)生了阻塞,即delete語句等待其他會(huì)話釋放KEY上的鎖以獲得X鎖來執(zhí)行刪除

  使用sys.sysPRocesses查詢當(dāng)前delete會(huì)話狀態(tài),發(fā)現(xiàn)并未阻塞

  3)查看delete語句的預(yù)估執(zhí)行計(jì)劃

  前兩步驗(yàn)證完畢后,越發(fā)覺得有點(diǎn)無從下手的感覺。拋下自己所謂的經(jīng)驗(yàn),先看下delete語句執(zhí)行計(jì)劃吧

  因?yàn)檎Z句執(zhí)行超時(shí),不能查看真正的執(zhí)行計(jì)劃,所以查看估計(jì)的執(zhí)行計(jì)劃來分析問題。

  以在AdventureWorks2012測試刪除為例

  執(zhí)行delete from Person.Person where BusinessEntityID=6,執(zhí)行計(jì)劃部分截圖為:

  

3. 結(jié)論  

  從執(zhí)行計(jì)劃中,發(fā)現(xiàn)了問題原因:

刪除數(shù)據(jù)的表被其他表所引用,SQLServer在刪除被引用表數(shù)據(jù)時(shí),會(huì)檢查引用表是否存在引用值記錄,以保證數(shù)據(jù)的參照完整性。

  而目前引用表在外鍵字段上沒有索引,導(dǎo)致使用索引掃描來查找,并且引用表記錄數(shù)在百萬以上,導(dǎo)致刪除超時(shí)

4. 處理

  在引用表的外鍵字段上增加非聚集索引

5. 思考

  1)應(yīng)用程序的物理刪除數(shù)據(jù)是否合理及必須呢?是否可以通過增加刪除標(biāo)記或者單據(jù)狀態(tài)之類,來實(shí)現(xiàn)邏輯刪除呢?

  2)引用表中字段的外鍵是否必須建立呢?看了一些應(yīng)用系統(tǒng),如用友、金蝶的系統(tǒng),表中的外鍵字段很少。外鍵字段過多對插入刪除的速度會(huì)有一定的影響。

  3)如果建立了外鍵約束的話,引用表的外鍵字段和被引用表的主鍵字段應(yīng)該最好要建立索引

  如有不對的地方,歡迎拍磚,謝謝!O(∩_∩)O


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仁怀市| 福鼎市| 轮台县| 光泽县| 寿宁县| 秦安县| 东源县| 阳西县| 彭水| 新宁县| 图们市| 偃师市| 克山县| 盐山县| 五家渠市| 榆中县| 准格尔旗| 丽江市| 资源县| 龙泉市| 桂平市| 同仁县| 罗山县| 荔浦县| 甘洛县| 永平县| 平顺县| 诏安县| 安阳县| 永年县| 溧水县| 龙州县| 巩义市| 菏泽市| 钟祥市| 磴口县| 昌邑市| 大足县| 东乡族自治县| 延长县| 西贡区|