English 中文(简体)
什么是好的SQL Server 2008的解决方案来处理大规模写道,这样他们不减缓读取用户的数据库?
原标题:
  • 时间:2009-04-13 20:09:57
  •  标签:

我们有大型SQL Server 2008数据库。我们经常不得不运行大量的数据导入到数据库,需要几个小时。在此期间其他人年代读和小写速度减慢一吨。

我寻找一个解决方案,也许我们设置一个数据库服务器,用于大量写作,然后另外两个数据库服务器设置阅读和也许有小写道。我们的目标是保持快速变化小的读和写,而大部分正在运行。

有人有一个想法的一个好方法来完成这个使用SQL Server 2008吗?

问题回答

保罗。你的问题有两个部分。

<强>首先,为什么写慢? < /强>

当你说你有大型数据库,您可能想要澄清一些数字。微软团队展示了tb加载在不到一个小时,当然他们使用高端齿轮和专门的数据仓库技术。我一直参与数据仓库团队,定期加载数据一夜之间,事务日志驱动器必须在tb处理快速爆发,但不是每小时tb。

找出为什么写的慢,你会想比较你的加载方法,数据仓库技术。例如,你有试过使用staging表吗?表分区?数据和日志文件在不同的数组?如果你不知道从哪里开始,看看我的Perfmon教程来衡量你的系统寻找瓶颈:

< a href = " http://www.brentozar.com/archive/2006/12/dba - 101使用perfmon - - sql -性能- tuning/”rel = " noreferrer " > http://www.brentozar.com/archive/2006/12/dba - 101使用perfmon - - sql -性能- tuning/ < / >

<强>其次,如何扩展? < /强>

你问如何设置多个数据库服务器,这样一个处理批量加载而其他人处理读和写。我会严重,严重警告multiple-servers-for-writes方法,因为它很快变得更复杂,但使用多个服务器读取并不少见。

最简单的方法就是日志传送:每X分钟,主服务器日志备份事务日志备份,然后应用到只读服务器报告。年代有了,后面是一个小的数据,和恢复过程将所有连接数据库应用恢复。这可能是一个完全可以接受的解决方案,如数据仓库,在终端用户想要运行自己的报告,而新的一天数据加载。你不可以做事务日志还原数据仓库装货,整个时间和用户可以保持连接。

帮助找出解决方案是适合你,可以考虑添加以下你的问题:

  • The size of your database (GB/TB in size, # of millions of rows in the largest table that s having the writes)
  • The size of your server & storage (a box with 10 drives has different solutions available than a box hooked up to a SAN)
  • The method of loading data (is it single-record inserts, are you using bulk load, are you using table partitioning, etc)

为什么不使用< a href = " http://www.danga.com/memcached/ " rel = " nofollow noreferrer " > MemCached < / >消除阅读,我有同样的情况在哪儿工作,我们一直都使用MemCached在Windows和伟大的结果。我很惊讶的是多么微不足道的与它也使我的代码运行。有开源包装库几乎所有主流语言,并使用它可能会导致99%的读取,不接触数据库(因为你设置memcache值在数据库的写操作)。

Memcached,只是一个巨大的哈希表存储(甚至可以聚集或你喜欢的任何机器上运行,因为它使用套接字读取和存储散列)。

当阅读memcached价值,简单地检查它的零(如果不是返回)还是ussual数据库读取并返回。它可以储存一切,只要每个memcached键/值对小于1 mb。

最简单的方法是减缓的速度发生写道,和给他们一个记录。他们会慢,但它会使事情更快的为用户。如果批次采取“几个小时”,你也许更能传播出来。

这只是一个想法。创建一个视图在你“活跃”表。然后BCP的数据到“暂存”表中。当它完成后,更新视图,包括“登台”表。只是一个想法。

我无法确定你的意思当你说其他人读和写减慢。它慢下来当他们读和写相同的数据库数据目前正在进口或从不同的数据库在同一台服务器上吗?

如果是相同的数据库,您可以使用“(nolock)”提示做读即使表被锁写/插入。然而,请注意,读可以脏读。我不确定如何做快快速写道当表锁定,因为写已经在进步。你可以保持事务小写速度和释放锁。另一个选择是一个单独的数据库对于批量插入和阅读的另一个数据库。





相关问题
热门标签