现在,我在Stack溢出和其他站点上读了相当多的文章,对于Server来说,提供一个数据库多个日志文件无助于提高性能。许多人分别说,将一个数据库分割成多个数据库并不能提高性能,但他们没有解释原因。我的一位同事坚持认为,使用多个数据库实际上可以提高性能,因为他说,如果使用多个数据库,日志文件可以并行编写,从而减少了与事务日志相关的IO瓶颈。不幸的是,我在网上找不到任何东西--不管是在网上还是其他网站--来明确支持这一立场。
我正在开发的web站点和相关Windows服务将获得大量数据库流量,因此有人告诉我,我需要将数据库分成多个较小的数据库,以便事务日志不会造成瓶颈(例如,三个单独数据库中的三个访问频繁的表可以同时更新)。我对此犹豫不决,因为我会失去使用外键的能力,从而失去引用完整性。
我向我的同事发送了许多链接,其中指出多个数据库不能提高性能,但他回复说:
https://dba.stackexchange.com/questions/62344/multiple-transaction-log-files-and-performance-impact
请注意最上面的答案是如何断言“事务日志写入是连续的。任何时候只有一个日志文件将被写入,因此拥有多个文件--本身--不可能更改数据库的I/O模式。”
有谁能说明一下事务日志IO如何跨多个数据库工作,以及顺序日志记录实际上是否是每个数据库的限制?
发布于 2017-02-16 19:08:34
下面是另一个可能有用的链接:https://www.sqlskills.com/blogs/jonathan/an-xevent-a-day-23-of-31-how-it-works-multiple-transaction-log-files/
它的要点是,至少在Microsoft SQL Server中,您可以看到使用了一个日志在移动到下一个日志之前被填充的事件(它甚至不会在多个日志之间交替日志记录),这实际上阻止了性能的提高。
我认为可能有一些边缘的情况下,高度分散的日志文件(即。在许多小型VLFs和电池备份缓存控制器中,与碎片和串行远程软件相关的写操作会被控制器并行化,但我想不出一个现实的场景,它比在RAID设置中使用相同的控制器和驱动器具有性能优势。
发布于 2015-03-18 17:31:32
Server需要每个数据库都有一个顺序日志文件,以维护它的ACID属性。虽然您可以创建第二个日志文件,但除非在紧急情况下(如驱动器空间不足),否则您不应该创建第二个日志文件,此时您没有更好的选择。
您可以亲自了解server如何处理测试服务器上的第二个日志文件。在活动工作负载下,查看资源监视器或Perfmon之类的内容,创建第二个日志文件。在分配和初始化时,您将看到少量的活动,然后引擎将忽略新文件,因为虚拟日志文件链将保留在原始文件中(只要该文件是健康的)。如果您在日志文件中有写争用,那么您希望将单个文件放在一个单独的专用驱动器上,该驱动器是为顺序写入I/O性能而优化的,可能是Raid 10。
有关预先写入日志记录和多个日志文件的更多信息,请参见以下文章:https://technet.microsoft.com/en-us/library/ms186259%28v=sql.105%29.aspx http://www.sqlskills.com/blogs/paul/multiple-log-files-and-why-theyre-bad/
扔掉外键通常是个坏主意。Server可以主动使用多个数据库(而不是日志)文件,甚至可以将特定的对象粘贴到特定的文件中,并将单个表划分为不同的文件。
真正取决于您的I/O模式是如何配置的。当然,对于您的情况,如果您的数据不需要ACID属性,而且您的写性能是最重要的,那么您可以使用某种NOSQL数据库。为了将hadoop引入Server系统,微软已经做了很多工作。
通常建议使用多个数据库文件,查看Paul关于sql技能的博客以获得更多信息。
https://stackoverflow.com/questions/26262922
复制相似问题