πŸ” Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСкса MS SQL: подробная инструкция

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСкса Π² MS SQL, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ sys.dm_db_index_physical_stats. Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ физичСском располоТСнии ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСксов. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

    SELECT 
        OBJECT_NAME(object_id) AS TableName,
        name AS IndexName,
        avg_fragmentation_in_percent
    FROM 
        sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) AS ps
    INNER JOIN 
        sys.indexes AS i ON ps.[object_id] = i.[object_id] AND ps.index_id = i.index_id
    WHERE 
        i.index_id > 0
    ORDER BY 
        avg_fragmentation_in_percent DESC
    
Π­Ρ‚ΠΎΡ‚ запрос Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, имя индСкса ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для всСх индСксов Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ отсортирован ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. НадСюсь, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСксов Π² MS SQL!

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

ΠŸΡ€ΠΈΠ²Π΅Ρ‚! БСгодня я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π΅Π±Π΅ ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса Π² MS SQL Server. Но ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ, Π΄Π°Π²Π°ΠΉ опрСдСлимся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ фрагмСнтация ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° Π²Π°ΠΆΠ½Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ фрагмСнтация индСкса?

ЀрагмСнтация индСкса - это процСсс, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ физичСскоС располоТСниС Π΄Π°Π½Π½Ρ‹Ρ… Π² индСксС отличаСтся ΠΎΡ‚ порядка Π΄Π°Π½Π½Ρ‹Ρ… Π² самой Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ·-Π·Π° удалСния, вставки ΠΈΠ»ΠΈ обновлСния строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. ЀрагмСнтация ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ SQL Server Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ всСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ индСксу для поиска Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСкса?

ЀрагмСнтация индСкса ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ:

  • Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ SQL Server Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ большС Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½Ρ‹Π΅ записи.
  • Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° индСкса Π½Π° дискС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ индСкс Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС мСста.
  • Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ индСкса ΠΏΡ€ΠΈ опСрациях вставки, обновлСния ΠΈ удалСния.

Как ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСкса?

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ фрагмСнтация индСкса ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° Π²Π°ΠΆΠ½Π°, Π΄Π°Π²Π°ΠΉ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСкса Π² MS SQL Server.

БущСствуСт нСсколько способов опрСдСлСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса:

1. ИспользованиС систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sys.dm_db_index_physical_stats

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ SQL-запрос позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ индСкса:


SELECT 
    OBJECT_NAME(object_id) AS [НазваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°],
    index_id AS [ID индСкса],
    index_type_desc AS [Вип индСкса],
    avg_fragmentation_in_percent AS [ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ]
FROM 
    sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED')
WHERE 
    OBJECT_NAME(object_id) = 'имя_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹' AND index_id = индСкс_id;
    

2. ИспользованиС SQL Server Management Studio (SSMS)

SSMS прСдоставляСт графичСский интСрфСйс, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСксов. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

  • ΠžΡ‚ΠΊΡ€ΠΎΠΉ SSMS ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡΡŒ ΠΊ своСму экзСмпляру SQL Server.
  • Π Π°Π·Π²Π΅Ρ€Π½ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π°ΠΉΠ΄ΠΈ Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.
  • Найди Π²ΠΊΠ»Π°Π΄ΠΊΡƒ "Π˜Π½Π΄Π΅ΠΊΡΡ‹" для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈ ΠΏΠΎ Π½Π΅ΠΉ.
  • Π©Π΅Π»ΠΊΠ½ΠΈ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ индСксС ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈ ΠΏΡƒΠ½ΠΊΡ‚ "ЀрагмСнтация индСкса".
  • Окно "ЀрагмСнтация индСкса" ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ индСкса.

Как ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСкса?

Когда ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСкса, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ€Ρ‹ для Π΅Π΅ устранСния. Π’ΠΎΡ‚ нСсколько способов:

1. ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΉΠΊΠ° индСкса

ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΉΠΊΠ° индСкса Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½ΠΎΠ²ΠΎΠ΅ физичСскоС располоТСниС, устраняя Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для пСрСстройки индСкса:


ALTER INDEX индСкс_name ON Ρ‚Π°Π±Π»ΠΈΡ†Π°_name REBUILD;
    

2. ΠŸΠ΅Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ индСкса

ΠŸΠ΅Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ индСкса ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² физичСском порядкС, устраняя Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΏΠ΅Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ индСкса:


ALTER INDEX индСкс_name ON Ρ‚Π°Π±Π»ΠΈΡ†Π°_name REORGANIZE;
    

ΠžΠ±Ρ€Π°Ρ‚ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ пСрСстройка ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ рСсурсоСмкая опСрация, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Ρ‡Π΅ΠΌ пСрСорганизация.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ фрагмСнтация индСкса ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° Π²Π°ΠΆΠ½Π° для ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² MS SQL Server. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСкса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SQL-запроса ΠΈ SQL Server Management Studio. НаконСц, ΠΌΡ‹ рассмотрСли способы устранСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пСрСстройки ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ индСкса.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ индСксов ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои индСксы ΠΈ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π° MS SQL Server!

Π£Π΄Π°Ρ‡ΠΈ Π² ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ MS SQL Server!

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

SQL Server Index Fragmentation on SSD. ЀрагмСнтация индСксов ΠΈ SSD диск

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ SQL Π˜ΠΠ”Π•ΠšΠ‘Π« Π·Π° 10 ΠΌΠΈΠ½ΡƒΡ‚: ОбъяснСниС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

Π˜Π½Π΄Π΅ΠΊΡΡ‹ | ΠžΡΠ½ΠΎΠ²Ρ‹ SQL

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ” Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСкса MS SQL: подробная инструкция