zoukankan      html  css  js  c++  java
  • 使用 sql server 默认跟踪分析执行的 SQL 语句

    如果没有启用 SQL SERVER 的跟踪器来跟踪 SQL SERVER 的 SQL 执行情况,又想查最近的 SQL 执行情况,网上一般说是使用 LogExprorer 这个工具,网上找了这个工具很久也没有找到。

    今天找了到了一篇文章,原因 SQL SERVER 现在有个默认跟踪文件,默认情况下,是启用了 SQL 的跟踪:

    https://www.cnblogs.com/DBFocus/archive/2010/05/19/1739535.html

    首先使用 select * from sys.configurations where configuration_id = 1568 查一下是否默认有打开默认跟踪,我查询了几台服务器,默认都是打开的,说明这个功能默认是打开的。

    如果没有打开,就使用:

    sp_configure 'show advanced options', 1;
    go
    reconfigure;
    go
    sp_configure 'default trace enabled', 1;
    go
    reconfigure;
    go

    来打开。

    使用 select * from ::fn_trace_getinfo(0) 可以获取跟踪文件保存的路径,默认跟踪的数据保存在文件中。

    使用以下语句查询相关的信息:

    select * from from ::fn_trace_gettable('C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLLOGlog.trc',0)

    整理一个:

    select
    loginname,
    loginsid,
    spid,
    hostname,
    applicationname,
    servername,
    databasename,
    objectname,
    e.category_id,
    cat.name as [CategoryName],
    textdata,
    starttime,
    eventclass,
    eventsubclass, --0表示begin,1表示commit
    e.name as EventName
    from ::fn_trace_gettable('C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLLOGlog.trc',0)
    inner join sys.trace_events e
    on eventclass = trace_event_id
    inner join sys.trace_categories as cat
    on e.category_id = cat.category_id
    where databasename = 'TraceDB' and
    objectname is null and --根据objectname来过滤
    e.category_id = 5 and --category 5表示对象
    e.trace_event_id = 46 --trace_event_id: 46表示Create对象,47表示Drop对象,164表示修改对象

    查询修改表的信息:

    where databasename = 'TraceDB' and
    objectname = 'MyTable' and
    e.category_id = 5 and
    e.trace_event_id = 164

    查义删除表的信息:

    where databasename = 'TraceDB' and
    objectname = 'MyTable' and
    e.category_id = 5 and
    e.trace_event_id = 47

    Default Trace还能跟踪到其他一些事件。例如你的日志文件快速增长,这时需要知道其原因。Default Trace会捕获日志增长事件,这对于排查问题很有价值。下面的查询会获得Default Trace中所有的log auto growth事件。

    select
    loginname,
    loginsid,
    spid,
    hostname,
    applicationname,
    servername,
    databasename,
    objectname,
    e.category_id,
    cat.name,
    textdata,
    starttime,
    endtime,
    duration,
    eventclass,
    eventsubclass,
    e.name as EventName
    from ::fn_trace_gettable('C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLLOGlog.trc',0)
    inner join sys.trace_events e
    on eventclass = trace_event_id
    inner join sys.trace_categories as cat
    on e.category_id = cat.category_id
    where databasename = 'TraceDB' and
    e.category_id = 2 and --categroy 2表示database
    e.trace_event_id = 93 --93表示日志文件自动增长事件

    与跟踪相关的函参考:

    https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ff848738(v=sql.105)

  • 相关阅读:
    Sizzle源码分析 (一)
    VueJS 数据驱动和依赖追踪分析
    使用 nvm 来管理nodejs版本 。
    在node中使用 ES6
    mongoDB & Nodejs 访问mongoDB (二)
    mongoDB & Nodejs 访问mongoDB (一)
    Javascript原型链和原型继承
    Javascript 闭包与高阶函数 ( 二 )
    SDOI2019&十二省联考 游记
    Luogu-3648 [APIO2014]序列分割
  • 原文地址:https://www.cnblogs.com/kuku/p/11866032.html
Copyright © 2011-2022 走看看