一、总结

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. jqGrid通过行id获取行对象

    $("#jqGrid").jqGrid('getRowData',rowid);

  2. openstack环境-解决windows虚机重启后比当前时间晚8小时问题

    背景: 生产环境下,发现windows虚机每次重启,时间都会倒退到虚机的格林威治时间(+8小时才是北京时间),也就是比当前时间晚8小时.测试发现,windows虚机所用的镜像,缺少了一个os_type ...

  3. java日志框架系列(8):logback框架PatternLayout详解

    当你想要将记录以你想要的的格式写到目的地时,那么你就需要了解如何设置自定义的格式了. 1.PatternLayout 转换模式:由文本文字和格式转换符组成. 下面了解一下格式转换符与格式修饰符表示的意 ...

  4. 使用 netkeeper 创翼网速慢解决方案(13)

    1. 方法1 步骤: 卸载Netkeeper,并删除 卸载以太网(本地连接)驱动 重置网络 重启 重新安装Netkeeper.如果登录出错,卸载「IP,IPv6,Network Monitor」,然后 ...

  5. python并发编程之IO模型(实践篇)

    一.阻塞IO 介绍略(请看概念篇) 二.非阻塞IO 在非阻塞式IO中,用户进程需要不断的主动询问kernel数据准备好了没有 # 服务端 import socket import time serve ...

  6. Dubbo#编译动态扩展类

    这篇排版有问题 后面修改....**** 以ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();为例 - ...

  7. 解决springboot乱码和window cmd乱码

    @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean registration = ...

  8. Codeforces 1245 D. Shichikuji and Power Grid

    传送门 经典的最小生成树模型 建一个点 $0$ ,向所有其他点 $x$ 连一条边权为 $c[x]$ 的边,其他任意两点之间连边,边权为 $(k_i+k_j)(\left | x_i-x_j\right ...

  9. input 默认提示文字 样式修改(颜色,大小,位置)

    input::-webkit-input-placeholder{ color:red; font-size:20px; ...... }

  10. C++ 获取对象类型

    在入门C++过程中,我们经常会遇到无法判断对象类型的情况. 头文件( VS编译器 ) #include <typeinfo> typeid(对象).name(); 例子: , &b ...