Я унаследовал довольно большую базу данных SQL Server. Кажется, он занимает больше места, чем я ожидал, учитывая содержащиеся в нем данные.
Есть ли простой способ определить, сколько места на диске занимает каждая таблица?
sql-server
tsql
Эрик
источник
источник
Ответы:
источник
Если вы используете SQL Server Management Studio (SSMS), вместо выполнения запроса ( который в моем случае возвратил повторяющиеся строки ) вы можете запустить стандартный отчет .
Примечание. Для корректной работы уровень совместимости базы данных должен быть равен 90 или выше. См. Http://msdn.microsoft.com/en-gb/library/bb510680.aspx
источник
sp_spaceused может получить информацию о дисковом пространстве, используемом таблицей, индексированным представлением или всей базой данных.
Например:
Это сообщает информацию об использовании диска для таблицы ContactInfo.
Чтобы использовать это для всех таблиц одновременно:
Вы также можете получить информацию об использовании диска, щелкнув правой кнопкой мыши функцию Стандартные отчеты SQL Server. Чтобы добраться до этого отчета, перейдите от объекта сервера в обозревателе объектов, перейдите к объекту Базы данных и щелкните правой кнопкой мыши любую базу данных. В появившемся меню выберите «Отчеты», затем «Стандартные отчеты», а затем «Использование диска по разделам: [DatabaseName]».
источник
sp_msforeachtable
удобно, хотя использование в SSMS может легко вызвать a,System.OutOfMemoryException
если у вас большое количество таблиц, поэтому лучше использовать временную таблицу для хранения результатов.Вот еще один метод: с помощью SQL Server Management Studio в обозревателе объектов перейдите в базу данных и выберите « Таблицы».
Затем откройте Object Explorer Details (либо нажав F7, либо перейдите в View-> Object Explorer Details ). На странице сведений об обозревателе объектов щелкните правой кнопкой мыши заголовок столбца и включите столбцы, которые вы хотели бы видеть на странице. Вы также можете отсортировать данные по любому столбцу.
источник
После некоторых поисков я не смог найти простой способ получить информацию по всем таблицам. Существует удобная хранимая процедура с именем sp_spaceused, которая будет возвращать все пространство, используемое базой данных. Если ему предоставляется имя таблицы, он возвращает пространство, используемое этой таблицей. Однако результаты, возвращаемые хранимой процедурой, не подлежат сортировке, поскольку столбцы являются символьными значениями.
Следующий скрипт сгенерирует информацию, которую я ищу.
источник
Для всех таблиц используйте .. (добавление из комментариев Павла)
источник
exec sp_helpdb
которого ничего не отображается в таблицах, дляexec sp_spaceused
чего - но только для одной таблицы за раз ... это не дает вам представление о том, какие таблицы у вас есть, сколько у них строк и как много места они занимают.Приведенные выше запросы хороши для определения объема пространства, используемого таблицей (включая индексы), но если вы хотите сравнить, сколько места используется индексами в таблице, используйте этот запрос:
источник
where [i].[is_primary_key] = 0
. Теперь размеры должны совпадать.sp_spaceused
. Я измеряю гигабайты, так что несколько мег не совпадают, не так много. Меня не волнуют точные размеры, просто идея.Если вам нужно рассчитать точно такие же числа, которые находятся на странице «Свойства таблицы - хранилище» в SSMS, вам нужно подсчитать их тем же методом, что и в SSMS (работает для SQL Server 2005 и выше ..., а также работает правильно для таблиц с полями больших объектов - потому что просто подсчет «used_pages» не позволяет точно определить размер индекса):
источник
Расширение @xav ответит, что обрабатывает разделы таблицы, чтобы получить размер в МБ и ГБ. Протестировано на SQL Server 2008/2012 (прокомментировал строку где
is_memory_optimized = 1
)источник
Для Azure я использовал это:
Вы должны иметь SSMS v17.x
Я использовал;
С этим, как упомянул пользователь Воробей :
Откройте![введите описание изображения здесь](https://i.stack.imgur.com/2UaCf.png)
Databases
> и выберите Таблицы ,затем нажмите клавишу F7. Вы должны увидеть
row count
как:
SSMS здесь подключен к базам данных Azure
источник
Мы использовали разбиение таблиц и имели некоторые проблемы с запросами, представленными выше, из-за дублирования записей.
Для тех, кому это необходимо, вы можете найти под запросом SQL Server 2014 при создании отчета «Использование диска по таблице». Я предполагаю, что это также работает с предыдущими версиями SQL Server.
Работает как часы.
источник
источник
Небольшое изменение в ответе Mar_c , так как я возвращался на эту страницу так часто, по заказу первой строки большинства:
источник
Это даст вам размеры и количество записей для каждой таблицы.
источник
{ }
) на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис!Для получения всех размеров таблицы в одной базе данных вы можете использовать этот запрос:
И вы можете изменить его, чтобы вставить все результаты в временную таблицу и после этого выбрать из временной таблицы.
источник
Из командной строки с использованием OSQL :
источник
Вот способ быстро получить размеры всех таблиц с помощью следующих шагов:
Напишите данные команды T-SQL, чтобы получить список всех таблиц базы данных:
Теперь скопируйте список таблиц базы данных и скопируйте его в новое окно анализатора запросов.
В анализаторе запросов SQL выберите из верхней панели инструментов параметр « Результаты в файл» ( Ctrl+ Shift+ F).
Теперь, наконец, нажмите кнопку « Выполнить» , отмеченную красным цветом на панели инструментов .
Размер базы данных всех таблиц теперь хранится в файле на вашем компьютере.
источник
Я добавил еще несколько столбцов поверх ответа marc_s:
источник
Мой пост имеет отношение только к SQL Server 2000 и был протестирован для работы в моей среде.
Этот код обращается ко всем возможным базам данных одного экземпляра , а не только к одной.
Я использую две временные таблицы, чтобы помочь собрать соответствующие данные, а затем вывести результаты в одну «живую» таблицу.
Возвращаемые данные: DatabaseName, DatabaseTableName, Rows (в таблице), данные (размер таблицы в килобайтах может показаться), входные данные (я считаю, что это полезно знать, когда я последний раз запускал скрипт).
Недостатком этого кода является то, что поле «data» не хранится как int (символы «KB» хранятся в этом поле), и это будет полезно (но не обязательно) для сортировки.
Надеюсь, этот код поможет кому-то и сэкономит время!
Если вам нужно знать, таблица rsp_DatabaseTableSizes была создана с помощью:
источник
Как простое расширение для ответа marc_s (который был принят), он настроен так, чтобы возвращать количество столбцов и разрешать фильтрацию:
источник
Обращаясь к ответу @Mark выше, добавил @ updateusage = 'true', чтобы принудительно установить статистику последних размеров ( https://msdn.microsoft.com/en-us/library/ms188776.aspx ):
источник
Вот пример запроса для получения таблиц размером более 1 ГБ в порядке убывания размера.
источник