W niektórych okolicznościach robienie tego INSERT INTO <tablename> (WITH TABLOCK)
będzie szybsze ze względu na minimalne rejestrowanie. Okoliczności te obejmują posiadanie bazy danych w BULK_LOGGED
modelu odzyskiwania.
Czy istnieją inne potencjalne korzyści wydajność do korzystania WITH TABLOCK
na zasadzie INSERT
na pustym stole, gdy baza danych ( tempdb ) jest przy użyciu SIMPLE
modelu odzyskiwania?
Pracuję z SQL Server 2012 Standard Edition.
Mój przypadek użycia dotyczy utworzenia, a następnie natychmiastowego zapełnienia tabeli tymczasowej w ramach procedury składowanej za pomocą polecenia INSERT...SELECT
, które może zawierać nawet kilka milionów wierszy. Staram się unikać tego rodzaju nadużyć tempdb , ale czasami jest to potrzebne.
Staram się zbudować wymaganie TABLOCK
. Nie wydaje się, żeby coś to zaszkodziło i mogłoby przynieść korzyści. Próbuję dowiedzieć się, czy istnieje wystarczająca potencjalna korzyść, aby dodać ją w dowolnym miejscu w naszej bazie kodu, gdzie jestem pewien, że nie ma innego procesu, który chciałby pisać do tabeli.
Zwykle wstawiam do nowo utworzonej lokalnej tabeli temp z klastrowanym PK, ale czasami używam sterty.
źródło