sql-server - SAN 上的数据共享卷(多个 MDF)和另一个日志共享卷(多个 LDF)

标签 sql-server database sql-server-2008 san

我有 3 个 SQL Server 2008 实例,每个实例位于不同的计算机上,每个实例上有多个数据库。我的 SAN 上有 2 个独立的 LUN,用于存放 MDF 和 LDF 文件。 NDX 和 TempDB 文件在每台计算机的本地驱动器上运行。可以吗?让 3 个实例共享同一个数据文件卷和另一个日志文件卷?

我在 SAN 上没有精简配置,因此我不想限制创建多个卷的磁盘空间,因为有人建议我应该为每个实例(如果不是为每个数据库)创建一个卷(驱动器号)。我知道我至少应该分割我的日志和数据文件。没有实例会共享实际的数据库文件,仅共享驱动器上的空间。

感谢任何帮助。

最佳答案

答案当然是:“视情况而定”。不过,我可以尝试为您提供一些关于它取决于什么的提示。

SQL Server 实例“假定”它对其资源具有独占访问权。因此,默认情况下它将填充所有可用 RAM、使用所有 CPU 并尝试使 I/O channel 饱和以获得最大性能。这就是一般建议不要让您的实例同时访问相同磁盘的原因。

另一件事是 SQL Server“知道”顺序 I/O 访问比随机 I/O 提供更高的吞吐量,因此有很多机制在起作用(例如日志文件组织、预读、惰性写入器和其他)以尽可能避免随机 I/O。

现在,如果 SQL Server 的三个实例同时对单个卷执行顺序 I/O 请求,那么从卷的角度来看,您将再次收到随机 I/O 请求,这会损害您的性能。

话虽如此,只有当您的 I/O 子系统是一个重大瓶颈时,这才是一个问题。如果您的日志文件卷足够快,来自实例的混合顺序写入不会产生问题,那么请继续。如果实例上有足够的 RAM,大多数情况下可以通过缓冲区高速缓存来满足数据读取,则 I/O 子系统不需要太多读取性能。

在每种情况下,您应该避免日志或数据文件上的多个增长步骤。如果一个文件系统上的多个文件不断增长,您将获得碎片,而碎片甚至可以将顺序读取或写入请求从单个源再次转换为随机 I/O。

如果您使用 SSD 作为磁盘,整个情况会再次发生变化。这些具有完全不同的要求和行为,但由于您没有提及 SSD,我会假设您使用“传统”基于磁盘的阵列或 RAID 配置。

简短摘要:如果情况合适,您可能会侥幸逃脱惩罚,但如果不从 SAN 和 SQL 角度了解更多有关系统的信息,就很难进行评估。

关于sql-server - SAN 上的数据共享卷(多个 MDF)和另一个日志共享卷(多个 LDF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649589/

相关文章:

sql-server - 数据集的 SSRS 查询执行失败

sql - 如何将列名转换为 SQL Server 中的结果值?

sql - 彼此独立地订购联合的两个部分

database - 为什么 Postgres 会在空表上引发唯一约束冲突?

sql - 计算两个日期之间以分钟为单位的时差(仅工作时间)

sql-server - 如何重构使用插入表和删除表的触发器,以将公共(public)代码移动到存储过程

sql-server - 截断一些表并将其余表保留在 SQL Server 中的同一数据库中

asp.net - SQL Server 条件选择语句

python - 是否可以扩展 SQLAlchemy 以添加锁定数据库的功能?

sql - 创建后更改数据库设计