• 使用 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)

  • 相关阅读:
    ubuntu新的配置
    今天下午鼓捣android-studio的一些经验
    Sublime Text 3
    学Web前端开发,选择培训学校是关键--青岛思途
    让HTML5游戏来的更猛烈些吧!--青岛思途
    Java架构师和开发者实用工具推荐
    Java培训班4个月有用吗?
    Java培训机构如何选择才能避免被骗?
    Java跟JavaScript两者间的关系和区别
    浅谈java中的四个核心概念--思途青岛
  • 原文地址:https://www.cnblogs.com/kuku/p/11866032.html
Copyright © 2020-2023  润新知