Mamy instancję programu SQL Server używaną do archiwizacji wiadomości e-mail (dzięki pakietowi do archiwizacji innej firmy). Co jakiś czas oprogramowanie jest przenoszone do nowej pustej bazy danych. W przeszłości robiliśmy to co kwartał, ale teraz chcemy to robić co miesiąc. Ilość archiwizowanych danych wynosi około 15–20 GB miesięcznie, a większość danych znajduje się tylko w kilku tabelach (zwykle 2–4).
Gdy przejdziemy do nowej bazy danych, stara zostanie użyta wyłącznie do odczytu. Chciałbym zoptymalizować go do ładnego, ciasnego pliku danych, ze wszystkimi tabelami / indeksami sąsiadującymi i mającymi bardzo wysoki współczynnik wypełnienia oraz niewiele pustej przestrzeni na końcu pliku danych. Ponadto używamy Wersji Standardowej na tym serwerze, ze wszystkimi wynikającymi z tego ograniczeniami (w przeciwnym razie użyłbym już kompresji danych).
Kilka możliwości, o których mogę myśleć:
- Indeksy REBUILD / REORGANIZE, DBCC SHRINKFILE (OK, nie jest to rozsądna opcja, ponieważ DBCC SHRINKFILE podzieli sikanie na wszystko, czego dotknie, ale włączam to dla kompletności.)
- Utwórz nową bazę danych z wyłączonymi automatycznymi statystykami. Skrypt i odtwórz wszystkie tabele ze źródłowej bazy danych. Użyj programu bcp, aby wyeksportować / zaimportować dane do nowej bazy danych w kolejności klucza klastra. Skrypt i odtwórz wszystkie indeksy. Przelicz wszystkie statystyki przy pełnym skanie.
- Utwórz nową bazę danych z wyłączonymi automatycznymi statystykami. Skrypt i odtwórz wszystkie tabele ze źródłowej bazy danych. Użyj SSIS lub T-SQL, aby przesłać dane do nowej bazy danych. Skrypt i odtwórz wszystkie indeksy. Przelicz wszystkie statystyki przy pełnym skanie.
Ostatnim krokiem w każdym przypadku byłoby ustawienie bazy danych w tryb tylko do odczytu.
Jakie są inne dobre / lepsze opcje, aby to zrobić? Moim problemem jest przeniesienie danych w taki sposób, aby zachować wysoki współczynnik wypełnienia i logicznie ciągły.
Edytować:
Powinienem wspomnieć, że około 75% danych wydaje się być przechowywanych w kolumnach obrazu (LOB).
PRIMARY
?Odpowiedzi:
Aby wyeliminować fizyczne rozdrobnienie plików, możesz przenieść indeks klastrowy z upuszczeniem istniejącym do nowej grupy plików. Ponieważ mają być RO, wszystkie wypełnią 100%, ponieważ nie wymaga miejsca na wstawki, podziały stron spowodowane aktualizacjami.
Pozwoliłoby to również na częściowe przywracanie i bardzo szybkie przejście do bazy danych online, jeśli kiedykolwiek zdecydujesz się na Enterprise. Enterprise pozwala także na indeksy magazynu kolumn, co znacznie skraca czas zapytania dla danych tylko do odczytu, które są masywnym zaokrągleniem.
Możesz użyć opcji shrinkfile raz przed przejściem do odczytu tylko bez poważnych problemów z fragmentacją, aby usunąć miejsce na końcu pliku, jak chcesz.
Na marginesie, po prostu sprawdzanie, czy używasz najnowszych typów danych dla swojego LOBS. tj. nvarchar (max) czy varchar (max) zamiast ntext lub text, varbinary (max) zamiast image?
źródło
Napotkałem podobny problem z narzędziem strony trzeciej, które również używało typu danych obrazu do przechowywania nieustrukturyzowanych danych, i rozwiązałem go, przekształcając kolumnę w strumień plików . Będziesz musiał przeprowadzić pewne testy, aby upewnić się, że aplikacja nadal działa zgodnie z oczekiwaniami, ale da ci to możliwość napisania własnego procesu archiwizacji, który skutecznie przenosi dane do bazy danych archiwum.
źródło