ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

ΠšΠ°ΠΊΡ‚ΠΎ Π΅ извСстно, индСкситС играят Π²Π°ΠΆΠ½Π° роля Π² Π‘Π£Π‘Π”, прСдоставяйки Π±ΡŠΡ€Π·ΠΎ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ записи. Π•Ρ‚ΠΎ Π·Π°Ρ‰ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΌΠ΅ Π½Π°Π²Ρ€Π΅ΠΌΠ΅. Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ извън Π½Π΅Π³ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ относно Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ оптимизацията. НапримСр, наскоро бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ° Π² Ρ‚Π°Π·ΠΈ публикация.

Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Ρ‚Π΅Π½ΠΈ ΠΈ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° Ρ‚ΠΎΠ²Π°. НапримСр, ΠΈΠΌΠ° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, основано Π½Π° Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° оптимизация Π½Π° индСкситС.

Π‘Π΅Π³Π° Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½Π°Ρ‚Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° SQLIndexManager, Ρ‡ΠΈΠΉΡ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ Π΅ AlanDenton.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° тСхничСска Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ SQLIndexManager ΠΈ някои ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΈ инструмСнти Π΅ прСдставСна ΠΎΡ‚ самия Π°Π²Ρ‚ΠΎΡ€. Ρ‚ΡƒΠΊ. ΠΈ Ρ‚ΡƒΠΊ..

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° софтуСрното Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Π’Π°Π·ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π΅ ΠΎΠ±Π΅ΠΊΡ‚ Π½Π° обсъТданС. Ρ‚ΡƒΠΊ..
Π‘ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΏΠΎ-голямата част ΠΎΡ‚ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠΈΡ‚Π΅ ΠΈ Π±ΡŠΠ³ΠΎΠ²Π΅Ρ‚Π΅ бяха ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ΠΈ.

И Ρ‚Π°ΠΊΠ°, ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ към самата ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° SQLIndexManager.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ написано Π½Π° C# .NET Framework 4.5 Π² Visual Studio 2017 ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° DevExpress Π·Π° Ρ„ΠΎΡ€ΠΌΠΈΡ‚Π΅:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

ΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Всички заявки сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Π² слСднитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅:

  1. ИндСкс
  2. Заявка
  3. Π”Π²ΠΈΠ³Π°Ρ‚Π΅Π» Π·Π° заявки
  4. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ Π·Π° ΡΡŠΡ€Π²ΡŠΡ€Π°

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

ΠŸΡ€ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° заявки към Π‘Π£Π‘Π”, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС подписва ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

ApplicationName="SQLIndexManager"

ΠŸΡ€ΠΈ стартиранС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС ΠΎΡ‚Π²ΠΎΡ€ΠΈ ΠΌΠΎΠ΄Π°Π»Π΅Π½ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† Π·Π° добавянС Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅:
ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° пълния списък Π½Π° всички инстанции Π½Π° MS SQL Server, Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π² Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ‚Π΅ ΠΌΡ€Π΅ΠΆΠΈ.

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠ±Π°Π²ΠΈ ΠΈ с лСвия Π±ΡƒΡ‚ΠΎΠ½ Π² Π³Π»Π°Π²Π½ΠΎΡ‚ΠΎ мСню:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ слСднитС заявки към Π‘Π£Π‘Π”:

  1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° информация Π·Π° Π‘Π£Π‘Π”
    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 Server:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт 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 = @Fragmentation
        OR
            i.PagesCount > @PreDescribeSize
        OR
            i.IndexType IN (5, 6)
    )

ΠšΠ°ΠΊΡ‚ΠΎ Π΅ Π²ΠΈΠ΄Π½ΠΎ ΠΎΡ‚ самитС заявки, Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ доста чСсто. Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ, Π·Π° Π΄Π° Π½Π΅ сС Π½Π°Π»Π°Π³Π°Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ, Π° ΠΏΡ€ΠΈ голямата схСма ΠΏΠ»Π°Π½ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΏΡ€ΠΈ вмъкванС Π½Π° Π΄Π°Π½Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²ΠΌΡŠΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ с Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π΅ възмоТно само Π² Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ.

Π‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° горСспомСнатия скрипт Ρ‰Π΅ сС появи ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† с Ρ‚Π°Π±Π»ΠΈΡ†Π° Π½Π° индСкситС:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Π’ΡƒΠΊ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ°Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³Π° Π΄Π΅Ρ‚Π°ΠΉΠ»Π½Π° информация, ΠΊΠ°Ρ‚ΠΎ:

  1. Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ
  2. Π±Ρ€ΠΎΠΉ сСкции
  3. Π΄Π°Ρ‚Π° ΠΈ час Π½Π° послСдното ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅
  4. сТатиС
  5. Ρ„Π°ΠΉΠ»ΠΎΠ²Π° Π³Ρ€ΡƒΠΏΠ°

ΠΈ Π΄Ρ€.
Π‘Π°ΠΌΠΈΡ‚Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Π’ ΠΊΠ»Π΅Ρ‚ΠΊΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° Fix ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ дСйствиС Ρ‰Π΅ бъдС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ ΠΏΡ€ΠΈ оптимизация. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, ΠΏΡ€ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° сканиранСто, дСйствиСто ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ сС ΠΈΠ·Π±ΠΈΡ€Π° Π½Π° Π±Π°Π·Π° Π½Π° ΠΈΠ·Π±Ρ€Π°Π½ΠΈΡ‚Π΅ настройки:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

НСобходимо Π΅ Π΄Π° сС ΠΈΠ·Π±Π΅Ρ€Π°Ρ‚ Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ индСкси Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π³Π»Π°Π²Π½ΠΎΡ‚ΠΎ мСню ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡ‚Π΅ скрипта (Ρ‚Π°Π·ΠΈ ΡΡŠΡ‰Π° Π±ΡƒΡ‚ΠΎΠ½ стартира процСса Π½Π° оптимизация Π½Π° индСкситС):

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Ρ‚Π°ΠΊΠ° ΠΈ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ (Ρ‚Π°Π·ΠΈ Π±ΡƒΡ‚ΠΎΠ½ позволява Π΄Π° сС отворят Π΄Π΅Ρ‚Π°ΠΉΠ»Π½ΠΈΡ‚Π΅ настройки Π·Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ оптимизация Π½Π° индСкситС):

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° информацията ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΠ±Π½ΠΎΠ²Π΅Π½Π°, ΠΊΠ°Ρ‚ΠΎ натиснСтС трСтия Π±ΡƒΡ‚ΠΎΠ½ вляво Π² Π³Π»Π°Π²Π½ΠΎΡ‚ΠΎ мСню Π΄ΠΎ Π»ΡƒΠΏΠ°Ρ‚Π°.

Π‘ΡƒΡ‚ΠΎΠ½ΡŠΡ‚ с Π»ΡƒΠΏΠ° позволява Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° няма напълно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° справочна систСма. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ натисканСто Π½Π° Π±ΡƒΡ‚ΠΎΠ½Π° β€œ?” Ρ‰Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° просто появяванС Π½Π° ΠΌΠΎΠ΄Π°Π»Π΅Π½ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ основната информация Π·Π° софтуСрния ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

ОсвСн всичко ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π² Π³Π»Π°Π²Π½ΠΎΡ‚ΠΎ мСню ΠΈΠΌΠ° ΠΏΠΎΠ»Π΅ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

ΠŸΡ€ΠΈ стартиранС Π½Π° процСса Π½Π° оптимизация Π½Π° индСкситС:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π² Π΄ΠΎΠ»Π½Π°Ρ‚Π° част Π½Π° ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‚Π΅ Π»ΠΎΠ³ Π½Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈΡ‚Π΅ дСйствия:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Π’ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π° с Π΄Π΅Ρ‚Π°ΠΉΠ»Π½ΠΈ настройки Π·Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ оптимизация Π½Π° индСкситС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° настроитС ΠΏΠΎ-Ρ„ΠΈΠ½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

ПоТСлания към ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

  1. Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ възмоТно ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»Π½ΠΎ обновяванС Π½Π° статистикитС Π½Π΅ само Π·Π° индСкситС ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ (напълно обновяванС ΠΈΠ»ΠΈ частично)
  2. Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ възмоТно Π½Π΅ само ΠΈΠ·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Π‘Π”, Π½ΠΎ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ (Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ инстанции Π½Π° MS SQL Server)
  3. Π·Π° ΠΏΠΎ-голяма Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚ Π² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈ Π΄Π° сС ΠΈΠ·Π²Π΅Π΄Π°Ρ‚ Π² ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½Π° PowerShell, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΡƒΠΊ:
  4. dbatools.io/commands
  5. Π΄Π°Π΄Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΠΈ промяна Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ настройки ΠΊΠ°ΠΊΡ‚ΠΎ Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΏΡ€ΠΈ нСобходимост Π·Π° всСки инстанс Π½Π° MS SQL Server ΠΈ Π·Π° всяка Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ
  6. ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ 2 ΠΈ 4 ΠΏΡ€ΠΎΠΈΠ·Ρ‚ΠΈΡ‡Π° ΠΆΠ΅Π»Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° сС ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ Π³Ρ€ΡƒΠΏΠΈ ΠΏΠΎ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Π³Ρ€ΡƒΠΏΠΈ ΠΏΠΎ инстанции Π½Π° MS SQL Server, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ настройкитС са Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ
  7. Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΈ Π½Π° индСкси (пълни ΠΈ нСпълни, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ»ΠΈ Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈΠ»ΠΈ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ само ΠΏΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ)
  8. Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ SQLIndexManager сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само Π·Π° Π‘Π£Π‘Π” MS SQL Server, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΎΡ‚Ρ€Π°Π·ΠΈ Π² ΠΈΠΌΠ΅Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½: SQLIndexManager for MS SQL Server
  9. всички части Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са GUI, Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ прСнаписани Π½Π° .NET Core 2.1

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° написванС Π½Π° статията, Ρ‚ΠΎΡ‡ΠΊΠ° 6 ΠΎΡ‚ ТСланията Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΈ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° във Π²ΠΈΠ΄ Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° пълни ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΈ:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° бСзплатния инструмСнт SQLIndexManager

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster