为什么最佳实践会告诉您在Azure VM上禁用SQL Server的日志驱动器上的缓存

时间:2016-09-21 18:16:02

标签: sql-server azure azure-storage

根据这篇文章和其他几篇文章,我发现: Performance best practices for SQL Server

最佳做法是禁用SQL Server日志磁盘的高级存储磁盘上的缓存。但是,我无法找到解释原因的地方。

有没有人有一些见解?

让我补充一点,我认为在日志驱动器上禁用只读缓存的原因是因为它使您必须在VM内部设置两个独立的存储池,这使得在Azure内部升级/降级VM更加成问题并且性能相当低。

例如,假设您从DS V13开始,该驱动器具有16个驱动器限制,但在您受到限制(25000 IOP)之前,其中大约有6个驱动器可以达到最大值。由于最佳实践表示数据的只读缓存而没有日志缓存,因此您将8个驱动器提供给数据,将8个驱动器提供给日志。

现在,服务器需要升级,因此您将其升级到DS V14。现在,您可以在受到限制(50000 IOP)之前最多输出12个驱动器。但是,您的数据驱动器的存储空间列大小仅为8,其限制为40000 IOP。所以你没有充分发挥IO的潜力。

但是,如果您可以从DS V13开始并将所有这16个驱动器分配到单个存储池,则将日志和数据都放在其中。您可以升级/降级到DS V15,而无需担心不会耗尽您的全部IOP潜力。

另一种说法是:如果为所有16个驱动器创建单个存储池,则在升级/降级VM方面具有更大的灵活性。如果必须创建两个存储池,则不需要。

2 个答案:

答案 0 :(得分:3)

我们建议在托管日志文件的高级存储磁盘上配置“无”缓存。日志文件主要是写入繁重的操作,并且它们不会受益于ReadOnly缓存。有两个原因:

  1. 合法缓存内容将被日志中无用的数据驱逐。
  2. 日志写入也将消耗缓存BW / IOPS。如果在磁盘上启用了缓存(ReadOnly或ReadWrite),则该磁盘上的每次写入也会将该数据写入缓存。每次读取也将访问/放入缓存中的数据。因此,如果缓存为ON,则每个IO都会命中缓存。
  3. 谢谢, 昂

答案 1 :(得分:1)

日志文件用作恢复的一部分,可以帮助将数据库还原到某个时间点。从停电或硬重启导致日志文件中的数据损坏对MSSQL来说并不好。请参阅MS的以下文章,它们与旧版本的SQL有关,但日志文件的用途没有改变。

有关将SQL驱动器缓存与SQL Server一起使用的信息,每个数据库管理员都应该知道 https://support.microsoft.com/en-us/kb/234656

SQL Server中缓存磁盘控制器的说明
https://support.microsoft.com/en-us/kb/86903