Wyłączam logowanie do niektórych tabel

9

Korzystam z programu SQL Server 2005. Mam dwie tabele zawierające informacje zbiorcze. Informacje są stale aktualizowane, generując prawie 5 GB danych dziennika dziennie. (Jest większy niż cała baza danych!) Chciałbym wyłączyć logowanie do tych tabel, ponieważ wycofywanie nie jest tak naprawdę konieczne. Chciałbym jednak nadal logować się w innych tabelach w bazie danych.

Czy można wyłączyć logowanie do niektórych tabel w bazie danych? Jeśli nie, czy mogę umieścić dwie tabele w tym samym schemacie, a następnie wyłączyć logowanie do schematu? Czy jedyną opcją jest przeniesienie dwóch tabel do osobnej bazy danych i wyłączenie tam rejestrowania?

Aktualizacja: Myślę, że wyjaśnię, dlaczego tak naprawdę nie muszę rejestrować aktywności na tych tabelach.

Dwie tabele są wypełnione danymi GPS, więc stają się dość duże. Pierwsza tabela przechwytuje nieprzetworzone lokalizacje z sześciu tabel Androida w terenie. Nowe dane z każdego tabletu pojawiają się co 5-10 sekund. Informacje te są następnie agregowane jako lokalizacja A, lokalizacja B, travelTime. Celem jest, aby ostatecznie uzyskać najkrótsze czasy podróży między wszystkimi lokalizacjami, w oparciu o rzeczywiste dane z jazdy. Dane dotyczą tylko małego miasta i są dokładne z dokładnością do czterech miejsc po przecinku, więc można nimi zarządzać. Jednak wraz z pojawieniem się nowych nieprzetworzonych danych, czas podróży musi zostać zaktualizowany, a nowe trzeba wstawić.

Po zebraniu nieprzetworzonych danych są one usuwane. Nie cofamy się do dłuższych czasów podróży, dlatego wycofywanie się nie ma tak wielkiego znaczenia w tych tabelach.

dangowans
źródło

Odpowiedzi:

8
  • Czy można wyłączyć logowanie do niektórych tabel w bazie danych?
  • Czy mogę umieścić dwie tabele w tym samym schemacie, a następnie wyłączyć logowanie do schematu?
  • Czy jedyną opcją jest przeniesienie dwóch tabel do osobnej bazy danych i wyłączenie tam rejestrowania?

Rejestrowania operacji użytkownika nie można wyłączyć.

Istnieje klasa operacji zwanych minimalnie rejestrowane operacje , które pozwala tylko transakcja zostanie walcowane z powrotem (w przeciwieństwie do również będąc w stanie toczyć do przodu ). Jednak nie wydaje się, że to, co robisz, spełniałoby kryteria, aby to zastosować, i nie sądzę, że i tak rozwiązałoby to problem.

Rozwiązaniem SQL Server byłoby wyładowanie tabel pomostowych w nowej bazie danych podczas SIMPLEodzyskiwania, niezależnie od bazy danych wyników agregacji, która, jak zakładam, jest w trakcie FULLodzyskiwania. Chociaż nie zmniejszy to objętości rejestrowania, wyeliminuje potrzebę tworzenia kopii zapasowej dziennika generowanego przez ładowanie danych. (Zobacz mój wpis na blogu tutaj o rejestrowaniu i niektórych czynnikach związanych z wyborem modelu odzyskiwania bazy danych).

Rozdzielenie tabel na inną bazę danych zapewniłoby elastyczność lądowania pliku dziennika na szybszym podsystemie we / wy, prawdopodobnie małej tablicy lokalnie podłączonych dysków półprzewodnikowych.

Należy również wziąć pod uwagę, że sam SQL Server może nie być najlepszym rozwiązaniem problemu. Istnieją inne rozwiązania RDBMS, które oferują możliwość całkowitego wyłączenia rejestrowania dla niektórych tabel. Dane mogą być przemieszczane i agregowane w innym systemie, a wyniki scalane z istniejącą bazą danych SQL Server, która jest dobrze chroniona przez pełne rejestrowanie i tworzenie kopii zapasowych.

Jon Seigel
źródło
@dangowans: Nie ma za co.
Jon Seigel
3

Nie, nie ma sposobu, aby zapobiec logowaniu w SQL Server bez względu na poziom schematu, tabeli lub bazy danych.

W rzeczywistości każda transakcja, która dokonuje modyfikacji lub zmian w bazie danych SQL Server, jest rejestrowana, z wyjątkiem transakcji związanych ze sklepem wersji obejmujących TempDB, gdy używana jest izolacja migawek. (logowanie w dzienniku transakcji gwarantuje, że transakcję można wycofać (w przypadku niektórych operacji można ograniczyć rejestrowanie (nazywa się to operacjami minimalnie rejestrowanymi), zmieniając model odzyskiwania na ZLOGOWANY Zalogowany --- więcej informacji na ten temat można znaleźć w SQL Server Books Online tutaj

Uczący się języka SQL
źródło
0

Odpowiedź jest, jak zawsze, zależy.
Kiedy powiedziałeś:

Mam dwie tabele, które zawierają zagregowane informacje. Informacje są stale aktualizowane

Co to za agregacja?
Zamiast tego spróbuj użyć WIDOKU, bez potrzeby aktualizacji i bez rejestrowania.

Jeśli nie jest to możliwe, spróbuj użyć krótszych transakcji i wykonać kopię zapasową dziennika między nimi.

Użycie innej bazy danych oznacza narzut administracji bezpieczeństwa itp. I będzie mieć własny dziennik transakcji (nawet w modelu odzyskiwania SIMPLE dziennik jest zapisywany, SQL Server po prostu automatycznie przycina dziennik, ale nie zwalnia miejsca na dysku), więc nie poleciłbym tej opcji .

Roi Gavish
źródło
Zaktualizowałem pytanie o typ agregacji, który ma miejsce.
dangowans
@ dangowans Myślę o modelu odzyskiwania z logowaniem zbiorczym, czy Twoja DRP wymaga zdolności do przywracania do punktu w czasie? Czy używasz replikacji? spróbuj przeczytać o wymaganiach dotyczących minimum zalogowanych operacji
Roi Gavish,