• DBCC 简介


    DBCC是SQL Server的数据库控制台命令(Database Console Command)的简写,主要分为维护、信息、验证和其他共四类。

    一,维护

    DBCC 可以回收空间、收缩数据库,更新系统视图中的页面数量和行数量。

    1,回收空间

    从表或索引视图中的被删除的可变长度列(variable-length column)中回收空间,该命令不会从已被删除的固定长度的列(fix-length column)中回收空间。

    DBCC CLEANTABLE  
    (  
        { database_name | database_id | 0 }  
        , { table_name | table_id | view_name | view_id }  
        [ , batch_size ]  
    )  
    [ WITH NO_INFOMSGS ] 

    batch_size是指每个事务处理的数据行数量,默认值是0,表示在一个事务中处理整个表。

    2,数据库收缩

    DBCC SHRINKDATABASE,用于收缩数据库的数据文件和日志文件, DBCC SHRINKFILE,用于收缩数据库中指定的单个文件,或者清空单个文件。

    DBCC SHRINKDATABASE   
    ( database_name | database_id | 0   
         [ , target_percent ]   
         [ , { NOTRUNCATE | TRUNCATEONLY } ]   
    )  
    [ WITH NO_INFOMSGS ] 
    
    DBCC SHRINKFILE   
    (  
        { file_name | file_id }   
        { [ , EMPTYFILE ]   
        | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]  
        }  
    )  
    [ WITH NO_INFOMSGS ] 

    3,更新视图中的页面数量和行数量

    该命令用于校正表或索引中每个分区的行、已用页,保留页,叶级页和数据页的数量,使得 sp_spaceused  等系统存储过程或视图返回的结果更精确。

    DBCC UPDATEUSAGE   
    (   { database_name | database_id | 0 }   
        [ , { table_name | table_id | view_name | view_id }   
        [ , { index_name | index_id } ] ]   
    ) [ WITH [ NO_INFOMSGS ] [ , ] [ COUNT_ROWS ] ] 

    二,信息

    信息类DBCC主要输出信息。

    1,查看最新的语句

    显示从客户端发送到Microsoft SQL Server实例的最后一条语句。

    DBCC INPUTBUFFER ( session_id [ , request_id ])  
    [WITH NO_INFOMSGS ] 

    2,查看活跃事务

    DBCC OPENTRAN   
    [   
        ( [ database_name | database_id | 0 ] )   
        { [ WITH TABLERESULTS ]  
          [ , [ NO_INFOMSGS ] ]  
        }  
    ] 

    3,查看日志空间,重置wait和latch的统计

    DBCC SQLPERF   
    (  
         [ LOGSPACE ]  
         | [ "sys.dm_os_latch_stats" , CLEAR ]  
         | [ "sys.dm_os_wait_stats" , CLEAR ]  
    )   
    [WITH NO_INFOMSGS ] 

    4,查看当前连接的SET选项

    DBCC USEROPTIONS  [ WITH NO_INFOMSGS ] 

    5,查看表或索引视图的统计信息

    DBCC SHOW_STATISTICS  用于显示表或索引视图的统计信息,查询优化器使用统计信息来评估查询结果的大小和基数。

    DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )   
    [ WITH [ NO_INFOMSGS ] < option > [ , n ] ]  
    < option > :: =  STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM  

    三,验证

    验证类DBCC 主要用于检查数据的完整性、约束的完整性、文件的完整性,并可以查看和设置ID列的值。

    1,检查数据的完整性

    DBCC CHECKDB 的用法,可以参考《Could not continue scan with NOLOCK due to data movement

    2,检查约束的完整性

    3,检查文件的完整型

    4,查看当前表的ID值

    DBCC CHECKIDENT,用于查看当前表的ID值,或者为当前表设置一个新的ID值(即重置ID种子值)

    DBCC CHECKIDENT ( table_name   [, { NORESEED | { RESEED [, new_reseed_value ] } } ]  )  
    [ WITH NO_INFOMSGS ] 

    四,追踪(TRACE)

    打开Trace,关闭trace,查看trace的状态:

    查看追踪状态

    DBCC TRACESTATUS ( [ [ trace# [ ,...n ] ] [ , ] [ -1 ] ] )   
    [ WITH NO_INFOMSGS ] 

    五,碎片

    SQL Server按照特定的顺序来存储数据,如果数据叶被移动或拆分,会导致碎片的产生。

    1,显示表或索引的碎片信息

    该命令将被移除,推荐使用  sys.dm_db_index_physical_stats 替换。

    DBCC SHOWCONTIG   
    [ (   
        { table_name | table_id | view_name | view_id }   
        [ , index_name | index_id ]   
    ) ]   
        [ WITH   
            {   
             [ , [ ALL_INDEXES ] ]   
             [ , [ TABLERESULTS ] ]   
             [ , [ FAST ] ]  
             [ , [ ALL_LEVELS ] ]   
             [ NO_INFOMSGS ]  
             }  
        ] 

    2,索引碎片的重组和重建

    DBCC INDEXDEFRAG   用于索引碎片的重组,该命令将被移除,推荐使用 ALTER INDEX  REORGANIZE 替代

    DBCC DBREINDEX  用于索引碎片的重建,该命令将被移除,推荐使用 ALTER INDEX  REBUILD替代

    六,缓存

    SQL Server的缓存池分为数据缓存和计划缓存,数据缓存用于存储数据,而计划缓存用于存储执行计划等信息。

    1,查看过程缓存(plan cache)

    DBCC PROCCACHE [ WITH NO_INFOMSGS ] 

    2,移除缓存

    DBCC DROPCLEANBUFFERS 用于移除缓存池中的clean buffer,为了删除clean buffer,首先调用CHECKPOINT,把所有的脏数据页写回到硬盘中,此时的缓存不存在任何脏数据库,称作 clean buffer。

    DBCC FREEPROCCACHE 用于移除缓存池中的plan cache,或者移除资源池中的缓存项目。

    DBCC FREESYSTEMCACHE 从所有缓存中移除没有使用的缓存项目(unused cache entries),SQL Server在后台会自动清空未使用的缓存项目,也可以手动指定命令从每个缓存或Resource Governor的资源池中移除未使用的项目。

    DBCC DROPCLEANBUFFERS [ WITH NO_INFOMSGS ]  
    
    DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]  
    
    DBCC FREESYSTEMCACHE ( 'ALL' [, pool_name ] )   
        [WITH  { [ MARK_IN_USE_FOR_REMOVAL ] , [ NO_INFOMSGS ]  } ]  

    pool_name 是Resource Governor的资源池名称,可以从 sys.dm_resource_governor_resource_pools  获得资源池名称。

    3,移除其他缓存

    DBCC FLUSHAUTHCACHE : 移除数据验证缓存,清空login和firewall 规则

    DBCC FREESESSIONCACHE: 清空分布式查询的连接缓存

    参考文档:

    DBCC (Transact-SQL)

  • 相关阅读:
    通用订单搜索的API设计得失录
    碎碎念集萃十七
    基于Groovy+HttpRestful的超轻量级的接口测试用例配置的设计方案及DEMO实现
    决策:作出更好选择的方法与技巧
    碎碎念集萃十六
    谈谈Groovy闭包
    Groovy常用编程知识点简明教程
    TMC首秀:写作带给我生命的影响与感动
    关于年龄
    工程质量保障的基本规范和建议
  • 原文地址:https://www.cnblogs.com/ljhdo/p/13218483.html
Copyright © 2020-2023  润新知