Udostępnij za pomocą


sp_spaceused (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

Procedura sp_spaceused składowana systemu wyświetla jedną z następujących czynności:

  • liczba wierszy, zarezerwowane miejsce na dysku i miejsce na dysku używane przez tabelę, widok indeksowany lub kolejkę usługi Service Broker w bieżącej bazie danych

  • miejsce na dysku zarezerwowane i używane przez całą bazę danych

Transact-SQL konwencje składni

Składnia

sp_spaceused
    [ [ @objname = ] N'objname' ]
    [ , [ @updateusage = ] 'updateusage' ]
    [ , [ @mode = ] 'mode' ]
    [ , [ @oneresultset = ] oneresultset ]
    [ , [ @include_total_xtp_storage = ] include_total_xtp_storage ]
[ ; ]

Uwaga / Notatka

Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Argumenty (w programowaniu)

W przypadku usług Azure Synapse Analytics i Analytics Platform System (PDW) sp_spaceused należy określić nazwane parametry (na przykład sp_spaceused (@objname= N'Table1');), zamiast polegać na pozycji porządkowej parametrów.

[ @objname = ] N'objname'

Kwalifikowana lub niekwalifikowana nazwa tabeli, widok indeksowany lub kolejka, dla której są żądane informacje o użyciu miejsca. @objname to nvarchar(776), z wartością domyślną NULL. Cudzysłowy są wymagane tylko wtedy, gdy określono kwalifikowaną nazwę obiektu. Jeśli podano w pełni kwalifikowaną nazwę obiektu (w tym nazwę bazy danych), nazwa bazy danych musi być nazwą bieżącej bazy danych.

Jeśli nie określono @objname , wyniki są zwracane dla całej bazy danych.

Uwaga / Notatka

Usługi Azure Synapse Analytics i Analytics Platform System (PDW) obsługują tylko obiekty bazy danych i tabel.

[ @updateusage = ] 'updateusage'

Wskazuje, DBCC UPDATEUSAGE że należy uruchomić polecenie , aby zaktualizować informacje o użyciu miejsca. @updateusage jest varchar(5), z wartością domyślną false. Jeśli nie określono @objname , instrukcja jest uruchamiana w całej bazie danych. W przeciwnym razie instrukcja jest uruchamiana w @objname. Wartości mogą mieć wartość true lub false.

[ @mode = ] "mode"

Wskazuje zakres wyników. W przypadku rozproszonej tabeli lub bazy danych parametr @mode umożliwia dołączenie lub wykluczenie zdalnej części obiektu. Aby uzyskać więcej informacji, zobacz Stretch Database.

Ważne

Baza danych Stretch jest przestarzała w programie SQL Server 2022 (16.x) i usłudze Azure SQL Database. W przyszłej wersji silnika bazy danych, ta funkcja zostanie usunięta. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.

@mode jest varchar(11) i może być jedną z tych wartości.

Wartość Opis
ALL (ustawienie domyślne) Zwraca statystyki magazynu obiektu lub bazy danych, w tym zarówno część lokalną, jak i część zdalną.
LOCAL_ONLY Zwraca statystyki magazynu tylko lokalnej części obiektu lub bazy danych. Jeśli obiekt lub baza danych nie jest włączona w systemie Stretch, zwraca te same statystyki co w przypadku , gdy @mode to ALL.
REMOTE_ONLY Zwraca statystyki magazynu tylko zdalnego fragmentu obiektu lub bazy danych. Ta opcja zgłasza błąd, gdy spełniony jest jeden z następujących warunków:

Tabela nie jest włączona dla programu Stretch.

Tabela jest włączona dla programu Stretch, ale nigdy nie włączono migracji danych. W takim przypadku tabela zdalna nie ma jeszcze schematu.

Użytkownik ręcznie porzucił tabelę zdalną.

Aprowizowanie zdalnego archiwum danych zwróciło stan Powodzenie, ale w rzeczywistości nie powiodło się.

[ @oneresultset = ] jeden zbiór wyników

Wskazuje, czy ma być zwracany pojedynczy zestaw wyników. @oneresultset jest bitowa i może być jedną z następujących wartości:

Wartość Opis
0 (ustawienie domyślne) Jeśli @objname ma wartość null lub nie jest określona, zwracane są dwa zestawy wyników.
1 Gdy @objname jest NULL określona lub nie jest określona, zwracany jest pojedynczy zestaw wyników.

[ @include_total_xtp_storage = ] include_total_xtp_storage

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje oraz SQL Database

Gdy @oneresultset jest ustawiona na 1wartość , ten parametr określa, czy pojedynczy zestaw wyników zawiera kolumny dla MEMORY_OPTIMIZED_DATA magazynu. @include_total_xtp_storage jest bitowa z wartością domyślną 0. Jeśli 1kolumny XTP są uwzględnione w zestawie wyników.

Zwracanie wartości kodu

0 (powodzenie) lub 1 (niepowodzenie).

Zestaw wyników

Jeśli @objname zostanie pominięta, a wartość @oneresultset to 0, zostaną zwrócone następujące zestawy wyników, aby podać bieżące informacje o rozmiarze bazy danych.

Nazwa kolumny Typ danych Opis
database_name nvarchar(128) Nazwa bieżącej bazy danych.
database_size varchar(18) Rozmiar bieżącej bazy danych w megabajtach. database_size zawiera zarówno dane, jak i pliki dziennika.
unallocated space varchar(18) Miejsce w bazie danych, która nie jest zarezerwowana dla obiektów bazy danych.
Nazwa kolumny Typ danych Opis
reserved varchar(18) Całkowita ilość miejsca przydzielonego przez obiekty w bazie danych.
data varchar(18) Łączna ilość miejsca używanego przez dane.
index_size varchar(18) Łączna ilość miejsca używanego przez indeksy.
unused varchar(18) Łączna ilość miejsca zarezerwowanego dla obiektów w bazie danych, ale nie jest jeszcze używana.

Jeśli @objname zostanie pominięta, a wartość @oneresultset to 1, zostanie zwrócony następujący pojedynczy zestaw wyników w celu udostępnienia bieżących informacji o rozmiarze bazy danych.

Nazwa kolumny Typ danych Opis
database_name nvarchar(128) Nazwa bieżącej bazy danych.
database_size varchar(18) Rozmiar bieżącej bazy danych w megabajtach. database_size zawiera zarówno dane, jak i pliki dziennika.
unallocated space varchar(18) Miejsce w bazie danych, która nie jest zarezerwowana dla obiektów bazy danych.
reserved varchar(18) Całkowita ilość miejsca przydzielonego przez obiekty w bazie danych.
data varchar(18) Łączna ilość miejsca używanego przez dane.
index_size varchar(18) Łączna ilość miejsca używanego przez indeksy.
unused varchar(18) Łączna ilość miejsca zarezerwowanego dla obiektów w bazie danych, ale nie jest jeszcze używana.

Jeśli określono @objname , dla określonego obiektu zostanie zwrócony następujący zestaw wyników.

Nazwa kolumny Typ danych Opis
name nvarchar(128) Nazwa obiektu, dla którego zażądano informacji o użyciu miejsca.

Nazwa schematu obiektu nie jest zwracana. Jeśli nazwa schematu jest wymagana, użyj sys.dm_db_partition_stats lub sys.dm_db_index_physical_stats dynamicznych widoków zarządzania, aby uzyskać równoważne informacje o rozmiarze.
rows char(20) Liczba wierszy istniejących w tabeli. Jeśli określony obiekt jest kolejką usługi Service Broker, ta kolumna wskazuje liczbę komunikatów w kolejce.
reserved varchar(18) Łączna ilość zarezerwowanego miejsca dla @objname.
data varchar(18) Łączna ilość miejsca używanego przez dane w @objname.
index_size varchar(18) Łączna ilość miejsca używanego przez indeksy w @objname.
unused varchar(18) Łączna ilość miejsca zarezerwowanego dla @objname, ale nie jest jeszcze używana.

Ten tryb jest domyślny, jeśli nie określono żadnych parametrów. Następujące zestawy wyników są zwracane szczegółowo informacje o rozmiarze bazy danych dysku.

Nazwa kolumny Typ danych Opis
database_name nvarchar(128) Nazwa bieżącej bazy danych.
database_size varchar(18) Rozmiar bieżącej bazy danych w megabajtach. database_size zawiera zarówno dane, jak i pliki dziennika. Jeśli baza danych ma grupę MEMORY_OPTIMIZED_DATA plików, ta wartość zawiera łączny rozmiar na dysku wszystkich plików punktów kontrolnych w grupie plików.
unallocated space varchar(18) Miejsce w bazie danych, która nie jest zarezerwowana dla obiektów bazy danych. Jeśli baza danych ma grupę MEMORY_OPTIMIZED_DATA plików, ta wartość zawiera łączny rozmiar na dysku plików punktu kontrolnego ze stanem PRECREATED w grupie plików.

Miejsce używane przez tabele w bazie danych. Ten zestaw wyników nie odzwierciedla tabel zoptymalizowanych pod kątem pamięci, ponieważ nie ma ewidencjonowania użycia dysku dla tabeli:

Nazwa kolumny Typ danych Opis
reserved varchar(18) Całkowita ilość miejsca przydzielonego przez obiekty w bazie danych.
data varchar(18) Łączna ilość miejsca używanego przez dane.
index_size varchar(18) Łączna ilość miejsca używanego przez indeksy.
unused varchar(18) Łączna ilość miejsca zarezerwowanego dla obiektów w bazie danych, ale nie jest jeszcze używana.

Następujący zestaw wyników jest zwracany tylko wtedy, gdy baza danych ma grupę MEMORY_OPTIMIZED_DATA plików z co najmniej jednym kontenerem:

Nazwa kolumny Typ danych Opis
xtp_precreated varchar(18) Całkowity rozmiar plików punktów kontrolnych ze stanem PRECREATEDw KB. Liczy się w kierunku nieprzydzielonego miejsca w bazie danych jako całości. Jeśli na przykład istnieje 600 000 KB wstępnie utworzonych plików punktu kontrolnego, ta kolumna zawiera wartość 600000 KB.
xtp_used varchar(18) Łączny rozmiar plików punktów kontrolnych ze stanami UNDER CONSTRUCTION, ACTIVEi MERGE TARGETw kb. Ta wartość to miejsce na dysku aktywnie używane dla danych w tabelach zoptymalizowanych pod kątem pamięci.
xtp_pending_truncation varchar(18) Całkowity rozmiar plików punktów kontrolnych ze stanem WAITING_FOR_LOG_TRUNCATIONw KB. Ta wartość to miejsce na dysku używane dla plików punktów kontrolnych, które oczekują na oczyszczanie, po obcięciu dziennika.

Jeśli @objname zostanie pominięta, wartość @oneresultset to 1, a @include_total_xtp_storage to 1, zostanie zwrócony następujący pojedynczy zestaw wyników, aby podać bieżące informacje o rozmiarze bazy danych. Jeśli @include_total_xtp_storage to 0 (wartość domyślna), zostaną pominięte trzy ostatnie kolumny.

Nazwa kolumny Typ danych Opis
database_name nvarchar(128) Nazwa bieżącej bazy danych.
database_size varchar(18) Rozmiar bieżącej bazy danych w megabajtach. database_size zawiera zarówno dane, jak i pliki dziennika. Jeśli baza danych ma grupę MEMORY_OPTIMIZED_DATA plików, ta wartość zawiera łączny rozmiar na dysku wszystkich plików punktów kontrolnych w grupie plików.
unallocated space varchar(18) Miejsce w bazie danych, która nie jest zarezerwowana dla obiektów bazy danych. Jeśli baza danych ma grupę MEMORY_OPTIMIZED_DATA plików, ta wartość zawiera łączny rozmiar na dysku plików punktu kontrolnego ze stanem PRECREATED w grupie plików.
reserved varchar(18) Całkowita ilość miejsca przydzielonego przez obiekty w bazie danych.
data varchar(18) Łączna ilość miejsca używanego przez dane.
index_size varchar(18) Łączna ilość miejsca używanego przez indeksy.
unused varchar(18) Łączna ilość miejsca zarezerwowanego dla obiektów w bazie danych, ale nie jest jeszcze używana.
xtp_precreated 1 varchar(18) Całkowity rozmiar plików punktów kontrolnych ze stanem PRECREATEDw KB. Ta wartość jest liczona w kierunku nieprzydzielonego miejsca w bazie danych jako całości. Zwraca wartość NULL , jeśli baza danych nie ma MEMORY_OPTIMIZED_DATA grupy plików z co najmniej jednym kontenerem.
xtp_used 1 varchar(18) Łączny rozmiar plików punktów kontrolnych ze stanami UNDER CONSTRUCTION, ACTIVEi MERGE TARGETw kb. Ta wartość to miejsce na dysku aktywnie używane dla danych w tabelach zoptymalizowanych pod kątem pamięci. Zwraca wartość NULL , jeśli baza danych nie ma MEMORY_OPTIMIZED_DATA grupy plików z co najmniej jednym kontenerem.
xtp_pending_truncation 1 varchar(18) Całkowity rozmiar plików punktów kontrolnych ze stanem WAITING_FOR_LOG_TRUNCATIONw KB. Ta wartość to miejsce na dysku używane dla plików punktów kontrolnych, które oczekują na oczyszczanie, po obcięciu dziennika. Zwraca wartość NULL , jeśli baza danych nie ma MEMORY_OPTIMIZED_DATA grupy plików z co najmniej jednym kontenerem.

1 Uwzględniane tylko wtedy , gdy @include_total_xtp_storage jest ustawiona na 1wartość .

Uwagi

Wartość database_size jest zazwyczaj większa niż sumareserved + unallocated space, ponieważ zawiera rozmiar plików dziennika, ale reserved należy unallocated_space wziąć pod uwagę tylko strony danych. W niektórych przypadkach w usłudze Azure Synapse Analytics ta instrukcja może nie być prawdziwa.

Strony używane przez indeksy XML i indeksy pełnotekstowe są uwzględniane w index_size obu zestawach wyników. Po określeniu @objname strony indeksów XML i indeksów pełnotekstowych dla obiektu są również liczone w sumie reserved i index_size wynikach.

Jeśli użycie miejsca jest obliczane dla bazy danych lub obiektu, który jest indeksem przestrzennym, kolumny rozmiaru przestrzeni, takie jak database_size, reservedi index_size, zawierają rozmiar indeksu przestrzennego.

Po określeniu @updateusage aparat bazy danych programu SQL Server skanuje strony danych w bazie danych i wykonuje wszelkie wymagane poprawki do sys.allocation_units widoków katalogu i sys.partitions dotyczących miejsca do magazynowania używanego przez każdą tabelę. Istnieją pewne sytuacje, na przykład po usunięciu indeksu, gdy informacje o przestrzeni dla tabeli mogą nie być aktualne. @updateusage uruchomienie dużych tabel lub baz danych może zająć trochę czasu. Użyj @updateusage tylko wtedy, gdy podejrzewasz, że zwracane są nieprawidłowe wartości i gdy proces nie ma negatywnego wpływu na innych użytkowników lub procesy w bazie danych. Jeśli jest to preferowane, DBCC UPDATEUSAGE można uruchomić oddzielnie.

Uwaga / Notatka

W przypadku upuszczania lub ponownego kompilowania dużych indeksów albo upuszczania lub obcinania dużych tabel aparat bazy danych wyzywa rzeczywiste przydziały strony i skojarzone z nimi blokady do momentu zatwierdzenia transakcji. Operacje odroczonego usuwania nie zwalniają przydzielonego miejsca natychmiast. W związku z tym wartości zwracane bezpośrednio sp_spaceused po upuszczaniu lub obcinaniu dużego obiektu mogą nie odzwierciedlać rzeczywistego dostępnego miejsca na dysku.

Uprawnienia

Uprawnienie do wykonywania sp_spaceused jest przyznawane roli publicznej . Tylko członkowie stałej roli bazy danych db_owner mogą określać parametr @updateusage.

Przykłady

Odp. Wyświetlanie informacji o miejscu na dysku na temat tabeli

Poniższy przykład raportuje informacje o miejscu na dysku dla Vendor tabeli i jej indeksów.

USE AdventureWorks2022;
GO

EXECUTE sp_spaceused N'Purchasing.Vendor';
GO

B. Wyświetlanie zaktualizowanych informacji o przestrzeni na temat bazy danych

Poniższy przykład podsumowuje miejsce używane w bieżącej bazie danych i używa opcjonalnego parametru @updateusage w celu zapewnienia zwracania bieżących wartości.

USE AdventureWorks2022;
GO

EXECUTE sp_spaceused @updateusage = N'TRUE';
GO

C. Wyświetlanie informacji o użyciu miejsca na temat tabeli zdalnej skojarzonej z tabelą z włączoną obsługą stretch

Poniższy przykład podsumowuje miejsce używane przez tabelę zdalną skojarzona z tabelą z włączoną obsługą stretch przy użyciu argumentu @mode w celu określenia obiektu docelowego zdalnego. Aby uzyskać więcej informacji, zobacz Stretch Database.

USE StretchedAdventureWorks2022;
GO

EXECUTE sp_spaceused N'Purchasing.Vendor', @mode = 'REMOTE_ONLY';

D. Wyświetlanie informacji o użyciu miejsca dla bazy danych w jednym zestawie wyników

Poniższy przykład zawiera podsumowanie użycia miejsca dla bieżącej bazy danych w jednym zestawie wyników.

USE AdventureWorks2022;
GO

EXECUTE sp_spaceused @oneresultset = 1;

E. Wyświetlanie informacji o użyciu miejsca dla bazy danych z co najmniej jedną grupą plików MEMORY_OPTIMIZED w jednym zestawie wyników

Poniższy przykład zawiera podsumowanie użycia miejsca dla bieżącej bazy danych z co najmniej jedną grupą plików w jednym MEMORY_OPTIMIZED zestawie wyników.

USE WideWorldImporters;
GO

EXECUTE sp_spaceused
    @updateusage = 'FALSE',
    @mode = 'ALL',
    @oneresultset = '1',
    @include_total_xtp_storage = '1';
GO

F. Wyświetlanie informacji o użyciu miejsca dla obiektu tabeli MEMORY_OPTIMIZED w bazie danych

Poniższy przykład zawiera podsumowanie użycia miejsca dla MEMORY_OPTIMIZED obiektu tabeli w bieżącej bazie danych z co najmniej jedną MEMORY_OPTIMIZED grupą plików.

USE WideWorldImporters;
GO

EXECUTE sp_spaceused
    @objname = N'VehicleTemperatures',
    @updateusage = 'FALSE',
    @mode = 'ALL',
    @oneresultset = '0',
    @include_total_xtp_storage = '1';
GO