SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดจเดฟเด™เตเด™เตพเด•เตเด•เดฑเดฟเดฏเดพเดตเตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เด’เดฐเต เดกเดฟเดฌเดฟเดŽเด‚เดŽเดธเดฟเตฝ เดธเต‚เดšเดฟเด•เด•เตพ เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดชเด™เตเด•เต เดตเดนเดฟเด•เตเด•เตเดจเตเดจเต, เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฐเต‡เด–เด•เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต†เดŸเตเดŸเต†เดจเตเดจเตเดณเตเดณ เดคเดฟเดฐเดฏเตฝ เดจเตฝเด•เตเดจเตเดจเต. เด…เดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เด…เดตเตผเด•เตเด•เต เดธเดฎเดฏเดฌเดจเตเดงเดฟเดคเดฎเดพเดฏเดฟ เดธเต‡เดตเดจเด‚ เดจเตฝเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเดคเต. เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเต† เดตเดฟเดถเด•เดฒเดจเดคเตเดคเต†เดฏเตเด‚ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเต†เดฏเตเด‚ เด•เตเดฑเดฟเดšเตเดšเต เดงเดพเดฐเดพเดณเด‚ เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดˆ เดตเดฟเดทเดฏเด‚ เด…เดŸเตเดคเตเดคเดฟเดŸเต† เด…เดตเดฒเต‹เด•เดจเด‚ เดšเต†เดฏเตเดคเต เดˆ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเด‚.

เด‡เดคเดฟเดจเดพเดฏเดฟ เดชเดฃเดฎเดŸเดšเตเดšเตเดณเตเดณเดคเตเด‚ เดธเต—เดœเดจเตเดฏเดตเตเดฎเดพเดฏ เดจเดฟเดฐเดตเดงเดฟ เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เดณเตเดฃเตเดŸเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เดฑเต†เดกเดฟเดฎเต†เดฏเตเดกเต เด‰เดฃเตเดŸเต เดคเต€เดฐเตเดฎเดพเดจเด‚, เด’เดฐเต เด…เดกเดพเดชเตเดฑเตเดฑเต€เดตเต เด‡เตปเดกเด•เตเดธเต เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เดฐเต€เดคเดฟ เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดจเดฎเตเด•เตเด•เต เดธเต—เดœเดจเตเดฏ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดจเต‹เด•เตเด•เดพเด‚ SQLIndexManager, เดฐเดšเดฟเดšเตเดšเดคเต เด…เดฒเตปเดกเต†เดจเตเดฑเตบ.

SQLIndexManager เด‰เด‚ เดฎเดฑเตเดฑเต เดจเดฟเดฐเดตเดงเดฟ เด…เดจเดฒเต‹เด—เตเด•เดณเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดชเตเดฐเดงเดพเดจ เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เดฐเดšเดฏเดฟเดคเดพเดตเต เดคเดจเตเดจเต†เดฏเดพเดฃเต เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เด‡เดตเดฟเดŸเต† ะธ เด‡เดตเดฟเดŸเต†.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดˆ เดธเต‹เดซเตเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เดธเตŠเดฒเตเดฏเต‚เดทเดจเตเดฑเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดถเต‡เดทเดฟเดฏเตเด‚ เดžเด™เตเด™เตพ เดฌเดพเดนเตเดฏเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด‚.

เดˆ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดšเตผเดšเตเดš เดšเต†เดฏเตเดฏเตเดจเตเดจเต เด‡เดตเดฟเดŸเต†.
เด•เดพเดฒเด•เตเดฐเดฎเต‡เดฃ, เดฎเดฟเด•เตเด• เด•เดฎเดจเตเดฑเตเด•เดณเตเด‚ เดฌเด—เตเด•เดณเตเด‚ เดคเดฟเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดŸเต.

เด…เดคเดฟเดจเดพเตฝ, เดจเดฎเตเด•เตเด•เต เด‡เดชเตเดชเต‹เตพ SQLIndexManager เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดคเดจเตเดจเต† เดชเต‹เด•เดพเด‚.

เดตเดฟเดทเตเดตเตฝ เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ 4.5-เตฝ C# .NET เดซเตเดฐเต†เดฏเดฟเด‚เดตเตผเด•เตเด•เต 2017-เตฝ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เด•เต‚เดŸเดพเดคเต† เดซเต‹เดฎเตเด•เตพเด•เตเด•เดพเดฏเดฟ DevExpress เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด‡เดคเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดŽเดฒเตเดฒเดพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเด‚ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดซเดฏเดฒเตเด•เดณเดฟเตฝ เดœเดจเดฑเต‡เดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต:

  1. เดธเต‚เดšเดฟเด•
  2. เดšเต‹เดฆเตเดฏเด‚
  3. เด•เตเดตเดฑเดฟ เดŽเดžเตเดšเดฟเตป
  4. เดธเต†เตผเดตเตผเด‡เตปเดซเต‹

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดกเดฟเดฌเดฟเดŽเด‚เดŽเดธเดฟเดฒเต‡เด•เตเด•เต เดšเต‹เดฆเตเดฏเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด’เดชเตเดชเดฟเดŸเตเดจเตเดจเต:

ApplicationName=โ€SQLIndexManagerโ€

เดจเดฟเด™เตเด™เตพ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด’เดฐเต เด•เดฃเด•เตเดทเตป เดšเต‡เตผเด•เตเด•เดพเตป เด’เดฐเต เดฎเต‹เดกเตฝ เดตเดฟเตปเดกเต‹ เดคเตเดฑเด•เตเด•เตเด‚:
SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด‡เดตเดฟเดŸเต†, เดฒเต‹เด•เตเด•เตฝ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เตเด•เตพ เดตเดดเดฟ เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เดŽเดฒเตเดฒเดพ MS SQL เดธเต†เตผเดตเตผ เดธเด‚เดญเดตเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดฒเดฟเดธเตเดฑเตเดฑเต เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด‡เดคเตเดตเดฐเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.

เดชเตเดฐเดงเดพเดจ เดฎเต†เดจเตเดตเดฟเดฒเต† เด‡เดŸเดคเตเดตเดถเดคเตเดคเตเดณเตเดณ เดฌเดŸเตเดŸเตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด•เดฃเด•เตเดทเตป เดšเต‡เตผเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, DBMS-เดฒเต‡เด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดšเต‹เดฆเตเดฏเด™เตเด™เตพ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด‚:

  1. DBMS-เดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเต‡เดŸเตเดจเตเดจเต
    SELECT ProductLevel  = SERVERPROPERTY('ProductLevel')
         , Edition       = SERVERPROPERTY('Edition')
         , ServerVersion = SERVERPROPERTY('ProductVersion')
         , IsSysAdmin    = CAST(IS_SRVROLEMEMBER('sysadmin') AS BIT)
    

  2. เดฒเดญเตเดฏเดฎเดพเดฏ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต, เด…เดตเดฏเตเดŸเต† เดธเด‚เด•เตเดทเดฟเดชเตเดค เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เดจเต‡เดŸเตเดจเตเดจเต
    SELECT DatabaseName = t.[name]
         , d.DataSize
         , DataUsedSize  = CAST(NULL AS BIGINT)
         , d.LogSize
         , LogUsedSize   = CAST(NULL AS BIGINT)
         , RecoveryModel = t.recovery_model_desc
         , LogReuseWait  = t.log_reuse_wait_desc
    FROM sys.databases t WITH(NOLOCK)
    LEFT JOIN (
        SELECT [database_id]
             , DataSize = SUM(CASE WHEN [type] = 0 THEN CAST(size AS BIGINT) END)
             , LogSize  = SUM(CASE WHEN [type] = 1 THEN CAST(size AS BIGINT) END)
        FROM sys.master_files WITH(NOLOCK)
        GROUP BY [database_id]
    ) d ON d.[database_id] = t.[database_id]
    WHERE t.[state] = 0
        AND t.[database_id] != 2
        AND ISNULL(HAS_DBACCESS(t.[name]), 1) = 1
    

เดฎเตเด•เดณเดฟเดฒเต† เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดค เดถเต‡เดทเด‚, MS SQL เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดนเตเดฐเดธเตเดต เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏ เด’เดฐเต เดตเดฟเตปเดกเต‹ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด…เดตเด•เดพเดถเด™เตเด™เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเดพเดฃเต เดตเดฟเดชเตเดฒเต€เด•เตƒเดค เดตเดฟเดตเดฐเด™เตเด™เตพ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต. เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ sysadmin, เดคเตเดŸเตผเดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดดเตเดšเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดพเด‚ sys.master_files. เด…เดคเตเดคเดฐเด‚ เด…เดตเด•เดพเดถเด™เตเด™เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดฎเดจเตเดฆเด—เดคเดฟเดฏเดฟเดฒเดพเด•เตเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป เด•เตเดฑเดšเตเดšเต เดกเดพเดฑเตเดฑ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด‚.

เด‡เดตเดฟเดŸเต† เดจเดฟเด™เตเด™เตพ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต "เดถเดฐเดฟ" เดฌเดŸเตเดŸเดฃเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเดฃเด‚.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดธเต‚เดšเดฟเด•เด•เดณเตเดŸเต† เด…เดตเดธเตเดฅ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เด“เดฐเต‹ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดจเตเด‚ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด‚:

เดธเต‚เดšเดฟเด• เดจเดฟเดฒ เดตเดฟเดถเด•เดฒเดจเด‚

declare @Fragmentation float=15;
declare @MinIndexSize bigint=768;
declare @MaxIndexSize bigint=1048576;
declare @PreDescribeSize bigint=32768;
SET NOCOUNT ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
IF OBJECT_ID('tempdb.dbo.#AllocationUnits') IS NOT NULL
DROP TABLE #AllocationUnits
CREATE TABLE #AllocationUnits (
ContainerID   BIGINT PRIMARY KEY
, ReservedPages BIGINT NOT NULL
, UsedPages     BIGINT NOT NULL
)
INSERT INTO #AllocationUnits (ContainerID, ReservedPages, UsedPages)
SELECT [container_id]
, SUM([total_pages])
, SUM([used_pages])
FROM sys.allocation_units WITH(NOLOCK)
GROUP BY [container_id]
HAVING SUM([total_pages]) BETWEEN @MinIndexSize AND @MaxIndexSize
IF OBJECT_ID('tempdb.dbo.#ExcludeList') IS NOT NULL
DROP TABLE #ExcludeList
CREATE TABLE #ExcludeList (ID INT PRIMARY KEY)
INSERT INTO #ExcludeList
SELECT [object_id]
FROM sys.objects WITH(NOLOCK)
WHERE [type] IN ('V', 'U')
AND ( [is_ms_shipped] = 1 )
IF OBJECT_ID('tempdb.dbo.#Partitions') IS NOT NULL
DROP TABLE #Partitions
SELECT [object_id]
, [index_id]
, [partition_id]
, [partition_number]
, [rows]
, [data_compression]
INTO #Partitions
FROM sys.partitions WITH(NOLOCK)
WHERE [object_id] > 255
AND [rows] > 0
AND [object_id] NOT IN (SELECT * FROM #ExcludeList)
IF OBJECT_ID('tempdb.dbo.#Indexes') IS NOT NULL
DROP TABLE #Indexes
CREATE TABLE #Indexes (
ObjectID         INT NOT NULL
, IndexID          INT NOT NULL
, IndexName        SYSNAME NULL
, PagesCount       BIGINT NOT NULL
, UnusedPagesCount BIGINT NOT NULL
, PartitionNumber  INT NOT NULL
, RowsCount        BIGINT NOT NULL
, IndexType        TINYINT NOT NULL
, IsAllowPageLocks BIT NOT NULL
, DataSpaceID      INT NOT NULL
, DataCompression  TINYINT NOT NULL
, IsUnique         BIT NOT NULL
, IsPK             BIT NOT NULL
, FillFactorValue  INT NOT NULL
, IsFiltered       BIT NOT NULL
, PRIMARY KEY (ObjectID, IndexID, PartitionNumber)
)
INSERT INTO #Indexes
SELECT ObjectID         = i.[object_id]
, IndexID          = i.index_id
, IndexName        = i.[name]
, PagesCount       = a.ReservedPages
, UnusedPagesCount = CASE WHEN ABS(a.ReservedPages - a.UsedPages) > 32 THEN a.ReservedPages - a.UsedPages ELSE 0 END
, PartitionNumber  = p.[partition_number]
, RowsCount        = ISNULL(p.[rows], 0)
, IndexType        = i.[type]
, IsAllowPageLocks = i.[allow_page_locks]
, DataSpaceID      = i.[data_space_id]
, DataCompression  = p.[data_compression]
, IsUnique         = i.[is_unique]
, IsPK             = i.[is_primary_key]
, FillFactorValue  = i.[fill_factor]
, IsFiltered       = i.[has_filter]
FROM #AllocationUnits a
JOIN #Partitions p ON a.ContainerID = p.[partition_id]
JOIN sys.indexes i WITH(NOLOCK) ON i.[object_id] = p.[object_id] AND p.[index_id] = i.[index_id] 
WHERE i.[type] IN (0, 1, 2, 5, 6)
AND i.[object_id] > 255
DECLARE @files TABLE (ID INT PRIMARY KEY)
INSERT INTO @files
SELECT DISTINCT [data_space_id]
FROM sys.database_files WITH(NOLOCK)
WHERE [state] != 0
AND [type] = 0
IF @@ROWCOUNT > 0 BEGIN
DELETE FROM i
FROM #Indexes i
LEFT JOIN sys.destination_data_spaces dds WITH(NOLOCK) ON i.DataSpaceID = dds.[partition_scheme_id] AND i.PartitionNumber = dds.[destination_id]
WHERE ISNULL(dds.[data_space_id], i.DataSpaceID) IN (SELECT * FROM @files)
END
DECLARE @DBID   INT
, @DBNAME SYSNAME
SET @DBNAME = DB_NAME()
SELECT @DBID = [database_id]
FROM sys.databases WITH(NOLOCK)
WHERE [name] = @DBNAME
IF OBJECT_ID('tempdb.dbo.#Fragmentation') IS NOT NULL
DROP TABLE #Fragmentation
CREATE TABLE #Fragmentation (
ObjectID         INT NOT NULL
, IndexID          INT NOT NULL
, PartitionNumber  INT NOT NULL
, Fragmentation    FLOAT NOT NULL
, PRIMARY KEY (ObjectID, IndexID, PartitionNumber)
)
INSERT INTO #Fragmentation (ObjectID, IndexID, PartitionNumber, Fragmentation)
SELECT i.ObjectID
, i.IndexID
, i.PartitionNumber
, r.[avg_fragmentation_in_percent]
FROM #Indexes i
CROSS APPLY sys.dm_db_index_physical_stats(@DBID, i.ObjectID, i.IndexID, i.PartitionNumber, 'LIMITED') r
WHERE i.PagesCount <= @PreDescribeSize
AND r.[index_level] = 0
AND r.[alloc_unit_type_desc] = 'IN_ROW_DATA'
AND i.IndexType IN (0, 1, 2)
IF OBJECT_ID('tempdb.dbo.#Columns') IS NOT NULL
DROP TABLE #Columns
CREATE TABLE #Columns (
ObjectID     INT NOT NULL
, ColumnID     INT NOT NULL
, ColumnName   SYSNAME NULL
, SystemTypeID TINYINT NULL
, IsSparse     BIT
, IsColumnSet  BIT
, MaxLen       INT
, PRIMARY KEY (ObjectID, ColumnID)
)
INSERT INTO #Columns
SELECT ObjectID     = [object_id]
, ColumnID     = [column_id]
, ColumnName   = [name]
, SystemTypeID = [system_type_id]
, IsSparse     = [is_sparse]
, IsColumnSet  = [is_column_set]
, MaxLen       = [max_length]
FROM sys.columns WITH(NOLOCK)
WHERE [object_id] IN (SELECT DISTINCT i.ObjectID FROM #Indexes i)
IF OBJECT_ID('tempdb.dbo.#IndexColumns') IS NOT NULL
DROP TABLE #IndexColumns
CREATE TABLE #IndexColumns (
ObjectID   INT NOT NULL
, IndexID    INT NOT NULL
, OrderID    INT NOT NULL
, ColumnID   INT NOT NULL
, IsIncluded BIT NOT NULL
, PRIMARY KEY (ObjectID, IndexID, ColumnID)
)
INSERT INTO #IndexColumns
SELECT ObjectID   = [object_id]
, IndexID    = [index_id]
, OrderID    = CASE WHEN [is_included_column] = 0 THEN [key_ordinal] ELSE [index_column_id] END
, ColumnID   = [column_id]
, IsIncluded = ISNULL([is_included_column], 0)
FROM sys.index_columns ic WITH(NOLOCK)
WHERE EXISTS(
SELECT *
FROM #Indexes i
WHERE i.ObjectID = ic.[object_id]
AND i.IndexID = ic.[index_id]
AND i.IndexType IN (1, 2)
)
IF OBJECT_ID('tempdb.dbo.#Lob') IS NOT NULL
DROP TABLE #Lob
CREATE TABLE #Lob (
ObjectID    INT NOT NULL
, IndexID     INT NOT NULL
, IsLobLegacy BIT
, IsLob       BIT
, PRIMARY KEY (ObjectID, IndexID)
)
INSERT INTO #Lob (ObjectID, IndexID, IsLobLegacy, IsLob)
SELECT c.ObjectID
, IndexID     = ISNULL(i.IndexID, 1)
, IsLobLegacy = MAX(CASE WHEN c.SystemTypeID IN (34, 35, 99) THEN 1 END)
, IsLob       = 0
FROM #Columns c
LEFT JOIN #IndexColumns i ON c.ObjectID = i.ObjectID AND c.ColumnID = i.ColumnID
WHERE c.SystemTypeID IN (34, 35, 99)
GROUP BY c.ObjectID
, i.IndexID
IF OBJECT_ID('tempdb.dbo.#Sparse') IS NOT NULL
DROP TABLE #Sparse
CREATE TABLE #Sparse (ObjectID INT PRIMARY KEY)
INSERT INTO #Sparse
SELECT DISTINCT ObjectID
FROM #Columns
WHERE IsSparse = 1
OR IsColumnSet = 1
IF OBJECT_ID('tempdb.dbo.#AggColumns') IS NOT NULL
DROP TABLE #AggColumns
CREATE TABLE #AggColumns (
ObjectID        INT NOT NULL
, IndexID         INT NOT NULL
, IndexColumns    NVARCHAR(MAX)
, IncludedColumns NVARCHAR(MAX)
, PRIMARY KEY (ObjectID, IndexID)
)
INSERT INTO #AggColumns
SELECT t.ObjectID
, t.IndexID
, IndexColumns = STUFF((
SELECT ', [' + c.ColumnName + ']'
FROM #IndexColumns i
JOIN #Columns c ON i.ObjectID = c.ObjectID AND i.ColumnID = c.ColumnID
WHERE i.ObjectID = t.ObjectID
AND i.IndexID = t.IndexID
AND i.IsIncluded = 0
ORDER BY i.OrderID
FOR XML PATH(''), TYPE).value('(./text())[1]', 'NVARCHAR(MAX)'), 1, 2, '')
, IncludedColumns = STUFF((
SELECT ', [' + c.ColumnName + ']'
FROM #IndexColumns i
JOIN #Columns c ON i.ObjectID = c.ObjectID AND i.ColumnID = c.ColumnID
WHERE i.ObjectID = t.ObjectID
AND i.IndexID = t.IndexID
AND i.IsIncluded = 1
ORDER BY i.OrderID
FOR XML PATH(''), TYPE).value('(./text())[1]', 'NVARCHAR(MAX)'), 1, 2, '')
FROM (
SELECT DISTINCT ObjectID, IndexID
FROM #Indexes
WHERE IndexType IN (1, 2)
) t
SELECT i.ObjectID
, i.IndexID
, i.IndexName
, ObjectName       = o.[name]
, SchemaName       = s.[name]
, i.PagesCount
, i.UnusedPagesCount
, i.PartitionNumber
, i.RowsCount
, i.IndexType
, i.IsAllowPageLocks
, u.TotalWrites
, u.TotalReads
, u.TotalSeeks
, u.TotalScans
, u.TotalLookups
, u.LastUsage
, i.DataCompression
, f.Fragmentation
, IndexStats       = STATS_DATE(i.ObjectID, i.IndexID)
, IsLobLegacy      = ISNULL(lob.IsLobLegacy, 0)
, IsLob            = ISNULL(lob.IsLob, 0)
, IsSparse         = CAST(CASE WHEN p.ObjectID IS NULL THEN 0 ELSE 1 END AS BIT)
, IsPartitioned    = CAST(CASE WHEN dds.[data_space_id] IS NOT NULL THEN 1 ELSE 0 END AS BIT)
, FileGroupName    = fg.[name]
, i.IsUnique
, i.IsPK
, i.FillFactorValue
, i.IsFiltered
, a.IndexColumns
, a.IncludedColumns
FROM #Indexes i
JOIN sys.objects o WITH(NOLOCK) ON o.[object_id] = i.ObjectID
JOIN sys.schemas s WITH(NOLOCK) ON s.[schema_id] = o.[schema_id]
LEFT JOIN #AggColumns a ON a.ObjectID = i.ObjectID AND a.IndexID = i.IndexID
LEFT JOIN #Sparse p ON p.ObjectID = i.ObjectID
LEFT JOIN #Fragmentation f ON f.ObjectID = i.ObjectID AND f.IndexID = i.IndexID AND f.PartitionNumber = i.PartitionNumber
LEFT JOIN (
SELECT ObjectID      = [object_id]
, IndexID       = [index_id]
, TotalWrites   = NULLIF([user_updates], 0)
, TotalReads    = NULLIF([user_seeks] + [user_scans] + [user_lookups], 0)
, TotalSeeks    = NULLIF([user_seeks], 0)
, TotalScans    = NULLIF([user_scans], 0)
, TotalLookups  = NULLIF([user_lookups], 0)
, LastUsage     = (
SELECT MAX(dt)
FROM (
VALUES ([last_user_seek])
, ([last_user_scan])
, ([last_user_lookup])
, ([last_user_update])
) t(dt)
)
FROM sys.dm_db_index_usage_stats WITH(NOLOCK)
WHERE [database_id] = @DBID
) u ON i.ObjectID = u.ObjectID AND i.IndexID = u.IndexID
LEFT JOIN #Lob lob ON lob.ObjectID = i.ObjectID AND lob.IndexID = i.IndexID
LEFT JOIN sys.destination_data_spaces dds WITH(NOLOCK) ON i.DataSpaceID = dds.[partition_scheme_id] AND i.PartitionNumber = dds.[destination_id]
JOIN sys.filegroups fg WITH(NOLOCK) ON ISNULL(dds.[data_space_id], i.DataSpaceID) = fg.[data_space_id] 
WHERE o.[type] IN ('V', 'U')
AND (
f.Fragmentation >= @Fragmentation
OR
i.PagesCount > @PreDescribeSize
OR
i.IndexType IN (5, 6)
)

เดšเต‹เดฆเตเดฏเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเดจเตเดจเต† เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เดชเดŸเตเดŸเดฟเด•เด•เตพ เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดฑเต€เด•เต‹เดฎเตเดชเตˆเดฒเต‡เดทเดจเตเด•เตพ เด‰เดฃเตเดŸเดพเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เดพเดจเดพเดฃเต เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต, เด’เดฐเต เดตเดฒเดฟเดฏ เดธเตเด•เต€เดฎเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดกเดพเดฑเตเดฑ เดšเต‡เตผเด•เตเด•เตเดฎเตเดชเต‹เตพ เดชเตเดฒเดพเตป เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เด•เดพเดฐเดฃเด‚ เดชเดŸเตเดŸเดฟเด• เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเต เด’เดฐเต เดคเตเดฐเต†เดกเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เดธเดพเดงเตเดฏเดฎเดพเด•เต‚.

เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดค เดถเต‡เดทเด‚, เด’เดฐเต เดธเต‚เดšเดฟเด• เดชเดŸเตเดŸเดฟเด• เด‰เดณเตเดณ เด’เดฐเต เดตเดฟเตปเดกเต‹ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดฑเตเดฑเต เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เดณเตเด‚ เด‡เดตเดฟเดŸเต† เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:

  1. เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต
  2. เดตเดฟเดญเดพเด—เด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚
  3. เด…เดตเดธเดพเดจ เด•เต‹เดณเดฟเดจเตเดฑเต† เดคเต€เดฏเดคเดฟเดฏเตเด‚ เดธเดฎเดฏเดตเตเด‚
  4. เดžเต†เด•เตเด•เตเด•
  5. เดซเดฏเตฝ เด—เตเดฐเต‚เดชเตเดชเต

i t. d.
เดธเตเดชเต€เด•เตเด•เดฑเตเด•เตพ เดธเตเดตเดฏเด‚ เด‡เดšเตเด›เดพเดจเตเดธเตƒเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดซเดฟเด•เตเดธเต เด•เต‹เดณเดคเตเดคเดฟเดจเตเดฑเต† เดธเต†เดฒเตเดฒเตเด•เดณเดฟเตฝ, เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เดธเดฎเดฏเดคเตเดคเต เดŽเดจเตเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดŸเดคเตเดคเดฃเดฎเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดพเด‚. เด•เต‚เดŸเดพเดคเต†, เดธเตเด•เดพเตป เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเดฎเตเดชเต‹เตพ, เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เด’เดฐเต เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเต:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เดฟเดจเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดธเต‚เดšเดฟเด•เด•เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดฃเด‚.

เดชเตเดฐเดงเดพเดจ เดฎเต†เดจเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ (เด…เดคเต‡ เดฌเดŸเตเดŸเตบ เดคเดจเตเดจเต† เดธเต‚เดšเดฟเด• เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เดชเตเดฐเด•เตเดฐเดฟเดฏ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต):

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดตเดฟเดตเดฟเดง เดซเต‹เตผเดฎเดพเดฑเตเดฑเตเด•เดณเดฟเตฝ เดชเดŸเตเดŸเดฟเด• เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด• (เด‡เตปเดกเด•เตเดธเตเด•เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดตเดฟเดถเดฆเดฎเดพเดฏ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดคเตเดฑเด•เตเด•เดพเตป เด’เดฐเต‡ เดฌเดŸเตเดŸเตบ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต):

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดญเต‚เดคเด•เตเด•เดฃเตเดฃเดพเดŸเดฟเด•เตเด•เต เด…เดŸเตเดคเตเดคเตเดณเตเดณ เดชเตเดฐเดงเดพเดจ เดฎเต†เดจเตเดตเดฟเดฒเต† เด‡เดŸเดคเตเดตเดถเดคเตเดคเตเดณเตเดณ เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เดฌเดŸเตเดŸเดฃเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚.

เด’เดฐเต เดญเต‚เดคเด•เตเด•เดฃเตเดฃเดพเดŸเดฟ เด‰เดณเตเดณ เดฌเดŸเตเดŸเตบ เดชเดฐเดฟเด—เดฃเดจเดฏเตเด•เตเด•เดพเดฏเดฟ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต.

เดจเดฟเดฒเดตเดฟเตฝ เดธเดฎเด—เตเดฐเดฎเดพเดฏ เดธเดนเดพเดฏ เดธเด‚เดตเดฟเดงเดพเดจเดฎเดฟเดฒเตเดฒ. เด…เดคเดฟเดจเดพเตฝ, "?" เดฌเดŸเตเดŸเตบ เด…เดฎเตผเดคเตเดคเตเด• เดธเต‹เดซเตเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เด‰เตฝเดชเตเดชเดจเตเดจเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏ เด’เดฐเต เดฎเต‹เดกเตฝ เดตเดฟเตปเดกเต‹ เดฆเตƒเดถเตเดฏเดฎเดพเด•เดพเตป เด‡เดŸเดฏเดพเด•เตเด•เตเด‚:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดฎเตเด•เดณเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดš เดŽเดฒเตเดฒเดพเดคเตเดคเดฟเดจเตเด‚ เดชเตเดฑเดฎเต‡, เดชเตเดฐเดงเดพเดจ เดฎเต†เดจเตเดตเดฟเตฝ เด’เดฐเต เดคเดฟเดฐเดฏเตฝ เดฌเดพเตผ เด‰เดฃเตเดŸเต:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดธเต‚เดšเดฟเด• เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เดชเตเดฐเด•เตเดฐเดฟเดฏ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดฟเตปเดกเต‹เดฏเตเดŸเต† เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดฒเต‹เด—เต เด•เดพเดฃเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เดธเต‚เดšเดฟเด• เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเด‚ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเตเดฎเตเดณเตเดณ เดตเดฟเดถเดฆเดฎเดพเดฏ เด•เตเดฐเดฎเต€เด•เดฐเดฃ เดตเดฟเตปเดกเต‹เดฏเดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เต‚เดŸเตเดคเตฝ เดธเต‚เด•เตเดทเตเดฎเดฎเดพเดฏ เด“เดชเตเดทเดจเตเด•เตพ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด…เดชเต‡เด•เตเดทเดฏเตเด•เตเด•เตเดณเตเดณ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ:

  1. เดธเต‚เดšเดฟเด•เด•เตพเด•เตเด•เดพเดฏเดฟ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดตเตเดฏเดคเตเดฏเดธเตเดค เดฐเต€เดคเดฟเด•เดณเดฟเดฒเตเด‚ เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเด•เตเด•เดฃเด•เตเด•เตเด•เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเด• (เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดญเดพเด—เดฟเด•เดฎเดพเดฏเต‹)
  2. เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเต†เตผเดตเดฑเตเด•เดณเตเด‚ เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเด• (MS SQL เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดจเดฟเดฐเดตเดงเดฟ เดธเดจเตเดฆเตผเดญเด™เตเด™เตพ เด‰เดณเตเดณเดชเตเดชเต‹เตพ เด‡เดคเต เดตเดณเดฐเต† เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฃเต)
  3. เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เดตเดดเด•เตเด•เด‚ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเดฟเตฝ เด•เดฎเดพเตปเดกเตเด•เตพ เดชเตŠเดคเดฟเดžเตเดžเต เดชเดตเตผเดทเต†เตฝ เด•เดฎเดพเตปเดกเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเตป เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‡เดตเดฟเดŸเต†:
  4. dbatools.io/commands
  5. เดฎเตเดดเตเดตเตป เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด‚ เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ MS SQL เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต†เดฏเตเด‚ เด“เดฐเต‹ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดจเตเดฑเต†เดฏเตเด‚ เดตเตเดฏเด•เตเดคเดฟเด—เดค เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเดจเตเด‚ เดฎเดพเดฑเตเดฑเดพเดจเตเด‚ เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเด•
  6. เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ 2, 4 เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต, เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เตพ เดตเดดเดฟ เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเตเด‚ MS SQL เดธเต†เตผเดตเตผ เดธเดจเตเดฆเตผเดญเด™เตเด™เตพ เดตเดดเดฟ เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเดฏเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดธเดฎเดพเดจเดฎเดพเดฃเต.
  7. เดคเดจเดฟเดชเตเดชเด•เตผเดชเตเดชเต เดธเต‚เดšเดฟเด•เด•เตพเด•เตเด•เดพเดฏเดฟ เดคเดฟเดฐเดฏเตเด• (เดชเต‚เตผเดฃเตเดฃเดตเตเด‚ เด…เดชเต‚เตผเดฃเตเดฃเดตเตเด‚, เด…เดต เด…เตฝเดชเตเดชเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเต‹ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏ เด•เต‹เดณเด™เตเด™เดณเดฟเตฝ เดฎเดพเดคเตเดฐเด‚ เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเต†เดŸเตเดŸเดคเต‹ เด†เดฃเต)
  8. SQLIndexManager MS SQL เดธเต†เตผเดตเตผ DBMS-เดจเต เดฎเดพเดคเตเดฐเดฎเต‡ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดณเตเดณเต‚ เดŽเดจเตเดจเดคเดฟเดจเดพเตฝ, เด‡เดคเต เดชเต‡เดฐเดฟเตฝ เดชเตเดฐเดคเดฟเดซเดฒเดฟเดชเตเดชเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ: MS SQL เดธเต†เตผเดตเดฑเดฟเดจเดพเดฏเตเดณเตเดณ SQLIndexManager
  9. เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ GUI เด‡เดคเดฐ เดญเดพเด—เด™เตเด™เดณเตเด‚ เดชเตเดฐเดคเตเดฏเต‡เด• เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด•เตเด•เดฟ เด…เดตเดฏเต† .NET Core 2.1-เตฝ เดตเต€เดฃเตเดŸเตเด‚ เดŽเดดเตเดคเตเด•.

เดŽเดดเตเดคเตเดจเตเดจ เดธเดฎเดฏเดคเตเดคเต, เด†เด—เตเดฐเดนเด™เตเด™เดณเตเดŸเต† เด‡เดจเด‚ 6 เดธเดœเต€เดตเดฎเดพเดฏเดฟ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดชเต‚เตผเดฃเตเดฃเดตเตเด‚ เดธเดฎเดพเดจเดตเตเดฎเดพเดฏ เดคเดจเดฟเดชเตเดชเด•เตผเดชเตเดชเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดจเตเดจ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด‡เดคเดฟเดจเด•เด‚ เดชเดฟเดจเตเดคเตเดฃเดฏเตเดฃเตเดŸเต:

SQLIndexManager เดŽเดจเตเดจ เดธเต—เดœเดจเตเดฏ เดŸเต‚เดณเดฟเดจเตเดฑเต† เด…เดตเดฒเต‹เด•เดจเด‚

เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•