Microsoft Technet的一篇文章建议创建一个辅助文件组作为默认文件组(请参阅下面的参考)。辅助文件组应该有多个文件,比如四个文件,每个文件放在单独的磁盘上。作为同事的经验法则,文件的数量应该等于CPU核心的数量。
我的理解是,这种设置是理想的机械旋转磁盘驱动器,在那里有一个性能提高流数据从多个头部,因为旋转磁盘驱动器要比固态驱动器慢得多。这种理解是正确的吗?
如果是,那么我的问题是,基于成本的优化器是否考虑到较新的固态驱动器?当切换到新的固态驱动器时,似乎旋转硬盘驱动器的性能瓶颈就消失了。我们的IT运营小组告诉我,虽然我目前被分配了一个虚拟驱动器,数据实际上存储在一个ISCSI SAN上,它有多个固态驱动器。
这个问题的目的是试图回答这样规模的大型数据库的最优设置:
我正在进行的当前项目需要一个可缩放的数据库,其大小为几兆字节,可以存储大量的日志数据。一个星期的样本大约有1.5亿个记录,我们需要存储一个滚动的3年的日志。因此,我现在查看长期运行的查询来查找数据。我已经对索引进行了调优,几乎所有的工作都归因于非聚集索引查找;优化器不建议添加缺少的索引。
Microsoft SQL Server上的许可目前是由CPU内核执行的。因此,在这个问题上抛出更多的核心是很敏感的,特别是如果这不会提高性能的话。
此外,我目前正在开发Server 2014,但将迁移到Server 2017进行开发和生产。
该项目将每晚加载日志,我希望很少(可能没有)更新或删除,因为日志根本不会改变,所以不会重新加载。为了分析的目的,其他的东西都会被读出来。
系统表的主文件组,其中次要默认文件组用于其他所有内容。这样做的原因是由这个问题底部引用的链接来解释的。
将为表分区创建单独的文件组。数据库中还有足够小的其他表,它们将驻留在辅助文件组中--我只划分两个表,其中一个超过1亿条记录(按标识行号进行分区),另一个将进入数十亿条记录(由time 每月分区)。
我计划在三年内按月划分。因此,将有36个分区。我将为每年创建文件组,然后将12个文件放入相应的年度文件组中。分区策略是为了减少读取时间,因为为了分析目的,需要进行大量的数据扫描。年度文件组策略严格来说是为了便于DBA维护,在DBA中,它们可以通过删除单个文件组来删除一年的数据。
发布于 2019-03-06 19:47:25
基于成本的优化器不会(目前)根据硬件更改其估计的IO成本。
您说这个问题是针对回答什么文件组和分区策略最适合您的环境。在这种情况下,谁在乎优化器做什么呢?问题是什么在你的环境中有效,真正的答案是测试它。
发布于 2019-03-07 00:41:36
根据经验,添加文件组以提高维护或可管理性,并添加文件以提高性能。当然,并非所有的工作负载或方案都将受益于其他文件或文件组。举几个例子:
https://dba.stackexchange.com/questions/231474
复制相似问题