SQL Server 的文件组和文件

1.默认情况

一般创建数据库后,有两个文件,后缀分别为 .mdf(主要文件) 和 .ldf(日志文件) 默认只有一个文件组

2.添加文件组,文件组是用来放文件的(用户可以添加文件 后缀默认为 .ndf的文件)

3.添加文件

4.为什么用文件组

对于用户角度来说,需对创建的对象指定存储的文件组只有三种数据对象:表,索引和大对象(LOB)

使用文件组可以隔离用户和文件,使得用户针对文件组来建立表和索引,而不是实际磁盘中的文件。当文件移动或修改时,由于用户建立的表和索引是建立在文件组上的,并不依赖具体文件,这大大加强了可管理性.

还有一点是,使用文件组来管理文件可以使得同一文件组内的不同文件分布在不同的硬盘中,极大的提高了IO性能.

SQL SERVER会根据每个文件设置的初始大小和增长量会自动分配新加入的空间,假设在同一文件组中的文件A设置的大小为文件B的两倍,新增一个数据占用三页(Page),则按比例将2页分配到文件A中,1页分配到文件B中.(必须文件和文件在同一个文件组中)

5.为什么用文件(.ndf)

可以缓解磁盘压力,将表数据分散在不同的磁盘位置,提升IO性能,特别是在有做 磁盘阵列 的服务器上

6.利弊

同时,因为每个文件中都有自己的一套B树组织方式和自己的增长空间,所以,使用多文件需要占用更多的磁盘空间。

7.示例

--当前数据库,查询文件组、文件
SELECT df.[name],df.physical_name,df.[size],
df.[growth],f.[name] AS [filegroup],f.[is_default]
FROM sys.database_files df
LEFT JOIN sys.filegroups f
ON df.data_space_id = f.data_space_id

--当前数据库,数据文件占用与剩余空间
SELECT DB_NAME() AS DbName,
name AS FileName,
size/128.0 AS CurrentSizeMB,
size/128.0 - CAST(FILEPROPERTY(name, ‘SpaceUsed‘) AS INT)/128.0 AS FreeSpaceMB
FROM sys.database_files;

未添加数据之前(剩余空间)

---添加数据:

--测试数据
DECLARE @num INT=0
WHILE @num<200000
BEGIN
INSERT INTO TempA VALUES(222)
SET @[email protected]+1
END

---添加后:

由此可以看出,数据被分散到同一文件组下的 两个文件中了,文件增长空间是:当前文件组下的所有文件空间都满了才会去按增长量 增长当前需要写入的文件空间

SQL Server 的文件组和文件

时间: 2024-08-08 01:26:25

SQL Server 的文件组和文件的相关文章

SQL Server 大数据搬迁之文件组备份还原实战

原文:SQL Server 大数据搬迁之文件组备份还原实战 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) 注意事项(Attention) 疑问(Questions) 参考文献(References) 二.背景(Contexts) 有一个数据库大概在700G左右,需要从服务器A搬迁到服务器B,两台服务器网络传输速度可以达到8MB/s,怎么做才能更

Sql server 文件组和文件

1,文件组和文件的作用 Sql Server的数据存储在文件中,文件是实际存储数据的物理实体,文件组是逻辑对象,Sql server通过文件组来管理文件. 一个DataBase有一个或多个FileGroup,PrimaryFileGroup是必需的,用户可以根据需要添加FileGroup.每一个FileGroup管理一个或多个文件,其中PrimaryFileGroup管理一个master data file,扩展名是.mdf,这个file是系统默认生成的:扩展名是.ndf的文件是用户根据需要添加

SQL SERVER删除文件组和文件

文件与文件组的删除,如果因为以前的分区方案不合理,需要取消分区,或者按另外一种方式分区,就需要涉及到文件与文件组的删除操作,如果没有掌握正确步骤,有时候可能无法删除,会提示你“文件不为空,无法删除”或者“文件组不为空,不能删除”等等,如果不知道技巧,会很郁闷!本人就曾经经历过这样的郁闷!在百度也没找到正确答案.    1. 文件的删除:首先要先清空文件里的数据,删除之前数据一定要记得先备份,可将数据复制到其他表,然后执行: DBCC SHRINKFILE (FileName, EMPTYFILE

sql server迁移数据(文件组之间的互相迁移与 文件组内文件的互相迁移)

转自:https://www.cnblogs.com/lyhabc/p/3504380.html?utm_source=tuicool SQLSERVER将数据移到另一个文件组之后清空文件组并删除文件组 总结: (1)如果是一个文件组内只有一个文件 ~~把所有在该文件组内的表删除聚集索引,然后新建聚集索引至新的文件组 (2)如果是一个文件组内多个文件 [1]把某个文件清空转移到其他文件:使用DBCC SHRINKFILE(要移动数据的数据文件逻辑名称,EMPTYFILE) [2]把该文件组内所有

SQL Server - 文件组,文件,备份,分区

FileGroup:文件组,为逻辑划分:Files:文件,为实际文件,需要指定文件属于哪个文件组. 使用多个文件的有点:可以将磁盘I/O压力分散,提供按文件和文件组(按文件和文件组进行备份需要设置数据的恢复模式为Full)进行备份. --创建文件组 USE [master] GO ALTER DATABASE [DWH_Optimizing] ADD FILEGROUP [DWH_Optimizing_1] GO ALTER DATABASE [DWH_Optimizing] ADD FILEG

Sql Server 2005 mdf、ldf文件无法复制问题

[问题原因]Sql Server服务只要启动就一直占用,故无法进行编辑操作. [解决办法 - 1]: 1)在开始-运行对话框中输入"services.msc”,显示如下界面: 2)关闭如上选中的服务 3)复制mdf.ldf文件 4)重新启动选中的服务 [解决办法 - 2]: 打开“SQL Server 外围应用配置器”-->“服务和连接的外围应用配置器”-->DataBase Engine-->服务-->“停止”-->复制mdf.ldf文件-->重新"

SQL SERVER 2008R2 执行大脚本文件时,提示“内存不足”的解决办法

我把一个数据库的架构及数据都已脚本的方式拷贝下来,再去新建一个数据库想把脚本执行一下,但提示如下错误: 问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是当数据库导出脚本很大,用Microsoft SQL Server Management Studio执行脚本时,往往会遇到"内存不足"的提示. 解决办法: 用微软自带的sqlcmd工具,可以导入执行.以SQL Server 2008R版本为例: 第一步:Win+R 键入:cmd 命令,开启

MS SQL Server数据库修复/MDF数据文件数据恢复/MDF质疑/mdf无法附加

微软的SQL Server 数据库最常用的有两种类型的文件: 1.主要数据文件,文件后缀一般是.MDF: 2.事务日志文件,文件后缀一般是.LDF. 用户数据表.视图.存储过程等等数据,都是存放在MDF文件里,LDF文件是存放MS SQL Server操作过程中的日志记录. MDF文件必读附加到MS SQL Server数据库环境后,才能正常读取其中的数据.当由于某种原因数据库附加不上,MDF数据库文件的内容就没办法读取,修复的方法有两种: 1. 使用MS SQL Server环境进行修复,先以

在 SQL Server 中的网络数据库文件的支持说明

其实就是一个学员问SQL Server 是否能存放的于NAS(UAC 的路径下). 官方的回答简略版本为:可以,需要满足一些强制性的硬件要求.但需要考虑一系列的性能的问题. http://support.microsoft.com/kb/304261/zh-cn