Чому нам потрібно перебудувати та реорганізувати індекси в SQL Server


28

Після пошуку в Інтернеті я не зміг знайти причину

  1. Чому нам потрібно перебудувати та реорганізувати індекси в SQL Server?

  2. що відбувається внутрішньо, коли ми відновлюємо і реорганізуємо?

Стаття на сайті говорить:

Індекс повинен бути відновлений, коли фрагментація індексу перевищує 40%. Індекс слід реорганізувати, коли фрагментація індексу становить від 10% до 40%. Процес відновлення індексу використовує більше процесора, і він блокує ресурси бази даних. Версія для розробки SQL Server та версія Enterprise має опцію ONLINE, яку можна ввімкнути при перебудові індексу. Опція ОНЛАЙН буде зберігати індекс під час відновлення.

Я не міг цього зрозуміти, хоч це говорить, що WHENдля цього потрібно, але хотілося б знати, WHYчи потрібно нам перебудовувати та реорганізовувати індекси?


1
Це питання про те, чому, і ось питання про те, коли .
Нік Чаммас

Відповіді:


29

Під час виконання оновлень та видалень вставок ваші індекси будуть фрагментовані як внутрішньо, так і зовні.

Внутрішня фрагментація - це високий відсоток вільного простору на ваших індексних сторінках, тобто SQL Server повинен читати більше сторінок під час сканування індексу.

Зовнішня фрагментація - це коли сторінки індексу вже не впорядковані, тому SQL Server повинен зробити більше роботи, особливо з точки зору IO, щоб прочитати індекс.

Якщо ваші індекси стануть занадто фрагментарними, в кращому випадку ваші запити будуть менш ефективними, але в гіршому випадку, SQL Server просто перестане використовувати індекси разом, тобто практично всі запити повинні були б виконати сканування таблиці або кластерне сканування індексів. Це сильно зашкодить вашій виставі!

Коли ви реорганізуєте індекс, SQL Server використовує існуючі сторінки індексів і просто переміщує дані в ці віки. Це полегшить внутрішню фрагментацію, а також може видалити невелику кількість зовнішньої фрагментації. Це легша операція з вагою, ніж перебудова, і завжди в Інтернеті.

Під час відновлення індексу SQL Server фактично вдається до даних індексу та використовує новий набір сторінок індексу. Це, очевидно, полегшить як внутрішню, так і зовнішню фрагментацію, але більш важка операція і за замовчуванням призводить до відключення індексу в автономному режимі, хоча він може виконуватися як онлайн-операція, залежно від версії та налаштувань SQL Server.

Однак не сподівайтеся, що після відновлення буде 0 фрагментації. Якщо ви не використовуєте підказку для запиту MAXDOP, SQL Server буде паралельно виконувати операцію відновлення і чим більше задіяних процесорів, тим більше фрагментації, ймовірно, буде, тому що кожен процесор або ядро ​​перероблятиме свій розділ або фрагмент індексу окремо, без огляду на один одного. Це компроміс між найкращими рівнями фрагментації та часом, необхідним для відновлення індексу. Для фрагментації близько 0 використовуйте MAXDOP 1 і сортуйте результати в TempDB.


Чудово ...! Просто пояснює ...!
ДінешДБ

0

Для того, щоб видалити фрагментацію, яка спричиняє такі проблеми, як повільність рівня бази даних / тривалі запити тощо.

Щоб отримати детальне розуміння фрагментації та способів відновлення та реорганізації індексів (або реорганізації індексних сторінок), перейдіть за цим посиланням нижче за посиланням: https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation


1
Ця інформація стала (частково) застарілою після перегляду Чому фрагментація індексу не має значення
Джон ака hot2use
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.