SQL Server 版本是 2008 R2。

查询数据库索引碎片情况的 SQL 语句(来源):

SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName,
ind.name AS IndexName, indexstats.index_type_desc AS IndexType,
indexstats.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN sys.indexes ind
ON ind.object_id = indexstats.object_id
AND ind.index_id = indexstats.index_id
WHERE indexstats.avg_fragmentation_in_percent > 50
ORDER BY indexstats.avg_fragmentation_in_percent DESC

索引碎片整理的四种方法:

1)删除索引并重建

2)使用 DROP_EXISTING 语句重建索引

3)使用 ALTER INDEX REBUILD 语句重建索引

4)使用 ALTER INDEX REORGANIZE 重新组织索引

详见:SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>

我们使用的是方法三 Rebuild 与方法四 Reorganize 。

对有些数据记录比较多、即使访问低峰也被经常访问的表进行索引 Rebuild 会失败,尝试删除索引也失败,出现 "Lock request time out period exceeded." 的错误,后来改用 Reorganize 操作成功。在对有些表的索引进行 Reorganize 操作时出现了 SQL Server Management Stuido 窗口一直卡死的问题,后来通过 Windows 任务管理器强制结束了这个窗口,结束后发现索引碎片已成功整理。

对于 IndexType 为 HEAP 的索引碎片,只需为对应的表创建聚集索引,索引碎片就会自动消失。

对于记录数超过600万的表,无论是聚集索引还是非聚集索引,只要进行 Rebuild 操作,就会阻塞所有对该表查询操作,只能使用 Reorganize ,对该表的聚集索引进行 Reorganize 操作耗时 26 分钟。

SQL Server索引碎片整理实际操作记录的更多相关文章

  1. SQL Server 索引碎片整理

    索引碎片整理的四种方法: 1)删除索引并重建 2)使用 DROP_EXISTING 语句重建索引 3)使用 ALTER INDEX REBUILD 语句重建索引 4)使用 ALTER INDEX RE ...

  2. SQL Server 索引的图形界面操作 <第十二篇>

    一.索引的图形界面操作 SQL Server非常强大的就是图形界面操作.关于索引方面也一样那么强大,很多操作比如说重建索引啊,查看各种统计信息啊,都能够通过图形界面快速查看和操作,下面来看看SQL S ...

  3. [笔记整理]SQL Server 索引碎片 和 重建索引

    铺垫知识点: 数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘.既键值的逻辑顺序决定了表中相应行的物理顺序 多数情况下,数据库读取频率远高于写入频率,索引的存在 为了读取速度牺牲 ...

  4. SQL Server 索引碎片产生原理重建索引和重新组织索引

    数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘.既键值的逻辑顺序决定了表中相应行的物理顺序 多数情况下,数据库读取频率远高于写入频率,索引的存在 为了读取速度牺牲写入速度 页 ...

  5. SQL Server数据库碎片整理

    碎片产生   在SQL Server中,存储数据的最小单位是页,每一页所能容纳的数据为8060字节.而页的组织方式是通过B树结构  SQL Server向每个页内存储数据的最小单位是表的行(Row)  ...

  6. 转:sql server索引碎片和解决方法

    毫无疑问,给表添加索引是有好处的,你要做的大部分工作就是维护索引,在数据更改期间索引可能产生碎片,所以一些维护是必要的.碎片可能是你查询产生性能问题的来源. 那么到底什么是索引碎片呢?索引碎片实际上有 ...

  7. 唐伯猫的 sql server 2008 的安装和操作记录

    在服务器win 2008 server r2 上安装sql 首先下载sql  server 2008  ,云盘有存储sql,很多论坛也有下载SQLEXPRADV_x64_CHS.exe 双击sql s ...

  8. sql server 索引碎片相关问题

    1.查看表的索引碎片情况 --改成当前库 use DB_Name --创建变量 指定要查看的表 declare @table_id int set @table_id=object_id('Table ...

  9. SQL SERVER 索引碎片

    一次发现同样的SQL在线上库和复制库执行时间差好多,重新创建相关表索引,性能提升明显,怀疑索引有碎片

随机推荐

  1. Docker----在Docker中部署Asp.net core2.1以及修改发布

    本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序,以及修改系统之后,发布更新.本文章采用自定义的Docker文件 系统要求: 1.服务器或本地已经安装docker 一.创建一 ...

  2. 分割字符串和截取字符串:split 和substring

    //按“,”截取字符串 String id="123123,234534,453456"; String[] idArry = id.trim().split(",&qu ...

  3. Linux 允许或者禁止ping

    Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping. 具体的配置方法如 ...

  4. echarts 隐藏Y轴最大最小值label及分割线 ----障眼大发好使

    需求图 1====>label 最大最小值还好弄, yAxis{ axisLabel{ showMinLabel: false, showMaxLabel: false, }} 2====> ...

  5. java gui 2

    1,编写程序,随机生成两个数,用户输入两个数的和,并进行评判.程序的初始界面如下: 点击“获取题目”,随机生成两个100以内的int类型的数,界面如下: 提示: (1)使用java.util.Rand ...

  6. 前端工具mock的使用 - 造数据模拟网络请求

    前后端同步开发过程中,有时候前端页面完成了,需要等待后端接口完成部署后才能联调. 这个时候如果不想等待,想自己造数据模拟网络请求,这种情况就能用到mock工具了. mock工具可以用在web网站,也能 ...

  7. vue请求PHP接口报错provisional headers are shown

    因为服务器相应时间太长, 所以出现这个提示. 解决办法: 把axios的请求超时的时间timeout的时间改长一点.

  8. flink学习

    flink介绍: Apache Flink is an open source platform for distributed stream and batch data processing. F ...

  9. jar文件内lib引用的jar插件修改后更新

    打包的java服务在第三方jar进行修改后,要更新线上的jar包时,直接替换原有lib引用的jar文件,会造成服务起不来, 可在本地clean install之后,用线上的classes文件夹替换本地 ...

  10. tp5 整合 个推

    这里因为业务需要使用推送功能 uni 里面前端集成了个推 所以选择了个推来做推送. 个推的官方文档地址: http://docs.getui.com/getui/server/php/start/ 在 ...