SQL Azure — Фрагментация кластеризованного индекса

Я унаследовал базу данных Azure. Я веб-разработчик и имею ограниченный опыт работы с SQL. Веб-сайт работает медленно и, в частности, 2 хранимые процедуры.

Я сделал резервную копию базы данных Azure и импортировал ее на свой локальный компьютер. Я перекомпилировал хранимые процедуры, это не помогло. После дальнейшего изучения хранимые процедуры связываются с 6 таблицами, каждая из которых имеет кластеризованный индекс.

Я проверил свойства кластеризованного индекса, и фрагментация составляет 80% и выше.

Я предполагаю, что индексы нужно перестроить/реорганизовать. У меня есть несколько вопросов по этому поводу:

  1. Должен ли сайт быть оффлайн?
  2. Нужно ли перестраивать/реорганизовывать индексы в каком-либо конкретном порядке и будут ли потеряны какие-либо данные?
  3. В моей локальной копии я могу щелкнуть правой кнопкой мыши индекс и щелкнуть «перестроить» или «реорганизовать», но в Azure я не могу.

person Ros    schedule 11.06.2019    source источник
comment
Прежде всего, вы на 100% уверены, что это не проблема, связанная с тем, как написаны процедуры? Сначала вы должны попытаться запустить процедуры в фиктивной среде, чтобы увидеть, является ли это проблемой конфигурации или простого кода.   -  person A_kat    schedule 11.06.2019
comment
Если мой ответ был полезен, пожалуйста, отметьте его как ответ, спасибо!   -  person Leon Yue    schedule 12.06.2019
comment
вам нужно перестроить индекс в случае фрагментации 80%. В azure вы можете перестроить с помощью команды: ver15" rel="nofollow noreferrer">docs.microsoft.com/en-us/sql/relational-databases/indexes/   -  person Shiwangini    schedule 28.06.2020


Ответы (1)


Чтобы перестроить кластеризованный индекс columnstore, SQL Server:

  1. Получает монопольную блокировку таблицы или раздела во время перестроения. Данные находятся в автономном режиме и недоступны во время перестроения.
  2. Дефрагментирует columnstore, физически удаляя строки, которые были логически удалены из таблицы; удаленные байты восстанавливаются на физическом носителе.
  3. Считывает все данные из исходного индекса columnstore, включая deltastore. Он объединяет данные в новые группы строк и сжимает группы строк в хранилище столбцов.
  4. Требуется место на физическом носителе для хранения двух копий индекса columnstore во время перестроения. По завершении перестроения SQL Server удаляет исходный кластеризованный индекс columnstore.
  5. Для таблицы хранилища данных SQL Azure с упорядоченным кластеризованным индексом columnstore инструкция ALTER INDEX REBUILD повторно отсортирует данные. Отслеживайте базу данных tempdb во время операций перестроения. Если вам нужно больше места в базе данных tempdb, вы можете масштабировать хранилище данных. Уменьшите масштаб после завершения перестроения индекса.

Дополнительные сведения см. по адресу: Перестроение индексов. Он также поддерживается базой данных Azure SQL.

Согласно выше, о ваших вопросах:

1. Должен ли веб-сайт быть в автономном режиме?

Нет, это не так.

2. Нужно ли перестраивать/реорганизовывать индексы в каком-либо конкретном порядке и будут ли потеряны какие-либо данные?

Да, поскольку вы проверили свойства кластеризованного индекса и фрагментация составляет 80 % и выше, мы предлагаем вам перестроить/реорганизовать индексы. Ваши данные не будут потеряны. Вы можете сослаться на этот документ: Перед реорганизацией и перестроением индексов.

3. В моей локальной копии я могу щелкнуть индекс правой кнопкой мыши и выбрать «перестроить» или «реорганизовать», но в Azure я не могу.

База данных SQL Azure поддерживает индексы реорганизации и перестроения. Прежде чем перестраивать индексы, вы можете сначала протестировать их, удалив фрагментацию.

Надеюсь это поможет.

person Leon Yue    schedule 11.06.2019