zoukankan      html  css  js  c++  java
  • [zhuan]自动整理索引碎片的代码

    --------------------------------------------------------------------------------
    --
     ensure a use databse statement has been executed first.
    --
    ------------------------------------------------------------------------------
     
    USE GB_BEJ--DBName

    SET nocount ON

    DECLARE @objectid INT ,
        
    @indexid INT ,
        
    @partitioncount BIGINT ,
        
    @schemaname SYSNAME ,
        
    @objectname SYSNAME ,
        
    @indexname SYSNAME ,
        
    @partitionnum BIGINT ,
        
    @partitions BIGINT ,
        
    @frag FLOAT ,
        
    @command VARCHAR(1000) ,
        
    @db_id INT
    SET @db_id = DB_ID()
    PRINT '数据库ID:' + CONVERT(VARCHAR(10),@db_id)
    SELECT  objectid = object_id ,
            indexid 
    = index_id ,
            partitionnum 
    = partition_number ,
            frag 
    = avg_fragmentation_in_percent
    INTO    #work_to_do
    FROM    sys.dm_db_index_physical_stats(@db_idNULLNULLNULL'LIMITED')
    WHERE   avg_fragmentation_in_percent > 5.0
            
    AND index_id > 0

    -- declare the cursor for the list of partitions to be processed.
    DECLARE partitions CURSOR
    FOR
        
    SELECT  *
        
    FROM    #work_to_do

    -- Open the cursor.
    OPEN partitions

    -- Loop through the partitions.
    FETCH NEXT FROM partitions INTO @objectid@indexid@partitionnum@frag

    WHILE @@fetch_status = 0 
        
    BEGIN
            
    SELECT  @objectname = o.name ,
                    
    @schemaname = s.name
            
    FROM    sys.objects AS o
                    
    INNER JOIN sys.schemas AS s ON s.schema_id = o.schema_id
            
    WHERE   o.object_id = @objectid

            
    SELECT  @indexname = name
            
    FROM    sys.indexes
            
    WHERE   object_id = @objectid
                    
    AND index_id = @indexid

            
    SELECT  @partitioncount = COUNT(*)
            
    FROM    sys.partitions
            
    WHERE   object_id = @objectid
                    
    AND index_id = @indexid        

       
    -- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding
            IF @frag < 30.0 
                
    BEGIN
                    
    SELECT  @command = 'alter index [' + @indexname + '] on '
                            
    + @schemaname + '.' + @objectname + ' reorganize'

                    
    IF @partitioncount > 1 
                        
    SELECT  @command = @command + ' partition='
                                
    + CONVERT(CHAR@partitionnum)
                
    END

            
    IF @frag >= 30.0 
                
    BEGIN
                    
    SELECT  @command = 'alter index [' + @indexname + '] on '
                            
    + @schemaname + '.' + @objectname + ' rebuild'

                    
    IF @partitioncount > 1 
                        
    SELECT  @command = @command + ' partition='
                                
    + CONVERT(CHAR@partitionnum)
                
    END
            
            
            
    PRINT 'Executed: ' + @command    
            
            
    EXEC (@command)
            

            
    FETCH NEXT FROM partitions INTO @objectid@indexid@partitionnum,
                
    @frag
        
    END

    -- free resource
    CLOSE partitions
    DEALLOCATE partitions
    DROP TABLE #work_to_do
  • 相关阅读:
    大话设计模式(二)代理模式 工厂方法模式 原型模式 模板方法模式 迪米特法模式 外观模式
    大话设计模式(一)简单工厂模式 策略模式 单一职责原则 开放-封闭原则 依赖倒置原则 装饰模式
    eclipse为hibernate.cfg.xml添加自动提示【转】
    Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode
    Chrome 浏览器提示adobe flash player不是最新版本
    spring mvc <mvc:default-servlet-handler /> 。
    S2SH CRUD 整合
    Ms sql行转列。汇总
    Hibernate中的数据库方言(Dialect)
    SSH整合(1)异常
  • 原文地址:https://www.cnblogs.com/itelite/p/2091893.html
Copyright © 2011-2022 走看看