一、总结

1、SQLServer中的数据库有的时候会有多个数据文件组或者多个数据文件的情况,该博客就是讨论当有多个数据文件时,表的数据会怎么存储,存储在哪些数据文件中。

2、首先SQLServer中的数据文件主要是用来存储表和索引的数据的。

3、SQLServer的最小存储单位是页,每页8KB,8个页组成一个区。

4、区分为混合区和统一区2类,表或索引的前8个数据页都在混合区中分配,当空间超过8个数据页时,就开始给其分配统一区。

5、新创建的空表不会对其分配区,当有数据插入时才会分配区,可以使用dbcc extentinfo命令来查看表被分配区的情况。

6、SQLServer的表数据会在多个数据文件上分布,官方说法:文件组对组内的所有文件都使用按比例填充策略。所以数据写入文件时,数据库引擎会根据文件中的可用空间量按一定比例将数据写入每个文件中,而不是将所以数据先写满第一个文件,再写下一个。比如当第一个文件当前的空间写满时,不会先扩展这个文件,而是去写下一个文件(或者扩展),直到所有的文件都写一遍之后,才会轮到扩展第一个文件。

7、对表做delete操作时,表分配的空间不会释放,但是数据文件的可用百分比会增加,下次再次插入数据时,会优先把这些空间写满。

8、对表做truncate操作时,会释放表占用的空间。

二、操作步骤

1、查看所有的文件

select * from run.sys.sysfiles

2、查看对象分配的区

dbcc extentinfo(run,T3)

字段含义:

  file_id:数据库的数据文件的编号

  page_id:在某个盘区中的第一个页面的页面号

  pg_alloc:该盘区分配的页面的数量(大于等于1,小于等于8)

  ext_size:盘区的大小,以页面为单位

  object_id:数据库对象的ID

  index_id:表示数据对象的类型

注:可以根据上面查出的file_id定位到具体的数据文件

24-SQLServer存储空间的分配和使用情况的更多相关文章

  1. SQLSERVER排查CPU占用高的情况

    SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...

  2. C++内存管理5-处理new分配内存失败情况(转)

    C++内存管理5-处理new分配内存失败情况(转) endl; 参考博客: https://www.cnblogs.com/findumars/p/9905195.html

  3. C++ 动态存储空间的分配和释放 new与malloc的区别

    使用new申请空间: 特点: 1.没有名字,只能通过指针间接访问它们. 2.从堆中申请空间 分类: 变量: 语法:指针变量 = new 类型名; Delete 指针变量 举例:int *p; p=ne ...

  4. 处理new分配内存失败情况

    转自:http://www.51testing.com/html/70/n-827070.html 在C++语言中,我们经常会使用new给一个对象分配内存空间,而当内存不够会出现内存不足的情况.C++ ...

  5. 50个Android开发技巧(24 处理ListView数据为空的情况)

         在移动平台上为用户展示数据的一个经常用法是将数据填充进一个List内,而此时须要注意的一点就是: 原文地址:(http://blog.csdn.net/vector_yi/article/d ...

  6. SqlServer中查看索引的使用情况

    --查看数据库索引的使用情况 select db_name(database_id) as N'TOPK_TO_DEV', --库名 object_name(a.object_id) as N'Top ...

  7. sqlserver 创建对某个存储过程执行情况的跟踪

    有时候需要抓取执行存储过程时某个参数的值,有时候程序调用存储过程执行后结果不太对,不确定是程序的问题还是存储过程的问题,需要单独执行存储过程看结果 即可用下面的方法 --=============== ...

  8. SqlServer查询文件组被占用情况

    在SqlServer中,删除一个文件组 alter database [xxxxx] remove filegroup FGMonthTurnIntroduceByMonth13 有时候会遇到如下报错 ...

  9. HashMap 与 ConcurrentHashMap 在初始化不同大小容量时,实际分配的空间情况

    HashMap.java  int capacity = 1;      int initialCapacitys[] = {1,2,3,4,5,6,7,8,9,10,11,13,15,16,17,2 ...

随机推荐

  1. nginx rewrite 规则

    rewrite功能:使用nginx提供的全局变量或自设定的变量,结合正则表达式和标志位实现url重写以及重定向. 配置域:server,localtion. flag标志位     last : 相当 ...

  2. 学习笔记:oracle学习一:oracle11g体系结构之服务器结构、数据字典

    目录 1.服务器架构 1.1 系统全局区SGA 1.1.1 高速数据缓冲区(database buffer cache) 1.1.2 重做日志缓冲区(redo log buffer cache) 1. ...

  3. stal 安装

    1.1 准备实验环境: 安装系统 1)硬件配置如下 2) 先把光标放到”install CentOS 7”,按 Tab键编辑内核参数,添加 (net.ifnames=0 biosdevname=0) ...

  4. windons下一些软件的地址

    idea http://download.jetbrains.8686c.com/idea/ideaIC-2018.3.1.exe

  5. java——值传递和引用传递

    值传递 在方法被调用时,实参通过形参把它的内容副本传入方法内部,此时形参接收到的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都仅仅是对这个副本的操作,不影响原始值的内容. 先来看个例子: p ...

  6. 前端移动端的rem适配计算原理

    rem是什么? rem(font size of the root element)是指相对于根元素的字体大小的单位.简单的说它就是一个相对单位.看到rem大家一定会想起em单位,em(font si ...

  7. 正则表达式的运行原理详解(NFA,多分支原理)

    原文:https://blog.csdn.net/yx0628/article/details/82722166

  8. 写文章 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!

    网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘.本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底 ...

  9. (一)XML基础(1)

    一.什么是XML? XML是指可扩展标记语言(eXtensible MarkupLanguage),它是一种标记语言.它被设计的宗旨是描述数据(XML),而非显示数据(HTML). 目前遵循的是W3C ...

  10. C# 中类的成员有哪些?

    类(class)是C#类型中最基础的类型.类是一个数据结构,将状态(字段)和行为(方法和其他函数成员)组合在一个单元中.类提供了用于动态创建类实例的定义,也就是对象(object).类支持继承(inh ...