之前写过一篇博客“SQL Server中是否可以准确获取最后一次索引重建的时间?“,里面主要讲述了三个问题:我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild)的时间? 最后一次索引重组(INDEX REORGANIZE)的时间呢?,当时得出的结论,答案是我们无法准确的找到索引的创建时间、最后一次索引重组时间,最后一次索引重建的时间。但是最近看到一篇博客“SQL Server – Get Index Creation Date”,然后研究了一下,即使SQL Server暂时没有一个系统表或DMV视图有保存索引创建的时间,索引重建的时间、索引重组的时间。但是我们可以通过系统跟踪文件获取它们的值,当然也有限制条件并不是所有的索引都能找到这些值。请见下面详细解说:

索引的创建时间

索引的创建时间,可以用下面SQL获取,但是我们知道跟踪有可能停止或禁用;跟踪文件也可能被覆盖。所以这种方法只能查询最近一段时间的。它有很强的时效性。所以这种方法不能通用。注定其只能作为一种方法参考,而不能通用。

DECLARE @filename VARCHAR(500) 

SELECT @filename = CAST(value AS VARCHAR(500)) 

FROM fn_trace_getinfo(DEFAULT) 

WHERE property = 2 

  AND value IS NOT NULL 

 

-- Go back 4 files since default trace only keeps the last 5 and start from there.

SELECT @filename = substring(@filename, 0, charindex('_', @filename)+1) + convert(varchar, (convert(int, substring(left(@filename, len(@filename)-4), charindex('_', @filename)+1, len(@filename)))-4)) + '.trc'

 

SELECT 

       gt.EventClass, 

       gt.EventSubClass,

       te.Name AS EventName,

       gt.HostName, 

       gt.StartTime, 

       gt.DatabaseName,

       gt.ObjectName,

       gt.IndexID

FROM fn_trace_gettable(@fileName, DEFAULT) gt 

JOIN sys.trace_events te ON gt.EventClass = te.trace_event_id 

WHERE EventClass = 46

  and ObjectType = 22601

  and gt.DatabaseName <> 'tempdb'

ORDER BY StartTime desc; 

索引的重建时间 &索引的重组时间

如下所示,Object:Altered的trace_event_id为164,这里我们无法区分ALTER INDEX ... REBUILD 和  ALETER INDEX ...REORGANIZE. 对于索引重建、索引重组,fn_trace_gettable返回的TextData为Null值,也无从判断。所以这里能记录准确的时间,但是无法区分索引重建与索引重组。

DECLARE @filename VARCHAR(500) 

SELECT @filename = CAST(value AS VARCHAR(500)) 

FROM fn_trace_getinfo(DEFAULT) 

WHERE property = 2 

  AND value IS NOT NULL 

 

-- Go back 4 files since default trace only keeps the last 5 and start from there.

SELECT @filename = substring(@filename, 0, charindex('_', @filename)+1) + convert(varchar, (convert(int, substring(left(@filename, len(@filename)-4), charindex('_', @filename)+1, len(@filename)))-4)) + '.trc'

 

SELECT 

       gt.EventClass, 

       gt.EventSubClass,

       te.Name AS EventName,

       gt.HostName, 

       gt.StartTime, 

       gt.DatabaseName,

       gt.ObjectName,

       gt.IndexID

FROM fn_trace_gettable(@fileName, DEFAULT) gt 

JOIN sys.trace_events te ON gt.EventClass = te.trace_event_id 

WHERE EventClass = 164

  and ObjectType = 22601

  and gt.DatabaseName <> 'tempdb'

ORDER BY StartTime desc; 

 

测试验证如下所示:

USE YourSQLDba;

GO

ALTER INDEX Pk_HistMaintTrav ON [Maint].[JobHistory] REBUILD;

 

ALTER INDEX PK_DataBaseSizeDtl_Day ON [Maint].[DataBaseSizeDtl_Day] REORGANIZE;

 

CREATE INDEX IX_DataBaseSizeDtl_Day_N1 ON [Maint].[DataBaseSizeDtl_Day](DataBaseName);

注意:上面脚本在有些环境可能会出错,主要是因为trac文件的路径,例如C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\log_603.trc 就会遇到下面错误,需要根据实际情况修改脚本。

Msg 245, Level 16, State 1, Line 8

Conversion failed when converting the varchar value '50.MSSQLSERVER\MSSQL\Log\log_603' to data type int.

参考资料

https://sqlconjuror.com/sql-server-get-index-creation-date/

SQL Server获取索引创建时间&重建时间&重组时间的更多相关文章

  1. 【转】SQL SERVER获取索引脚本

    关于如何获取索引脚本的语句很多,上次在项目中需要去查询并获取索引脚本,所以写了一个简单的查询语句来进行获取. WITH    idxcol          AS ( SELECT           ...

  2. Sql Server聚集索引创建

    create CLUSTERED index IX_ZhuiZIDList_ZID on ZhuiZIDList (ZID)

  3. 公司内部培训SQL Server传统索引结构PPT分享

    公司内部培训SQL Server传统索引结构PPT分享 下载地址 http://files.cnblogs.com/files/lyhabc/SQLServer%E4%BC%A0%E7%BB%9F%E ...

  4. SQL Server 数据库索引

    原文:SQL Server 数据库索引 一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: ...

  5. SQL Server 查询优化 索引的结构与分类

    一.索引的结构 关系型数据库中以二维表来表达关系模型,表中的数据以页的形式存储在磁盘上,在SQL SERVER中,数据页是磁盘上8k的连续空间,那么,一个表的所有数据页在磁盘上是如何组织的呢?分两种情 ...

  6. 理解SQL Server中索引的概念

    T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他   简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能 ...

  7. [转]SQL SERVER整理索引碎片测试

    SQL SERVER整理索引碎片测试 SQL SERVER整理索引的方法也就这么几种,而且老是自作聪明的加入智能判断很不爽,还是比DBMS_ADVISOR差远了: 1SQL SERVER 2000/2 ...

  8. T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

  9. 理解SQL Server中索引的概念,原理

    转自:http://www.cnblogs.com/CareySon/archive/2011/12/22/2297568.html 简介 在SQL Server中,索引是一种增强式的存在,这意味着, ...

随机推荐

  1. solr集群与项目实战

    什么是 SolrCloud : SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时 ...

  2. 2019CCPC秦皇岛 K MUV LUV UNLIMITED(博弈)

    MUV LUV UNLIMITED Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  3. ACM小组的古怪象棋

    Description ACM小组的Samsara和Staginner对中国象棋特别感兴趣,尤其对马(可能是因为这个棋子的走法比较多吧)的使用进行深入研究.今天他们又在 构思一个古怪的棋局:假如Sam ...

  4. 微信小程序 buton清除默认样式

    相信很多小伙伴在开发小程序的时候都会碰到小程序Button默认样式的困扰,在重设样式的时候需要一次次的设置 分享一个自己在开发中的小方法: CSS all 简写属性 将除 unicode-bidi 与 ...

  5. 【重温基础】11.Map和Set对象

    本文是 重温基础 系列文章的第十一篇. 今日感受:注意身体,生病花钱又难受. 系列目录: [复习资料]ES6/ES7/ES8/ES9资料整理(个人整理) [重温基础]1.语法和数据类型 [重温基础]2 ...

  6. 【CSS】271- RGB、HSL、Hex网页色彩,看完这篇全懂了

    作者:CSS可乐 http://csscoke.com/2015/01/01/rgb-hsl-hex/ 网页使用到的色彩标示方法中,从古早时期大家都在用的16进位码(#000000).RGB色值标示. ...

  7. Linux搭建Java环境(JDK+Tomcat+MySQL)

    目录 一.项目环境: 二.安装JDK1.8 三.安装Tomcat8.5 四.安装MySQL数据库 五.配置JAVA项目 一.项目环境: 开发环境 生产环境 测试环境 硬件环境: web服务器:cpu: ...

  8. android 背景选择器

    <?xml version="1.0" encoding="utf-8" ?><selector xmlns:android="ht ...

  9. django----中使用事务 数据库的三大范式

    目录 orm中的事务操作 ⑴ 原子性(Atomicity) ⑵ 一致性(Consistency) ⑶ 隔离性(Isolation) ⑷ 持久性(Durability) django中使用事务 数据库三 ...

  10. Caffe源码-Solver类

    Solver类简介 Net类中实现了网络的前向/反向计算和参数更新,而Solver类中则是对此进行进一步封装,包含可用于逐次训练网络的Step()函数,和用于求解网络的优化解的Solve()函数,同时 ...