Google
 
Strona główna Darmowe programy, shareware Programowanie MS Excel Porady komputerowe Bazy danych Kontakt

Monitorowanie fizycznego rozmiaru tabel w bazach danych SQL Serwera.


Systemowa procedura składowana sp_spaceused.



Czasami zdarza się, że na serwerze SQL kończy się miejsce na dysku. Przydatna okazuje się wówczas systemowa procedura składowana sp_spaceused. Umożliwia ona dla danej tabeli wyznaczyć rozmiar fizycznej przestrzeni dyskowej zajmowanej przez daną tabelę. Dzięki temu można dowiedzieć się ile miejsca zajmują tabele i zdecydować co dalej zrobić. Wywołanie procedury jest następujące: Sp_spaceused nazwa_tabeli Jako wynik procedura zwraca między innymi ilość wierszy w tabeli, wielkość miejsca zajmowanego przez dane i wielkość miejsca zarezerwowanego dla tabeli.



Procedura rozmiary_tabel.



Problem może się pojawić w przypadku gdy mamy do czynienia z bazą danych, w której znajduje się bardzo wiele tabel. Sprawdzenie rozmiarów wszystkich tabel mogłoby wówczas zająć wiele czasu. Problem może rozwiązać specjalna procedura składowana, która wyświetla listę wszystkich tabel posortowaną według rozmiaru miejsca zajmowanego przez tabele. Oto jej kod źródłowy napisany w języku Transact-SQL:

CREATE PROCEDURE rozmiary_tabel
AS
DECLARE @nazwa varchar(250);
Create table #rozmiary_tmp
( [name] varchar(200) ,
[rows] varchar(200),
[reserved] varchar(200) ,
[data] varchar(200) ,
[index_size] varchar(200) ,
[unused] varchar(200)
);

DECLARE kursor CURSOR for
select name from sysobjects WHERE type='U' ;
OPEN kursor

fetch kursor INTO @nazwa
while @@fetch_status =0
begin
insert into #rozmiary_tmp Exec sp_spaceused @nazwa
fetch next FROM kursor INTO @nazwa
end
CLOSE kursor
DEALLOCATE kursor
select * from #rozmiary_tmp order by cast (replace(reserved,' KB' ,'') as int ) DESC
GO

Działanie procedury jest następujące: Najpierw tworzymy tabelę tymczasową #rozmiary_tmp, która będzie potrzebna do przechowania pośrednich wyników pracy procedury. Następnie wybieramy nazwy wszystkich tabel z tabeli sysobjects. W tabeli tej rekordy odnoszące się do obiektów tabel mają w kolumnie type wpisane U (User table). Następnie w pętli wyznaczmy rozmiar zajmowany przez tabelę i zapisujemy go do tabeli tymczasowej. Na końcu zamykamy kursor i wybieramy wszystkie rekordy z tabeli #rozmiary_tmp posortowane według rozmiarów.


 

Copyright © 2006-2010 programowaniePC.pl