zoukankan      html  css  js  c++  java
  • 0. 跟踪标记 (Trace Flag) 简介

    . 什么是跟踪标记

    SQL Server 跟踪标记(Trace Flag),像是一个开关,可用来自定义SQL Server的某种行为或特性,在性能诊断,系统调试等方面较为常用。比如:开启1204或1222跟踪标记,可在errorlog里记录死锁信息的明细。

    跟踪标记有会话级和实例级两种。

    . 如何开启跟踪标记

    1. SQL Server 服务启动时开启

    SQL Server服务从类似如下路径启动程序:

    C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQL2016MSSQLBinnsqlservr.exe

    而sqlservr.exe接受一些启动参数,其中就包含了跟踪标记。

    以命名实例MSSQL2016,跟踪标记610 为例: 

    1.1 使用sqlservr.exe来启动

    (1) 先停掉服务 (以管理员身份运行cmd命令窗口)

    默认实例:net stop MSSQLSERVER / net stop "SQL Server (MSSQLSERVER)"

    命名实例:net stop MSSQL$MSSQL2016 / net stop "SQL Server (MSSQL2016)"

    (2) 启动服务 (先cd切换到sqlservr.exe目录)

    默认实例:sqlservr.exe –T610

    命名实例:sqlservr.exe -sMSSQL2016 –T610

    命令行举例:

    C:Windowssystem32>net stop MSSQL$MSSQL2016
    The SQL Server (MSSQL2016) service is stopping.
    The SQL Server (MSSQL2016) service was stopped successfully.
    
    C:Windowssystem32>cd C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQL2016MSSQLBinn
    C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQL2016MSSQLBinn>sqlservr -sMSSQL2016 -T610

     

    在数据库里执行SQL语句,可看到已启动的跟踪标记:

    dbcc tracestatus(-1)
    --TraceFlag    Status    Global    Session
    --610    1    1    0

     

    注:

    (1) 以这种方式启动的SQL Server,服务状态仍然是停止,但是SSMS/SQLCMD均可以连接并执行SQL语句,通常用于系统故障诊断/维护时,不作为常规启动方式使用;

    (2) 关闭当前的cmd窗口,即可关闭该次启动;

    1.2使用net命令来启动

    (1) 先停掉服务 (以管理员身份运行cmd命令窗口)

    默认实例:net stop MSSQLSERVER 或 net stop "SQL Server (MSSQLSERVER)"

    命名实例:net stop MSSQL$MSSQL2016或 net stop "SQL Server (MSSQL2016)"

    (2) 启动服务(以管理员身份运行cmd命令窗口)

    默认实例:net start MSSQLSERVER /T610 或net start "SQL Server (MSSQLSERVER)" /T610

    命名实例:net start MSSQL$MSSQL2016 /T610 或net start "SQL Server (MSSQL2016)" /T610

    命令行举例:

    C:Windowssystem32>net stop MSSQL$MSSQL2016
    The SQL Server (MSSQL2016) service is stopping.
    The SQL Server (MSSQL2016) service was stopped successfully.
    
    C:Windowssystem32>net start MSSQL$MSSQL2016 /T610
    The SQL Server (MSSQL2016) service is starting.
    The SQL Server (MSSQL2016) service was started successfully.

     

    在数据库里执行SQL语句,可看到已启动的跟踪标记:

    dbcc tracestatus(-1)
    --TraceFlag    Status    Global    Session
    --610    1    1    0

     

    注:

    (1) 以net命令启动SQL Server服务时,exe程序的参数通过斜线(/)来传递而不是横线(-):/T610;

    1.3 使用配置管理器 (Configuration Manager) 来启动

    打开SQL Server 配置管理器SQL Server 服务选择相应实例:

    (1) 停止相应实例的服务

    (2) 属性启动参数, 输入-T610 并添加

    (3) 启动相应实例的服务

    在数据库里执行SQL语句,可看到已启动的跟踪标记:

    dbcc tracestatus(-1)
    --TraceFlag    Status    Global    Session
    --610    1    1    0

     

    注:

    (1) 启动参数被保存在注册表里,在服务启动时加载,所以会一直有效,直到在启动参数中删除该项并保存;

    (2) 在配置管理器中修改SQL Server服务相关的参数为最佳实践(Best Practice),推荐;

    2. SQL Server 服务启动后开启

    在SQL Server服务启动后,可通过DBCC命令来开/关跟踪标记

    --开启会话级跟踪标记
    dbcc traceon(610)
    --会话级跟踪标记,只能在所在会话关闭
    dbcc traceoff(610)
    
    --开启实例级跟踪标记
    dbcc traceon(610,-1)
    --实例级跟踪标记,在所有会话都可关闭
    dbcc traceoff(610,-1)
    
    --指定-1,显示所有已开启跟踪标记
    dbcc tracestatus(-1)

     

    注:

    (1) 会话级跟踪标记,只对当前会话有效,其他会话不受影响;

    (2) 实例级跟踪标记,整个实例有效;

    小结:

    (1)    以上几种方式,只有在SQL Server配置管理器里修改启动参数添加跟踪标记,会被保存到注册表,从而每次启动服务时跟踪标记都可以生效,其他几种方式只是在当前的命令行里开启了跟踪标记选项,正常重启服务后,跟踪标记就不见了;

    (2)    只有DBCC traceon 可开启会话级跟踪标记,其他开启方式均为实例级;

    (3)    如果要在生产环境使用,请尽可能多的测试,尤其是非文档记载的跟踪标记;

  • 相关阅读:
    随便说说
    郁闷
    请各栏目的负责人,开始整理自己栏目的文章
    祝博客园生日快乐
    Windows Live Writer中打开博客日志(最新版可以支持打开3000以内的日志)
    编译器优化对齐(字节对齐)
    HDlock 锁住硬盘的解决方式
    linux中env,export, set的区别
    System Volume Information 文件夹权限控制
    BOOL与bool的区别(bool不是c的关键字,c++中bool也不是int)
  • 原文地址:https://www.cnblogs.com/seusoftware/p/5711207.html
Copyright © 2011-2022 走看看