2009-08-22 12 views
5

Używamy jednej tabeli do inspekcji w SQL Server 2008 DB.SQL szybkie INSERTs bez UPDATEs

Architektura pojedynczej tabeli działa ładnie, jest prosta w wyszukiwaniu, uwzględnia zmiany w schemacie.

Ale jest to poważne wąskie gardło dla całego DB. Wszystkie WKŁADY i AKTUALIZACJE muszą przejść przez tabelę kontroli.

Używamy już instrukcji NOLOCK dla instrukcji SELECT.

Ponieważ nie ma aktualizacji do tej tabeli, czy są jakieś sugestie dotyczące zwiększenia przepustowości instrukcji INSERT?

Odpowiedz

4

Upewnij się, że masz podstawowy indeks klastrowy INT (lub BIGINT) na stole! A najlepiej żadne inne indeksy (jeśli to możliwe) - spowolnią wstawki.

To błędne przekonanie, że ponieważ tabela wymaga tylko WSTAW i prawie żadnych odczytów, powinieneś "uratować" sobie problem klucza podstawowego, klastrowego.

jako bogini SQL Server indeksowanie, Kimberly Tripp, opisuje w swojej doskonałej blogu The Clustered Index Debate continues:

Wkładki są szybsze w klastrowym tabeli (ale tylko w „prawo” skupione tabeli) niż w porównaniu do sterty . Podstawowy problem polega na tym, że wyszukiwania w IAM/PFS w celu określenia położenia wstawki w stercie są wolniejsze niż w zgrupowanej tabeli (gdzie lokalizacja wstawki jest znana, określona przez klucz klastrowany). Wstawki są szybsze po wstawieniu do tabeli , gdzie zamówienie jest zdefiniowane (CL), a gdzie zamówienie jest coraz większe.

Więc prawo skupione indeks może przyspieszyć swoje wkłady, a tu oznacza statyczne (nigdy się nie zmienia), unikalne, tak małe, jak to możliwe (INT lub BIGINT), a korzystnie coraz większa (bez podziałów stron i w związku z tym brak kary za wydajność).

Jeśli tabela zawiera tylko wkładki i nie ma aktualizacji/usuwania, należy upewnić się, że używa się 100% FILLFACTOR w indeksie klastrowym, aby w pełni wypełnić te strony serwera SQL.

Marc

+0

Pracuję nad tymi liniami. Posiadam KLUCZ GŁĘBOKIEGO KLIENTA ZNAMIONOWEGO, tak że WSTAWKI są naprawdę NASTĘPNYMI na ostatniej stronie. 100% WSPÓŁCZYNNIK FILLU JEST ŁADNYM dotykiem. Zastanawiam się nad comiesięcznym przeglądem, przenoszeniem zapisów do "stałego" stołu historii, tak aby główny stół nigdy nie był ogromny. – pkario

+0

Cóż, jeśli masz ciągle rosnący indeks, nawet rozmiar tabeli naprawdę nie jest tak dużym problemem (z wyjątkiem oczywiście wyborów) –

2

Jedyne zalecenia chciałbym zrobić to:

  • zapewnić piszesz wartości non-strunowych jak najwięcej
  • hermetyzacji swoje zapisy do kontroli za pośrednictwem procedur składowanych
  • grab żadnych innych danych z wywołania procedur składowanych lub,
  • rozważ użycie osobnego, specjalnie do tego celu, widoku w swoim sproc audytu. Upewnij się, że jego połączenia są tak minimalne, jak to tylko możliwe. Ten widok byłby dla wyszukiwania PK dla wiadomości audytu, itp. Podczas próby zlokalizowania FK dla twoich danych łańcuchowych.
  • brak rekomendacji, ale fakt: mniej indeksów oznacza szybsze wstawianie + wolniejsze zaznaczenia.
  • rozważyć archiwizację "starych" wierszy audytu na inną tabelę. Utrzymuj tabelę kontroli tak małą, jak tylko możesz. Przenieś te starsze wiersze kontroli do innej tabeli. Aby zgłosić/zapytać, utwórz widok, który będzie join lub union audytów "na żywo" i "starszych".
0

Jeśli dołączanie tylko do tabel kontrolnych i generować raporty, które dzieje się zawsze kończy się wykonaniem skanowania tabeli, należy rozważyć usunięcie wszelkich indeksów na stole.