Odziedziczyłem dość dużą bazę danych SQL Server. Wydaje się, że zajmuje więcej miejsca, niż się spodziewałbym, biorąc pod uwagę zawarte w nim dane.
Czy istnieje prosty sposób, aby określić, ile miejsca na dysku zajmuje każdy stół?
sql-server
tsql
Eric
źródło
źródło
Odpowiedzi:
źródło
Jeśli używasz programu SQL Server Management Studio (SSMS), zamiast uruchamiać zapytanie ( które w moim przypadku zwróciło zduplikowane wiersze ), możesz uruchomić standardowy raport .
Uwaga: Poziom zgodności bazy danych musi być ustawiony na 90 lub więcej, aby działał poprawnie. Zobacz http://msdn.microsoft.com/en-gb/library/bb510680.aspx
źródło
sp_spaceused może uzyskać informacje na temat miejsca na dysku używanego przez tabelę, widok indeksowany lub całą bazę danych.
Na przykład:
Podaje informacje o użyciu dysku dla tabeli ContactInfo.
Aby użyć tego dla wszystkich tabel jednocześnie:
Użycie dysku można również uzyskać z poziomu funkcji Standardowe raporty programu SQL Server, klikając prawym przyciskiem myszy. Aby przejść do tego raportu, przejdź od obiektu serwera w Eksploratorze obiektów, przejdź do obiektu Bazy danych, a następnie kliknij prawym przyciskiem myszy dowolną bazę danych. Z wyświetlonego menu wybierz Raporty, następnie Raporty standardowe, a następnie „Wykorzystanie dysku według partycji: [nazwa bazy danych]”.
źródło
sp_msforeachtable
SSMS może łatwo wywołać a,System.OutOfMemoryException
jeśli masz dużą liczbę tabel, więc lepszym pomysłem może być użycie tabeli tymczasowej do przechowywania wyników.Oto kolejna metoda: używając SQL Server Management Studio , w Eksploratorze obiektów , przejdź do bazy danych i wybierz Tabele
Następnie otwórz Szczegóły Eksploratora obiektów (naciskając klawisz F7 lub przechodząc do Widok-> Szczegóły Eksploratora obiektów ). Na stronie szczegółów eksploratora obiektów kliknij prawym przyciskiem myszy nagłówek kolumny i włącz kolumny, które chcesz zobaczyć na stronie. Możesz sortować dane według dowolnej kolumny.
źródło
Po kilku poszukiwaniach nie mogłem znaleźć łatwego sposobu na uzyskanie informacji o wszystkich tabelach. Istnieje przydatna procedura składowana o nazwie sp_spaceused, która zwróci całą przestrzeń używaną przez bazę danych. Jeśli podano nazwę tabeli, zwraca miejsce używane przez tę tabelę. Jednak wyniki zwrócone przez procedurę przechowywaną nie są sortowalne, ponieważ kolumny są wartościami znakowymi.
Poniższy skrypt wygeneruje informacje, których szukam.
źródło
Do wszystkich tabel użyj .. (dodając z komentarzy Pawła)
źródło
exec sp_helpdb
którego nie widać nic o tabelach, naexec sp_spaceused
co - ale tylko dla jednej tabeli na raz ... nie daje ci przeglądu, jakie masz tabele i ile mają wierszy i jak zajmują dużo miejsca.Powyższe zapytania są przydatne do znalezienia miejsca zajmowanego przez tabelę (włącznie z indeksami), ale jeśli chcesz porównać, ile miejsca zajmują indeksy w tabeli, skorzystaj z tego zapytania:
źródło
where [i].[is_primary_key] = 0
. Teraz rozmiary powinny się zgadzać.sp_spaceused
. Mierzę GB, więc kilka megapasów niepasujących to niewiele. Nie dbam o dokładne rozmiary, to tylko pomysł.Jeśli chcesz obliczyć dokładnie te same liczby, które znajdują się na stronie „właściwości tabeli - przechowywanie” w SSMS, musisz policzyć je tą samą metodą, co w SSMS (działa dla serwera SQL 2005 i nowszych ... a także działa poprawnie dla tabel z polami LOB - ponieważ samo zliczenie „used_pages” nie wystarczy, aby pokazać dokładny rozmiar indeksu):
źródło
Rozszerzenie @xav odpowiada na obsługiwane partycje tabel, aby uzyskać rozmiar w MB i GB. Testowane na SQL Server 2008/2012 (skomentowano wiersz gdzie
is_memory_optimized = 1
)źródło
Na platformie Azure użyłem tego:
Powinieneś mieć SSMS v17.x
Użyłem;
Z tym, jak wspomniał User Sparrow :
Otwórz
Databases
> i wybierz Tabele , anastępnie naciśnij klawisz F7 Powinieneś zobaczyć
row count
:
SSMS tutaj jest podłączony do baz danych Azure
źródło
Używamy partycjonowania tabel i mieliśmy problemy z powyższymi zapytaniami z powodu duplikatów rekordów.
Dla tych, którzy tego potrzebują, możesz znaleźć poniżej zapytania uruchomionego przez SQL Server 2014 podczas generowania raportu „Wykorzystanie dysku według tabeli”. Zakładam, że działa również z poprzednimi wersjami SQL Server.
To działa jak urok.
źródło
źródło
Mała zmiana w odpowiedzi Mar_c , ponieważ tak często wracam na tę stronę, uporządkowaną według pierwszego wiersza:
źródło
To da ci rozmiary i liczbę rekordów dla każdego stołu.
źródło
{ }
) na pasku narzędzi edytora, aby ładnie sformatować i podświetlić składnię!Aby uzyskać cały rozmiar tabeli w jednej bazie danych, możesz użyć tego zapytania:
Możesz to zmienić, aby wstawić wszystkie wyniki do tabeli temp, a następnie wybrać z tabeli temp.
źródło
Z wiersza polecenia za pomocą OSQL :
źródło
Oto sposób szybkiego uzyskania rozmiarów wszystkich tabel, wykonując następujące czynności:
Napisz podane komendy T-SQL, aby wyświetlić wszystkie tabele bazy danych:
Teraz skopiuj listę tabel bazy danych i skopiuj ją do nowego okna analizatora zapytań
W analizatorze zapytań SQL wybierz z górnego paska narzędzi opcję Wyniki do pliku ( Ctrl+ Shift+ F).
Teraz w końcu naciśnij czerwony przycisk Wykonaj zaznaczony na powyższym pasku narzędzi .
Rozmiar bazy danych wszystkich tabel jest teraz przechowywany w pliku na komputerze.
źródło
Dodałem jeszcze kilka kolumn na górze odpowiedzi marc_s:
źródło
Mój post dotyczy tylko SQL Server 2000 i został przetestowany do pracy w moim środowisku.
Ten kod umożliwia dostęp do wszystkich możliwych baz danych jednej instancji , a nie tylko jednej bazy danych.
Korzystam z dwóch tabel tymczasowych, aby zebrać odpowiednie dane, a następnie zrzucam wyniki do jednej tabeli „na żywo”.
Zwracane dane to: nazwa_bazy_danych, nazwa_bazy_danych, wiersze (w tabeli), dane (wydaje się, że rozmiar tabeli w kilobajtach), dane wejściowe (uważam, że jest to przydatne, gdybym wiedział, kiedy ostatnio uruchomiłem skrypt).
Wadą tego kodu jest to, że pole „data” nie jest przechowywane jako int (znaki „KB” są przechowywane w tym polu), a to byłoby przydatne (ale nie całkowicie konieczne) do sortowania.
Mam nadzieję, że ten kod pomaga komuś tam i oszczędza mu trochę czasu!
W razie potrzeby tabela rsp_DatabaseTableSizes została utworzona poprzez:
źródło
Jako proste rozszerzenie odpowiedzi marc_s (tej, która została zaakceptowana), jest dostosowywane tak, aby zwracało liczbę kolumn i pozwalało na filtrowanie:
źródło
W odpowiedzi na powyższą odpowiedź @Mark dodano @ updateusage = 'true', aby wymusić najnowsze statystyki wielkości ( https://msdn.microsoft.com/en-us/library/ms188776.aspx ):
źródło
Oto przykładowe zapytanie, aby uzyskać tabele większe niż 1 GB uporządkowane według wielkości malejącej.
źródło