Najlepsza praktyka zmniejszania Tempdb w środowisku produkcyjnym

24

Jakiej najlepszej praktyki należy używać podczas zmniejszania tymczasowej bazy danych w SQL Server 2008?

Czy korzystanie z poniższych jest ryzykowne?

use tempdb
GO

DBCC FREEPROCCACHE -- clean cache
DBCC DROPCLEANBUFFERS -- clean buffers
DBCC FREESYSTEMCACHE ('ALL') -- clean system cache
DBCC FREESESSIONCACHE -- clean session cache
DBCC SHRINKDATABASE(tempdb, 10); -- shrink tempdb
dbcc shrinkfile ('tempdev') -- shrink db file
dbcc shrinkfile ('templog') -- shrink log file
GO

-- report the new file sizes
SELECT name, size
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO
Mcol
źródło
Najlepszą praktyką jest ustalenie, co powoduje wzrost, i zajęcie się tym. Jeśli go zmniejszysz, po prostu musi znów urosnąć, a to wymaga czasu, a IO
Nick.McDermaid
Tak, wiem. Ale kiedy muszę, bo jest już za późno na proaktywność :) Czy to najlepsze rozwiązanie?
Przepraszam, nie mogę ci tam pomóc.
Nick.McDermaid

Odpowiedzi:

11

Najlepszą praktyką jest proaktywne monitorowanie normalnego użytkowania Tempdb i odpowiednie ustawianie rozmiaru. Jeśli jest to jedyny przypadek, w którym Tempdb urósł do takiego rozmiaru i jest to PROD env, zrestartowałbym SQL Server Services podczas cotygodniowej konserwacji. Tam po Tempdb wrócił do skonfigurowanego rozmiaru.

Zmniejszanie pliku jest w porządku, dopóki Tempdb nie jest używany, w przeciwnym razie może to wpłynąć na istniejące transakcje z punktu widzenia wydajności z powodu blokowania i zakleszczeń.

Pamięć podręczna procedury czyszczenia, bufory pamięci podręcznej itp. Będą miały negatywny wpływ na samą wydajność bazy danych, dopóki nie zostaną one ponownie utworzone. Nie zrobiłbym tego na PROD.

Mam nadzieję, że to pomaga!


źródło
Dzięki za wkład boski. Czy wystarczy sprawdzić w sp_who procesy w tempdb?
1
Nie sądzę, że jest to niezawodny sposób na sprawdzenie, czy używana jest temp db. Myślę, że pojawiłoby się to tylko wtedy, gdy ktoś tworzy tabelę tymczasową bezpośrednio w SSMS. Ale jeśli to samo zostanie wykonane w wyniku operacji zapytania spowodowanej rozlaniem pamięci itp., To nie pojawi się w sp_who2. To pytanie byłoby w rzeczywistości osobnym wątkiem. Utwórz to, ponieważ jest to osobna dyskusja. Jeśli poprzednia odpowiedź pomogła Ci, zaznacz ją jako odpowiedź. Pomoże to innym w podobnej sytuacji.