2010-04-07 19 views
1

我有一个数据库,其中包含许多“客户”的数据。目前,我们经常使用.Net SqlBulkCopy将成千上万的行插入多个表中,导致整个表在事务处理期间被锁定且无法访问。分区是否允许多个批量加载?

我们的大多数业务流程依赖于同时访问数据,只有一个客户,我们希望能够加载数据,一个客户端,而另一个客户端更新数据。

为了让事情更有趣,所有的PK,FKS和聚簇索引都在GUID列(我在看这个改变)。

我期待在加入客户端ID到所有的表,再划分这一点。 这会给我我需要的功能吗?

+0

我没有答案,但GUID是PK的不错选择。不要因为这个想法感觉陌生而改变这一点。 :-) – 2010-04-07 08:58:30

+0

@Aaron - 但它不适合聚集索引 - 只有4百万行的表现在几乎不能执行... – cjk 2010-04-07 09:06:32

+0

@ck - 但是PK和聚类并不捆绑在一起。 – 2010-04-07 09:18:49

回答

2

我还没有使用SQL Server的内置分区功能,但这是我特别感兴趣的东西。我的理解是,这可以解决您的问题。

this article

这可以让你即使有服务表现 关键的操作,如重新索引 在 分区操作,而不会影响其他 。

并且由Kimberly L Tripp进行分区的很好的白皮书是here。值得一读 - 我甚至不会试图解释它 - 涵盖了所有的细节。

希望这会有所帮助。

+0

谢谢,我会研究这些。 – cjk 2010-04-07 09:04:50

1

你可以分区上的客户端ID:是的,但分区限制为1000个分区,以便为1000级的客户端它击中的硬性限制之前。解决这个问题的唯一方法是开始在多个分区表中使用分区视图 - 它有点混乱。

意志是帮助你锁定的情况:在SQL 2005的锁升级为排 - >页面 - >表,但在2008年,他们推出了一个新的水平,允许行 - >页面 - >分区 - >表。所以它可能会取决于你的SQL版本(未指定)。

如果2008年不是一个选项,然后有一个跟踪标志(TF1224分之1211)功能,关闭锁升级,但我不会跳,并使用它,而一些严重的测试。

分区功能仍然是一个企业向上的功能,也使一些人关闭。

使用分区执行数据加载但避免锁定的最理想方式是将数据放入临时表中,然后将数据交换到新分区 - 但这需要数据有点基于序列(如日期时间),以便可以将新数据引入到全新的分区,同时删除旧数据。 (滚动分区窗口。)

相关问题