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 - можете да изградите отново с помощта на команда: 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. Той комбинира данните в нови групи редове и компресира групите редове в columnstore.
  4. Изисква място на физическия носител за съхраняване на две копия на индекса columnstore, докато се извършва възстановяването. Когато реконструкцията приключи, SQL Server изтрива оригиналния клъстерен индекс columnstore.
  5. За таблица на Azure SQL Data Warehouse с подреден клъстерен индекс на columnstore, ALTER INDEX REBUILD ще пресортира данните. Наблюдавайте tempdb по време на операции по възстановяване. Ако имате нужда от повече tempdb пространство, можете да увеличите мащаба на хранилището на данни. Намалете обратно мащаба, след като възстановяването на индекса приключи.

За повече подробности, моля, вижте: Преизграждане на индекси. Поддържа се и от базата данни на Azure SQL.

Според по-горе, относно вашите въпроси:

1. Трябва ли уебсайтът да е офлайн?

Не, не става.

2.Индексите трябва ли да бъдат възстановени/реорганизирани в определен ред и ще бъдат ли загубени някакви данни?

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

3. В моето локално копие мога да щракна с десния бутон върху индекса и да щракна върху повторно изграждане или реорганизиране, но в Azure не мога.

Базата данни на Azure SQL поддържа реорганизиране и повторно изграждане на индекси. Преди да възстановите индексите, можете първо да тествате, като премахнете фрагментацията.

Надявам се това да помогне.

person Leon Yue    schedule 11.06.2019