不要关注幕后的SAN

曾几何时,我build立了自己的SQL服务器,并控制了驱动器configuration,RAID级别等等。数据,日志,tempdb,备份(取决于预算!)的传统分离通常是非常重要的部分的SQL服务器devise过程。

现在,对于企业级SAN,我只需要为新的SQL Server请求特定的驱动器空间,将其划分为用于数据,备份和文件共享的逻辑驱动器。 当然,我的工作更容易,但是有一部分人不能完全放松,我不能真正地偷看“幕后”,看看那里真正发生了什么。

我的理解是,SAN团队不会以不同的方式configuration不同types的驱动器(针对随机访问优化数据驱动器与针对stream式写入的日志驱动器)。 其中一些可能取决于SAN产品本身(我们有一个HP XP12000和一个HP XP24000),但是我确信惠普软件可以进行各种dynamic性能configuration(监视IO热点并在运行中重新configuration为优化这些LUN),以便应用程序团队和DBA不必担心这些问题。 关于“将所有服务器的负载分散到大量的主轴上”或类似的东西。

我的问题/讨论:

  1. 在SAN团队中没有敌人的情况下,我如何向自己和应用程序开发人员保证我们的SQL服务器不会遭受configuration不当的存储? 只要使用perfmon统计信息? 其他基准像sqlio?

  2. 如果我在这些SAN驱动器上加载testing,这是否真的给我一个可靠的,可重复的测量,当我们上线时我将会看到什么? (假设SAN软件可能会在不同的时间点“dynamicconfiguration”)。

  3. SAN的一部分(比如说Exchange服务器)中的重IO会影响我的SQL服务器吗? (假设他们没有给每个服务器提供专用的磁盘,我已经告诉他们没有)

  4. 请求为不同的逻辑驱动器(数据vs日志与tempdb)分离逻辑驱动器在这里有帮助吗? SAN会看到这些不同的IO活动,并以不同的方式优化configuration它们吗?

  5. 我们现在处于空间不足的状态。 应用程序团队被告知修剪数据存档等。空间问题会导致SAN团队对如何configuration可能影响服务器性能的内部存储(RAID级别等)做出不同的决定?

感谢您的想法( 在这个SF问题中简单讨论过类似的话题)

在SAN团队中没有敌人的情况下,我如何向自己和应用程序开发人员保证我们的SQL服务器不会遭受configuration不当的存储? 只要使用perfmon统计信息? 其他基准像sqlio?

总之,有可能没有办法真正确定。 我会说(我是一个SANpipe理员),如果你的应用程序的性能达到你的预期,不要担心。 如果您开始看到您认为可能与SAN /磁盘IO性能有关的性能问题,那么查询可能是明智之举。 我并不像您那样使用很多惠普存储,但是在IBM / NetApp的世界里,我可以从经验中得知,没有太多的select可以让您对其进行“糟糕的configuration”。 现在大多数企业存储都需要大量的构buildRAIDarrays的猜测,而且不会让你做错事。 除非他们在相同的raid组中混合驱动速度和容量,否则在大多数情况下,您可以放心地保证磁盘运行良好。

如果我在这些SAN驱动器上加载testing,这是否真的给我一个可靠的,可重复的测量,当我们上线时我会看到什么? (假设SAN软件可能会在不同的时间点“dynamicconfiguration”)。

负载testing应该足够可靠。 请记住,在加载testing一个盒子时,即在共享的SAN /磁盘arrays上,其性能可能(而且将会)受到使用相同存储的其他系统的影响。

SAN的一部分(比如说Exchange服务器)中的重IO会影响我的SQL服务器吗? (假设他们没有给每个服务器提供专用的磁盘,我已经告诉他们没有)

它可以。 这不是全部关于磁盘,或者哪些磁盘,服务器都在。 所有的数据都是通过磁盘控制器,然后是SAN交换机。 您将看到的性能在很大程度上取决于磁盘控制器连接的方式是相应的磁盘架和相应的SAN。 如果整个arrays通过一根4Gbps光纤连接到骨干SAN,那么性能显然会受到影响。 如果arrays通过负载均衡的两个冗余SAN连接,使用中继链路,那么单独交换就不可能吸收太多的带宽。 另一个需要考虑的事情是arrays能够达到多lessIO /秒。 只要连接的arrays和SAN能够正确扩展,SAN环境其他部分的繁重IO应该不会影响您的SQL性能。

请求为不同的逻辑驱动器(数据vs日志与tempdb)分离逻辑驱动器在这里有帮助吗? SAN会看到这些不同的IO活动,并以不同的方式优化configuration它们吗?

这可能是一个优先事项,也很大程度上取决于您的存储pipe理员如何configuration它。 他们可以给你三个相同的arrays或卷的LUN,在这种情况下它也是一样的。 如果他们为不同的arrays提供不同的LUN(不同的卷)(物理上不同的磁盘),那么将它们分开可能是值得的。

我们现在处于空间不足的状态。 应用程序团队被告知修剪数据存档等。空间问题会导致SAN团队对如何configuration可能影响服务器性能的内部存储(RAID级别等)做出不同的决定?

我不认为你的存储pipe理员会改变RAID级别以释放空间。 如果他愿意,那么他可能应该被解雇。 空间问题可能导致不同的configuration,但通常不会影响性能。 他们可能会变得更加紧张,他们给你多less空间。 他们可能会启用诸如重复数据删除(如果数组支持它)这样的function,这些function会在进程运行时阻碍arrays的性能,但不是全天候的。

SAN团队应该有可以帮助您揭示您的应用是否热点的工具。 显然,你也应该监视和衡量你的目的。

我的大部分经验都是EMC所以YMMV。 但以下内容应适用于大多数SAN设备。

只有这么多端口进入arrays。 有时候,您可以定义区域之间有一个SAN交换机。 仅仅因为arrays本质上是一个巨大的存储池,并不意味着你不应该担心IO性能。

所以,如果你觉得你有IO问题,你需要缩小瓶颈。 如果它位于HBA和arrays之间的某个位置,则可以确定HBA是否已超出端口或交换机/arrays端的SAN端口是否超额订购。 另外,您应该让SAN团队监控您应用的访问模式,无论是从冷启动还是热启动。

显然,底层存储确实有所作为,比如运行速度较慢的RAID5和速度较快的RAID10,因为无论caching的不同级别如何,在某些时候,您都必须点击磁盘。

HTH。 如果您遇到特定问题,可以离线ping通,因为这可能需要一段时间才能完成。

在SAN团队中没有敌人的情况下,我如何向自己和应用程序开发人员保证我们的SQL服务器不会遭受configuration不当的存储? 只要使用perfmon统计信息? 其他基准像sqlio?

在进行任何types的基准testing之前,您首先需要了解的是,您自己的工作负载需要承受多less宽容。因此,在检查新系统之前,先对自己的内容进行基准testing。 那样的话,如果在高峰负载(备份?)期间,你发现你正在推动56MB / s的最高速度,发现在模拟的高峰负载下SAN连接的磁盘arrays“仅”推动了110MB / s,你可以确保限制不会是I / O通道。

在检出一个新的磁盘arrays时,我已经完成了这种性能testing。 新的arrays使用SATA驱动器而不是光纤通道(SCSI)驱动器,我需要确保它能在我们的环境中工作。 我深感怀疑。 但是在表征之后,我发现新系统在高峰期有足够的I / O开销,以跟上更可靠磁盘上的测量峰值。 这让我感到惊讶。

如果我在这些SAN驱动器上加载testing,这是否真的给我一个可靠的,可重复的测量,当我们上线时我将会看到什么? (假设SAN软件可能会在不同的时间点“dynamicconfiguration”)。

由于SAN连接磁盘arrays的共享特性,整个星期的性能是可变的。 如果您已经知道您的峰值I / O负载是什么时候,请在峰值I / O负载为一天的时间内进行一系列负载testing。 这样,您可以更好地表征在您最感兴趣的时段内可用的I / O开销。在非高峰时段进行负载testing会让您感觉到“活跃”的事情会发生,但高峰testing将会给你真正的边界检查。

SAN的一部分(比如说Exchange服务器)中的重IO会影响我的SQL服务器吗? (假设他们没有给每个服务器提供专用的磁盘,我已经告诉他们没有)

如果Exchange LUN与您的SQL LUN共享磁盘,他们绝对会。 我们使用惠普EVA,而不是XP,但我认为他们使用相同的“磁盘组”术语。 同一个磁盘组中的LUN共享磁盘,因此争夺这些物理设备上的I / O。 放入磁盘组的磁盘越多,磁盘arrays就必须处理I / O。 arrays(至lessEVA是这样做的,我认为更昂贵的XP也是这样做的)以非顺序的方式在物理磁盘之间分配逻辑LUN块。 这样就可以执行您的build议,即将经常访问的块组dynamic分配给不同的物理设备,以提高并行性并减less磁盘级别的I / O争用。

要问的问题是该磁盘组具有多lessI / O预算,以及使用这些LUN的应用程序是否超额订阅了I / O。 这是存储pipe理员必须跟踪的问题。 可能是Exchange的高峰I / O(可能在备份期间)可能与SQL负载不一致,并且两个系统可以高兴地共存。

请求为不同的逻辑驱动器(数据vs日志与tempdb)分离逻辑驱动器在这里有帮助吗? SAN会看到这些不同的IO活动,并以不同的方式优化configuration它们吗?

对于HParrays,您需要将不同的I / O模式放入不同的磁盘而不是LUN。 例如,数据库I / O模式不应该与Web服务访问模式共存。 除非它们位于不同的磁盘组中,否则不同的LUN不会显着提高性能。 如果它们在同一个磁盘组中,唯一真正的好处就是操作系统,它可以在内核中执行I / O调度,以提高与磁盘子系统的并行性。 那说…

就我的理解而言,HParrays知道LUN上的不同访问模式,但要密切关注实际的逻辑块。 将日志放在不同的逻辑块上会产生这种I / Ostream量,这将减轻在物理磁盘上正确分类逻辑块的任务。

我们现在处于空间不足的状态。 应用程序团队被告知修剪数据存档等。空间问题会导致SAN团队对如何configuration可能影响服务器性能的内部存储(RAID级别等)做出不同的决定?

当然。 如果空间紧张,则不会为您的I / O获得专用的磁盘组(除非您的存储环境足够大,以便将7TB的物理磁盘专用于您的专用),此时可能会出现这种情况)。 Raid5 / Raid10的辩论在很大程度上取决于组织的政策,询问是最好的select。

我build议与您的SAN团队和供应商开一个对话来解决您的问题。 用自己的基准testing你将遇到的问题之一是,testing可能不会影响生产中发生的情况,特别是在高峰负载情况下。 大多数SAN都有大量的电池备份caching,在很多情况下(特别是在运行综合性基准testing时)意味着您正在写内存并获得足够的性能。

根据您的环境和您使用的解决scheme,某些供应商CE可能刚刚进入并将SAN设置为他喜欢的任何标准。 这种情况比你想象的要多。 您将不得不在“SAN团队知道所有”shell之前将其解散,直到您确信解决scheme符合您的要求。

祝你好运。

我曾经在一次oracle会议上就这个主题的数据库SAN进行了讨论。

这个讲座的要点可以在这个PDF文件或者在这里的作者网站上find