数据库文件与存储的设计

一、多个数据库文件的意义

  SQL server默认情况下是1个主文件和1个日志文件。可以通过配置设置多个辅助文件(.ndf)。一个数据库文件有且仅属于一个数据库。比如sales.ndf文件只能属于sales数据库,不能属于master数据库。要理解多个文件的意义,前提是了解多个文件下,数据库文件的运作原理。

  数据库文件的填充策略如下所述(来源:https://docs.microsoft.com/zh-cn/sql/relational-databases/databases/database-files-and-filegroups?view=sql-server-ver16):

  文件组对组内的所有文件都使用按比例填充策略。 向文件组写入数据时,SQL Server 数据库引擎会将文件中的可用空间比例写入文件组内的每个文件,而不是将所有数据都写入到文件组中的每个文件。 然后再写入下一个文件。 例如,如果文件 f1 有 100 MB 可用空间,文件 f2 有 200 MB 可用空间,则从文件 f1 中提供一个盘区,从文件 f2 中提供两个盘区,依此类推。 这样,两个文件几乎同时填满,并且可获得简单的条带化

  条带化技术是一种自动的将I/0负载均衡到多个物理磁盘上的技术。条带化技术将一块连续的数据分成很多小部分,并把它们分别存储到不同的磁盘上去。

  综上所述,一个数据库多个数据文件,如果分布在不同的磁盘上,将获得读写性能的提升。注意大部分的存储是做了raid5的,也就是物理底层就具备了条带化功能,无须重复做。但是如果你服务器的多个磁盘分布于存储上不同的卷,那么多文件将获得更大的并行读写性能。存储的卷的划分与数据库文件的划分有异曲同工之处。卷包含的磁盘越多,一次读取触发并行度越大。必须注意并行的双面性,并行度越大,引发多进程争用的可能性越大。

二、建议 

 在OLTP环境下,读写的数据量较小,而系统争用频繁,建议单数据库的文件数尽量少,多个数据库可分布于不同的存储卷,单卷占用的磁盘量相对减少。虽然条带化能够自动负载均衡读写,但是有时会因为一次大数据量的读取,比如大表扫描,因为数据分布于卷中所有的磁盘块,容易引发整个服务器范围内的磁盘争用。如果该表的数据库与其它数据库分布于不同的卷,相对来说隔离争用范围,减轻了全表扫描的影响。对于争用比较频繁的数据库建议分卷存放。因为有了分卷的需要,必然要求卷的磁盘拥有量相对的减少。

 系统数据中的temp可以独立放置于单独的卷。因为temp会被每个数据库中的查询利用,属于高并发库,独享卷,能减少其它库的争用。日志文件也可独立到单卷中。

 在OLAP环境下,读写的数据来较大,而系统争用较少,建议但数据库的文件数增多,或者卷包含较多的磁盘,增大并行度 ,提高单次读写的吞吐量来提升性能。

 

posted on   sxfinfo  阅读(342)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示