Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2005/2008-多个文件组?_Sql Server_Sql Server 2008_Sql Server 2005_Database Design_Filegroup - Fatal编程技术网

Sql server SQL Server 2005/2008-多个文件组?

Sql server SQL Server 2005/2008-多个文件组?,sql-server,sql-server-2008,sql-server-2005,database-design,filegroup,Sql Server,Sql Server 2008,Sql Server 2005,Database Design,Filegroup,从本质上说,我是一名开发人员——但有时,客户没有一个像样的DBA来处理这些问题,所以我被要求决定 在处理规模合理的SQL Server数据库(任何比Northwind或AdventureWorks更大的数据库)时,您的策略/最佳做法是什么?您是否使用多个文件组?如果是:有多少?为什么 您根据什么标准来决定何时放弃“一个文件组解决一切问题”的做法: 数据库大小 数据库复杂性 可用性/可靠性要求 还有什么 如果您使用多个文件组,您会使用多少个文件组?一个用于数据,一个用于索引,一个用于日志?数据

从本质上说,我是一名开发人员——但有时,客户没有一个像样的DBA来处理这些问题,所以我被要求决定

在处理规模合理的SQL Server数据库(任何比Northwind或AdventureWorks更大的数据库)时,您的策略/最佳做法是什么?您是否使用多个文件组?如果是:有多少?为什么

您根据什么标准来决定何时放弃“一个文件组解决一切问题”的做法:

  • 数据库大小
  • 数据库复杂性
  • 可用性/可靠性要求
  • 还有什么

如果您使用多个文件组,您会使用多少个文件组?一个用于数据,一个用于索引,一个用于日志?数据有几个(多少个)?您选择文件组的原因是什么-为什么要使用确切数量的文件组:-)

我已经开发了一系列的数据库,我们唯一使用文件组的时候是磁盘空间不足,我们必须在另一个磁盘轴上创建新的文件组。我相信这并不理想的原因有很多,但这是事实。

微软培训的最佳实践方法如下:

  • 日志文件放在单独的物理驱动器上
  • 数据文件放在单独的物理驱动器上
  • 多文件组:当某个表非常大时。事务数据库(单独的物理驱动器)中经常出现这种情况
  • 多个文件组:使用范围或希望将查找数据拆分为只读数据库文件时(单独的物理驱动器)
请记住,在存储数据方面,MDF在技术上类似于硬盘分区。MDF是一个随机读取的文件,而LDF是一个顺序读取的文件。因此,将它们拆分为单独的驱动器会带来巨大的性能提升,除非运行固态驱动器,在这种情况下,提升仍然存在。

在SQL Server 2008中使用多个(至少两个)文件组至少有一个很好的理由:如果要使用FILESTREAM功能,您必须为FILESTREAM数据创建一个专用的自定义文件组:-)


Marc

通常,您应该只拥有一个主文件组和一个日志文件

有时,当您有非常静态的数据时,您可以创建包含此静态数据的第二个文件组。然后可以将文件组设置为只读,从而提高性能。毕竟,这是相当静态的数据。如果只读行数较少(如查找表值),则不值得这样做。但对于某些内容(如仍可以读入的存档内容),这可能是一个很好的选择

我是从你那里得到这个主意的


HTH.

维护多个文件组有助于减少I/O负担。它还允许您灵活地进行存储,您可以轻松备份文件组,而不是单个文件,并将每个文件组分成一个单独的磁盘驱动器。

除其他原因外,如果您要对表进行分区,则附加文件组是有意义的。如果有许多与该表不同的where条件相竞争的读取,那么这是有意义的。您可以将每个分区配置为反映一个这样的where条件,并位于不同的磁盘上,从而将每次读取发送到另一个磁盘,从而实现并行读取并减少冲突