Mam za dużo dodatkowych plików danych (.ndf) tempdb
. Aby usunąć nadmiar plików, muszę opróżnić plik (zawartość zostanie przeniesiona do innych plików):
DBCC SHRINKFILE('tempdbfile8', EMPTYFILE);
a następnie usuń plik:
ALTER DATABASE tempdb REMOVE FILE tempdbfile8;
Ale EMPTYFILE
polecenie zwraca błąd:
DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page.
Msg 2555, Level 16, State 1, Line 2
Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation.
Nie martw się, muszę tylko zlokalizować obiekt, który używa tej strony, aby coś z tym zrobić:
DBCC TRACEON (3604)
DBCC PAGE(2,8,41920) --dbid=2, fileid=8, pageid=41920
Polecenie zwraca wiele informacji, wśród nich identyfikator_obiektu. Ale:
Metadata: ObjectId = 0
Nie mam pojęcia, co z tym zrobić. Który kot powstrzyma tę stronę przed przeniesieniem? Jak zlokalizować ten obiekt, proces, sesję lub cokolwiek to jest? Jakakolwiek pomoc będzie mile widziana, ale należy pamiętać, że pozostawienie wszystkiego bez zmian lub usunięcie innego pliku nie jest prawidłowym rozwiązaniem tego problemu;).
EDYTOWAĆ:
Usuwam pliki, ponieważ postępowaliśmy zgodnie z „najlepszą praktyką” tworzenia jednego pliku na rdzeń procesora (ten sam rozmiar początkowy, to samo tempo wzrostu). Ale o ile wiem, dopóki nie napotkasz problemów rywalizacji, nie ma sensu tworzyć dodatkowych plików tempdb na tym samym urządzeniu. W naszym przypadku ma to sens, ponieważ mamy włączone MPIO , a urządzenie pamięci masowej może obsługiwać 4 ścieżki. Ale był błąd i ostatecznie otrzymaliśmy 5 plików z 6-rdzeniowym procesorem. To więcej niż ścieżki MPIO, mniej niż rdzenie procesora i nie jest to liczba parzysta. Nie może powodować żadnych problemów, ale po prostu wydaje się niewłaściwy :).
W końcu mogłem opróżnić i usunąć plik bez ponownego uruchamiania serwera, ustawiając jedną z baz danych (które podejrzewałem, że spowodowały problem) na tryb pojedynczego użytkownika (natychmiastowe wycofanie). Udało się, ale miałem szczęście. To, czego naprawdę chcę, to zawsze móc śledzić stronę :).
dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
O twoim rozwiązaniu: zadziałałoby, ale naprawdę chciałbym to zrobić bez wyłączania instancji.