Miałem zamieścić ten właśnie skrypt - miejmy nadzieję, że używa SQL Server.
SqlRyan
1
Świetny skrypt - z wyjątkiem tego, że powinien brzmieć LEN (...) - 3, a nie minus 4. Wartości wracają w ten sposób: "3746520 KB", więc to tylko ostatnie 3 znaki, które należy uciąć. Ale ... fajnie zobaczyć, jak post sprzed 7 lat jest tak samo przydatny dzisiaj, jak w 2010 roku !!
Mike Gledhill,
uczyń z niej zmienną tabelę i nie będziesz musiał jej porzucać. „Zadeklaruj @tmpTableSizes TABLE”
ARLibertarian
22
Zapytanie (modyfikacja https://stackoverflow.com/a/7892349/1737819 ) mające na celu znalezienie niestandardowego rozmiaru tabeli nazw w GB. Możesz spróbować tego, zamień „YourTableName” na nazwę swojej tabeli.
SELECT
t.NAME AS TableName,
p.rows AS RowCounts,
CONVERT(DECIMAL,SUM(a.total_pages)) * 8 / 1024 / 1024AS TotalSpaceGB,
SUM(a.used_pages) * 8 / 1024 / 1024AS UsedSpaceGB ,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 / 1024AS UnusedSpaceGB
FROM
sys.tables t
INNERJOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNERJOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNERJOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFTOUTERJOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME = 'YourTable'AND t.is_ms_shipped = 0AND i.OBJECT_ID > 255GROUPBY
t.Name, s.Name, p.Rows
ORDERBY
UsedSpaceGB DESC, t.Name
SQL Server zapewnia wbudowaną procedurę składowaną, którą można uruchomić w celu łatwego pokazania rozmiaru tabeli, w tym rozmiaru indeksów… co może Cię zaskoczyć.
btw, aby zobaczyć wyniki usunięć za pomocą tego zapytania, prawdopodobnie musisz odkurzyć. Oto zapytanie, aby wyświetlić wszystkie publiczne stoły jednocześnie:SELECT table_name, pg_size_pretty(pg_relation_size(table_names.table_name)) AS size from (select table_name from information_schema.tables where table_schema = 'public') AS table_names ORDER BY pg_relation_size(table_names.table_name) DESC;
Noumenon
7
Wiem, że w SQL 2012 (może działać w innych wersjach) możesz wykonać następujące czynności:
Kliknij prawym przyciskiem myszy nazwę bazy danych w Eksploratorze obiektów.
Wybierz opcję Raporty> Raporty standardowe> Wykorzystanie dysku według najważniejszych tabel.
Spowoduje to wyświetlenie listy 1000 najpopularniejszych tabel, a następnie możesz uporządkować ją według rozmiaru danych itp.
Witamy w Stack Overflow! Chociaż ten kod może pomóc w rozwiązaniu problemu, nie wyjaśnia, dlaczego i / lub jak odpowiada na pytanie. Zapewnienie tego dodatkowego kontekstu znacznie poprawiłoby jego długoterminową wartość edukacyjną. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnienie, w tym, co stosuje się ograniczenia i założenia. Wiem, że to kiepskie pytanie - to jeszcze większy powód, aby odpowiedzieć na to pytanie.
Odpowiedzi:
SQL Server: -
Lub w studiu zarządzania: Kliknij prawym przyciskiem myszy tabelę -> Właściwości -> Pamięć
MySQL: -
SELECT table_schema, table_name, data_length, index_length FROM information_schema.tables
Sybase: -
Oracle: - jak-zrobić-i-obliczyć-rozmiar-tabel-w-wyroczni
źródło
data_length
jest to rozmiar tabeli w bajtach, a nie liczba wierszy. Zobacz: dev.mysql.com/doc/refman/8.0/en/tables-table.htmlŁącząc odpowiedzi z postów Ratty'ego i Haima (w tym komentarze), wymyśliłem to, które dla SQL Server wydaje się jak dotąd najbardziej eleganckie:
-- DROP TABLE #tmpTableSizes CREATE TABLE #tmpTableSizes ( tableName varchar(100), numberofRows varchar(100), reservedSize varchar(50), dataSize varchar(50), indexSize varchar(50), unusedSize varchar(50) ) insert #tmpTableSizes EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'" select * from #tmpTableSizes order by cast(LEFT(reservedSize, LEN(reservedSize) - 4) as int) desc
To daje ci listę wszystkich twoich tabel w kolejności zarezerwowanego rozmiaru, w kolejności od największego do najmniejszego.
źródło
Zapytanie (modyfikacja https://stackoverflow.com/a/7892349/1737819 ) mające na celu znalezienie niestandardowego rozmiaru tabeli nazw w GB. Możesz spróbować tego, zamień „YourTableName” na nazwę swojej tabeli.
SELECT t.NAME AS TableName, p.rows AS RowCounts, CONVERT(DECIMAL,SUM(a.total_pages)) * 8 / 1024 / 1024 AS TotalSpaceGB, SUM(a.used_pages) * 8 / 1024 / 1024 AS UsedSpaceGB , (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 / 1024 AS UnusedSpaceGB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME = 'YourTable' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY UsedSpaceGB DESC, t.Name
źródło
CONVERT(DECIMAL,SUM(a.total_pages))
żeby wyświetlał informacje o stolikach mniejszych niż GBSQL Server udostępnia wbudowaną procedurę składowaną, którą można uruchomić, aby łatwo pokazać rozmiar tabeli, w tym rozmiar indeksów
źródło
SQL Server zapewnia wbudowaną procedurę składowaną, którą można uruchomić w celu łatwego pokazania rozmiaru tabeli, w tym rozmiaru indeksów… co może Cię zaskoczyć.
Składnia:
widzieć w :
http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/
źródło
Czy przypadkiem wielkość ma na myśli liczbę rekordów w tabeli? W tym wypadku:
SELECT COUNT(*) FROM your_table_name
źródło
A w PostgreSQL:
SELECT pg_size_pretty(pg_relation_size('tablename'));
źródło
SELECT table_name, pg_size_pretty(pg_relation_size(table_names.table_name)) AS size from (select table_name from information_schema.tables where table_schema = 'public') AS table_names ORDER BY pg_relation_size(table_names.table_name) DESC;
Wiem, że w SQL 2012 (może działać w innych wersjach) możesz wykonać następujące czynności:
Spowoduje to wyświetlenie listy 1000 najpopularniejszych tabel, a następnie możesz uporządkować ją według rozmiaru danych itp.
źródło
SQL Server, ładnie sformatowana tabela dla wszystkich tabel w KB / MB:
SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB, SUM(a.used_pages) * 8 AS UsedSpaceKB, CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB, CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY t.Name
źródło
Możesz odnieść się do odpowiedzi Marc_s w innym wątku, Bardzo przydatne.
Uzyskaj rozmiar wszystkich tabel w bazie danych
źródło
Oto proste zapytanie, jeśli próbujesz znaleźć największe tabele.
-- Find largest table partitions SELECT top 20 obj.name, LTRIM (STR ( sz.in_row_data_page_count * 8, 15, 0) + ' KB') as Size, * FROM sys.dm_db_partition_stats sz inner join sys.objects obj on obj.object_id = sz.object_id order by sz.in_row_data_page_count desc
źródło