it-swarm-eu.dev

Bezbolestný způsob, jak vytvořit seskupený index na obrovském stole?

Máme tedy zákaznickou stránku, která si stěžuje na nějaký vážně pomalý výkon. Podíval jsem se jednou a je zřejmé, že problém je způsoben tím, že Somebody Else (grrrr) navrhl tabulku, ve které je uloženo zhruba 20 milionů záznamů plus bez sdruženého indexu.

Nyní chci v této tabulce vytvořit seskupený index - ale ve svém testovacím prostředí můj create index příkaz běží již hodinu a stále není hotový. Zákaznická stránka je dílna, která funguje 24/7 a při vytváření indexu si nemůžu dovolit hodinu prostoje.

Existuje nějaká méně hrubá síla vytvoření indexu, která buď dokončí úlohu rychle, nebo to nějakým inteligentním způsobem, který nezabije úplně výkon serveru, když je zaneprázdněn?

Používáme SQL Server Enterprise Edition.

22
Shaul Behr
  • Pokud je váš server SQL verze Enterprise + a tabulka neobsahuje žádná pole BLOB - CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • Pokud ne - neexistuje žádný způsob kromě vytvoření tabulky se stejným schématem na straně a moudře do ní přenášet data, včetně všech operací INSERT/UPDATE/DELETE (například pomocí triggeru), a pak přesně zrušit staré tabulky a přejmenovat nové se stejným názvem jako staré - nevýhody jsou: pomalé, přidává další zatížení serveru a úložišti

26
Oleg Dok

Nejste si jisti, jakou verzi serveru SQL používá váš zákazník. V podniku můžete vytvořit index pomocí (ONLINE = ON), takže tabulka je k dispozici, dokud není index vytvořen.

12
Michal Barcik
  • Vytvořit novou tabulku identickou s původním (bude samozřejmě potřebovat jiný název)
  • Vytvořte seskupený index v nové tabulce
  • Načíst data do nové tabulky
  • Přetažení původní tabulky
  • Přejmenujte novou tabulku pomocí původního názvu

Nezapomeňte použít všechna oprávnění, která byla požadována od originálu.

8
Bryan