我有一张表,其中包含281,433条记录,范围从2010年3月至当前日期(2014年9月)。这是一个交易表,它由确定当前进出仓库的库存的记录组成。“事务”表上的缓慢查询 - sql分区作为解决方案?
从仓库进行拣货时,系统需要查看某个特定客户的每笔交易(基于确定客户的AccountListID字段,客户平均可能拥有约300条记录表)。在完成拣配运行时,这种情况会在特定.NET应用程序的每次请求中发生2-3次。
有时候数据库似乎锁定。有些请求在3秒钟内完成不了。根据最终用户的需求,其他人可能会长达4分钟。
我的猜测是在4-5个请求的同时,所有看着这个事务表的东西都被锁定了。
我在考虑对此表进行分区,以便主事务表只包含最近2年的记录。最终用户已经同意,在这个日期之后的任何记录都是不必要的。
但我不能只删除它们,它们在系统中的其他地方使用。我有索引已经到位,他们有很大的区别(在accountlistid字段上从> 30秒到< 2)。看起来分区是下一步。
1)我是否正确解决了我的'锁定'问题? 2)当移动一组记录时(例如DateTimeCheckedIn字段超过2年的记录),这是一个手动过程还是分区自动执行?
我不认为分区会影响锁定,但我可能是错的。我首先看“交易隔离级别”。 – 2014-09-19 13:57:17
谢谢Tab,我只是从http:// technet上读到这个。microsoft.com/en-us/library/ms175519(v=sql.105).aspx – 2014-09-19 14:02:27
'阅读列表':http://stackoverflow.com/questions/2471055/why-use-a-read-uncommitted-isolation-级别http://stackoverflow.com/questions/6945487/slow-sql-transaction-blocks-table – 2014-09-19 15:27:27