设计表以支持使用sql server更快地更新一个字段的最佳实践



我正在工作的工作流系统。我有一个任务表和状态字段。状态值可以是新建、就绪、处理、错误、中止、完成。

我大约有7个进程,根据不同的情况会触发这些进程来改变任务状态的值。大多数情况下,每个进程将处理自己的数据集,每次最多只处理5000条记录。但如果数据达到200万条左右,我仍然会看到一些死锁。我检查与SQL分析器,看起来像一些页面资源相关。我不擅长sql server性能调优,也不太了解它。

由于非活动任务将每天存档,我正在考虑重新设计表以支持大约1000万条记录。

少数选择可能是:

  1. 根据状态创建分割表。
  2. 根据状态
  3. 创建包含静态数据和支持表的主表
对于这种情况有什么好的做法吗?

谢谢!

  • 可以根据状态列对表进行分区。活动记录在一个分区中。另一个分区
  • 中已关闭的记录
  • 您还可以每月清除已关闭的记录(如果不再需要则删除)或移动到存档表
  • 拆分表我不认为这将是一个更好的选择(你不需要多个表相同的功能)
  • 为避免死锁,您使用的是哪个版本的SQL Server
  • 如果您使用的是SQL 2005及以上版本,请使用读取提交快照隔离来读取提交数据。这将确保读操作不会阻塞写操作

我知道我应该发布一个答案,但是这些问题的答案可能如下:

1)。表提示是否到位?如果没有,那么尝试应用那些

2)。是否使用了所有可用的索引,并且TaskId列是唯一可接受的索引?有时,在分析某些情况时会需要一个新的索引

3)。所有200万条记录在任何给定时间都是活动的吗?

4)。您检查过碎片索引了吗?每日归档可能会导致索引碎片,因此您可能希望在归档作业结束时添加检查和修复碎片的步骤

5)。new, ready, processing, error, abort, done的状态字段在什么数据类型下?

6)。你有没有尝试过索引视图?如果您已经知道要限制某些数据并希望避免表扫描,那么

可能会有所帮助

相关内容

  • 没有找到相关文章

最新更新