Я собирался опубликовать этот самый сценарий - будем надеяться, что он использует SQL Server.
SqlRyan
1
Отличный скрипт - за исключением того, что он должен читать LEN (...) - 3, а не минус 4. Значения возвращаются следующим образом: «3746520 КБ», поэтому нужно обрезать только последние 3 символа. Но ... здорово видеть, как публикация 7-летней давности сегодня так же полезна, как и в 2010 году !!
Майк Гледхилл,
сделайте это таблицей переменных, и вам не придется ее отбрасывать. «declare @tmpTableSizes TABLE»
АРЛибертариан
22
Запрос (модификация https://stackoverflow.com/a/7892349/1737819 ), чтобы найти размер настраиваемой таблицы имен в ГБ. Вы можете попробовать это, заменив «YourTableName» на имя своей таблицы.
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 предоставляет встроенную хранимую процедуру, которую вы можете запустить, чтобы легко показать размер таблицы, включая размер индексов… что может вас удивить.
кстати, чтобы увидеть результаты удалений с помощью этого запроса, вам, вероятно, потребуется очистить. Вот запрос , чтобы увидеть все открытые таблицы сразу: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;
Ноумен
7
Я знаю, что в SQL 2012 (может работать и в других версиях) вы можете делать следующее:
Щелкните правой кнопкой мыши имя базы данных в обозревателе объектов.
Выберите Отчеты> Стандартные отчеты> Использование диска по верхним таблицам.
Это даст вам список из 1000 лучших таблиц, а затем вы сможете отсортировать его по размеру данных и т. Д.
Добро пожаловать в Stack Overflow! Хотя этот код может помочь решить проблему, он не объясняет, почему и / или как он отвечает на вопрос. Предоставление этого дополнительного контекста значительно улучшило бы его долгосрочную образовательную ценность. Пожалуйста , измените свой ответ , чтобы добавить объяснение, в том числе то , что применять ограничения и допущения. Я знаю, что это плохой вопрос - это еще одна причина для ясности в ответе.
Ответы:
SQL Server: -
Или в студии управления: щелкните правой кнопкой мыши таблицу -> Свойства -> Хранилище.
MySQL: -
SELECT table_schema, table_name, data_length, index_length FROM information_schema.tables
Sybase: -
Oracle: - как-я-вычислить-размер-таблицы-в оракуле
источник
data_length
это размер таблицы в байтах, а не количество строк. См .: dev.mysql.com/doc/refman/8.0/en/tables-table.htmlОбъединив ответы из сообщений ratty и Haim (включая комментарии), я придумал следующее, которое для SQL Server пока кажется наиболее элегантным:
-- 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
Это дает вам список всех ваших таблиц в порядке зарезервированного размера, от наибольшего к наименьшему.
источник
Запрос (модификация https://stackoverflow.com/a/7892349/1737819 ), чтобы найти размер настраиваемой таблицы имен в ГБ. Вы можете попробовать это, заменив «YourTableName» на имя своей таблицы.
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
источник
CONVERT(DECIMAL,SUM(a.total_pages))
чтобы он отображал информацию для таблиц размером меньше ГБSQL Server предоставляет встроенную хранимую процедуру, которую можно запустить, чтобы легко показать размер таблицы, включая размер индексов.
источник
SQL Server предоставляет встроенную хранимую процедуру, которую вы можете запустить, чтобы легко показать размер таблицы, включая размер индексов… что может вас удивить.
Синтаксис:
см. в:
http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/
источник
Вы под размером случайно подразумеваете количество записей в таблице? В этом случае:
SELECT COUNT(*) FROM your_table_name
источник
А в PostgreSQL:
SELECT pg_size_pretty(pg_relation_size('tablename'));
источник
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;
Я знаю, что в SQL 2012 (может работать и в других версиях) вы можете делать следующее:
Это даст вам список из 1000 лучших таблиц, а затем вы сможете отсортировать его по размеру данных и т. Д.
источник
SQL Server, красиво отформатированная таблица для всех таблиц в КБ / МБ:
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
источник
Вы можете сослаться на ответ Marc_s в другой ветке, очень полезно.
Получить размер всех таблиц в базе данных
источник
Вот простой запрос, если вы просто пытаетесь найти самые большие таблицы.
-- 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
источник