AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 23047
Accepted
Chad Decker
Chad Decker
Asked: 2012-08-24 14:40:02 +0800 CST2012-08-24 14:40:02 +0800 CST 2012-08-24 14:40:02 +0800 CST

将事务日志放在单独的卷上[固态]?

  • 772

事务日志通常被隔离在一个单独的卷上。据我了解,这种做法的基本原理是事务日志的数据是按顺序写入的——与随机相比,硬盘驱动器可以以更快的速度顺序执行写入操作。这是由于驱动器内的小针在写入顺序数据块时必须移动更短的距离,而不是随机写入。

(对不起,天真的解释。只是试图理解我所读的内容。)

考虑到这一点……我突然想到固态驱动器内部没有小针和盘片以及在其中移动的东西。如果我的数据库和事务日志都位于八个固态驱动器的单个 RAID 5 上,那么将事务日志移动到自己的单独卷上真的有什么好处吗?如果假设的效率提升是基于顺序写入减少针移动和盘片旋转的距离的前提,并且固态驱动器没有这些移动部件,那么通过隔离日志可以获得什么?

performance
  • 2 2 个回答
  • 6507 Views

2 个回答

  • Voted
  1. Best Answer
    Mark Storey-Smith
    2012-08-24T15:45:12+08:002012-08-24T15:45:12+08:00

    简短的回答,使用单个阵列,将日志与 8 个 SSD 驱动器上的数据分离不太可能带来任何性能提升。有关 SSD的更详细(和有趣)的评论,请参阅SSD 上的 SQL:Hot and Crazy Love 。请特别注意有关 SSD 相关故障的说明。

    将日志与 SSD 上的数据分离更多是 RPO(恢复点目标)而不是性能问题。这个概念是您可以通过将日志与数据分开来减少 RPO,这样在数据阵列发生故障时,您的日志阵列应该/可以保持可访问性。如果 RPO 很关键,谨慎的人会考虑在两个阵列中的每个阵列中使用不同的驱动器品牌/型号,以减轻相关的故障问题。

    关于总线带宽的评论无关紧要。如果您需要转移这么多的 IO,那么您需要担心更大的问题。

    • 10
  2. yoel halb
    2012-08-24T14:49:03+08:002012-08-24T14:49:03+08:00

    有一个团体同意在 HDD 上分离是有益的,他们仍然声称对于 SSD 驱动器不再需要这样做。

    所以对他们来说,我想问“如果没有争用问题,那么为什么要使用 RAID 10?不再需要剥离!所以单独镜像就足够了,当然不需要 8 个驱动器,2x 数据库大小应该足够了!”。

    然而现实情况是,如果某些东西需要 RAID 10,那就是日志文件!

    这不仅仅是因为顺序与随机的问题(请参阅下面的资源),而且一旦您了解 SSD 驱动器的工作原理,它实际上非常重要。

    长话短说(有关更长的描述,请参见 http://arstechnica.com/information-technology/2012/06/inside-the-ssd-revolution-how-solid-state-disks-really-work/), SSD 驱动器在读取和写入零方面非常有效,但是在写入零时效率不高,因为它必须擦除整个部分才能写入一个!

    虽然这对于一般写入来说不是问题,因为它们无论如何都在内存中缓冲,并在页面边界中写入,但对于日志文件来说这是一个主要问题,因为日志文件绕过任何缓存,而是 SQL 服务器阻塞,直到日志被写入磁盘!,这意味着对于每次写入可能会有一个完整的部分擦除。

    所以为了优化它,我建议将每张额外的磁盘(除了数据库大小的 2 倍,不需要剥离!)用于日志文件,这样它就可以在更短的时间内处理尽可能多的文件。

    较早的答案

    答案是肯定的,有三个原因。

    1. 随机 vs 顺序 - 虽然很明显 SSD 显着提高了随机写入的性能,但随机 vs 顺序的问题仍然存在,从以下白皮书和链接中可以看出:
    • http://research.microsoft.com/pubs/63596/USENIX-08-SSD.pdf
    • http://static.usenix.org/event/fast12/tech/full_papers/Min.pdf
    • https://stackoverflow.com/questions/2100584/difference-between-sequential-write-and-random-write
    • http://www.neowin.net/forum/topic/992800-why-sequential-vs-random-io-speeds-differ-for-ssd/
    1. 可靠性 - 所有 SSD 驱动器很有可能同时发生故障,在这种情况下 RAID 没有保护作用,但是由于仅用于顺序的 SSD 驱动器具有不同的使用寿命,这可能是您的救命稻草

    2. 写争用 - 将日志放在自己的主轴上的原因不仅是因为随机与顺序,还因为写争用,正如人们可以看到的那样,还建议将 tempdb 放在单独的卷上,这表明这里的问题也是关于写争用的。

    这应该更适用于日志文件,因为写入日志会阻止事务被视为已提交,直到将其写入磁盘表面。

    事实上,对于日志,您可能会在http://www.dell.com/downloads/global/products/pvaul/en/ssd_vs_hdd_price_and_performance_study.pdf上使用常规 HDD 驱动器作为戴尔的白皮书

    编辑

    Microsoft 建议将 tempdb 放在自己的阵列上以用于旋转磁盘,请参阅

    • MSDN - http://technet.microsoft.com/library/Cc966545(“最佳实践和建议”部分)
    • MSDN - http://msdn.microsoft.com/en-us/library/ms175527(SQL.105).aspx
    • Sunil Agarwal(SQL Server 存储引擎团队成员)-链接
    • Paul Randal(通过链接到上述链接作为有用的链接) - http://www.sqlskills.com/BLOGS/PAUL/category/tempdb.aspx
    • StackOverflow - https://stackoverflow.com/questions/360088/sql-server-tempdb-optimization-tips-for-a-new-server
    • ServerFault - https://serverfault.com/questions/19866/recommended-disk-partition-setup-for-a-sql-server
    • “Microsoft Sql Server 管理和管理 (SAMS)”(第 33 页)

    和许多其他的,这是 Sql Server 中普遍接受的概念,而没有人表示拆分数组有问题。

    此外,SQL Server 团队还创建了 Filegroup 和 Partioining 分区的概念,其唯一目的是能够将它们移动到单独的阵列上。

    事实上, http: //msdn.microsoft.com/en-us/library/ms187087(v=sql.105)上的 MSDN建议在其自己的数组上分离非聚集索引可能会带来性能优势,(尽管这不应被视为每种情况的一般建议,仅适用于特定工作负载,请参阅http://weblogs.sqlteam.com/dang/archive/2008/08/01/Are-you-a-DBA上的更多信息-猴子.aspx)。

    因此,它只是一个逻辑扩展,说旋转磁盘上的分离原因不仅与顺序读取与随机读取的问题有关,而且与一般写入争用有关,这也适用于 SSD。

    虽然可能有些人不同意这个建议,并认为放置 tempdb 和它自己的卷(如 Jack Douglas)没有任何好处,您甚至可能声称分离日志文件没有任何好处(如 Mark Storey -Smith),并声称拆分数组更糟糕,但不要忘记这是一种新方法,违背了微软和社区建议的普遍接受的方法,到目前为止,没有人提供任何链接基准测试来支持它。

    所以我对所有反对者说的是,我发现仅仅因为一个帖子的观点与你的不同而反对它是非常不道德的,尤其是当 1)你的观点违背普遍接受的理论 2)并且它反对供应商(微软) 自己的文档 3) 并且您没有提供任何证据,只是一个意见。

    但在这种情况下,它就更荒谬了,因为我的帖子只不过是对这一理论的逻辑延伸,所以一个认为这篇文章是床建议的人当然需要回到所有建议这个理论的帖子并否决他们.

    假设有人认为 RAID 是老派理论并否决了所有推荐它的帖子,这有什么意义?

    • -3

相关问题

  • 使用存储过程处理数据与在检索后将其输入函数相比是否有性能提升?

  • 您如何针对繁重的 InnoDB 工作负载调整 MySQL?

  • 如何确定是否需要或需要索引

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve