Sql сколько памяти занимает таблица

Обновлено: 03.07.2024

Чтобы узнать сколько места занимает таблица на диске верно ли использовать sp_spaceused @objname = 'TableName' ?

У меня такой вопрос. у меня есть таблица

sp_spaceused по ней мне выдает:

Я поменяла [datetime] на [smalldatetime] для полей [Performance_Start_TS], [Performance_End_TS].

после этого по sp_spaceused получаю:

Т.е. поле data как-то значительно увеличилось :(

Подскажите почему? Или я что-то недоделала или не там смотрю?

как меняли поле?

что покажет это

как меняли поле?

Поля меняла так

У меня 3 индекса.

Не мне весь список нинада:)
Мне непонятно, почему по идее размер таблицы должен был уменьшится, а он стал больше.

Было:
2 поля datetime - по 8 байт каждое

Posted via ActualForum NNTP Server 1.4

Делала. хм. Я запустила процесс, который (не успела пока это безобразие переписать) по идее должен был дофига из перформансов удалить, а потом столько же дофига вставить :(

Щас я заново восстановлю бэкап и все посмотрю еще раз как следует, а так же заполненность кластерного индекса до и после.

в общем - перестройте кластерный индекс и всё будет ок
не забудьте после его перестройки и некластерные пересоздать

- Avg. Bytes Free per Page. 3711.0
- Avg. Page Density (full). 54.15%

Угу.
У меня ведь тип данных сменился с бОльшего на меньший, конечно "дырок появилось".
Но почему таблица разрослась?

- Avg. Bytes Free per Page. 3711.0
- Avg. Page Density (full). 54.15%

Угу.
У меня ведь тип данных сменился с бОльшего на меньший, конечно "дырок появилось".
Но почему таблица разрослась?

Нипонятно.
Если у меня есть
- 1 страница, заполненная на 80% - размер 8Кб
- 1 страница, заполненная на 50% - размер все равно 8Кб

Нипонятно.
Если у меня есть
- 1 страница, заполненная на 80% - размер 8Кб
- 1 страница, заполненная на 50% - размер все равно 8Кб

Мысль понятна, спасибо. Однако возникает сразу другой вопрос.

Допустим, есть 2 страницы, на каждой по 3 записи.
Я изменяю тип данных в таблице и у меня появляется 3 страницы: на каждой по 2 записи.

Мысль понятна, спасибо. Однако возникает сразу другой вопрос.

Допустим, есть 2 страницы, на каждой по 3 записи.
Я изменяю тип данных в таблице и у меня появляется 3 страницы: на каждой по 2 записи.

В этой статье приведены максимальные размеры и количество для разных объектов, определяемых в SQL Server версии 2016 и выше.

В дополнение к сведениям, приведенным в этой статье, вы можете ознакомиться с информацией по следующим ссылкам.

Объекты Компонент Database Engine

Максимальные размеры и количество различных объектов, определяемых в базах данных SQL Server или ссылающихся на них Transact-SQL инструкциях.

Можно определить ключ, использующий столбцы переменной длины, максимальная длина которых превышает лимит. При этом совокупные размеры данных в этих столбцах ни в коем случае не могут превышать лимит.

Размер ключа для хэш-индекса не ограничивается.

Для индексов в таблицах, оптимизированных для памяти, понятие включенных столбцов не используется, поскольку все индексы по определению охватывают все столбцы.

25 экземпляров отказоустойчивого кластера при использовании общих дисков кластера в качестве хранилища.

Объекты служебной программы SQL Server

Максимальные размеры и количество для различных объектов, которые были проверены в служебной программе SQL Server .

SQL Server Объект программы Максимальный размер или количество SQL Server (64-разрядная версия)
Компьютеры (физические или виртуальные машины) в расчете на одну программу SQL Server 100
Экземпляров SQL Server на компьютер 5
Общее число экземпляров SQL Server на одну служебную программу SQL Server 200 *
Пользовательских баз данных на экземпляр SQL Server, включая приложения на уровне данных 50
Общее число пользовательских баз данных на одну служебную программу SQL Server 1000
Файловых групп на одну базу данных 1
Файлов данных на одну файловую группу 1
Файлов журналов на одну базу данных 1
Томов на компьютер 3

* Максимальное число управляемых экземпляров SQL Server, поддерживаемых служебной программой SQL Server, может меняться в зависимости от конфигурации оборудования сервера. Дополнительные сведения о начале работы см. в разделе Функции и задачи служебной программы SQL Server. SQL Server доступна не во всех выпусках SQL Server. Список функций, поддерживаемых в выпусках SQL Server, см. в разделах Функции, поддерживаемые выпусками SQL Server 2019, Функции, поддерживаемые выпусками SQL Server 2017 и Функции, поддерживаемые выпусками SQL Server 2016.

SQL Server Объекты приложений уровня данных

Максимальные размеры и количество различных объектов, которые были протестированы в приложениях уровня данных SQL Server .

SQL Server Объект приложения уровня данных Максимальный размер или количество SQL Server (64-разрядная версия)
Баз данных на DAC 1
Объектов на приложение уровня данных * Ограничено числом объектов в базе данных или доступной памятью.

* Типы объектов, включенные в ограничения, — пользователи, таблицы, представления, хранимые процедуры, определяемые пользователем функции, определяемые пользователем типы данных, роли баз данных, схемы и определяемые пользователем табличные типы.

Объекты репликации

Максимальные размеры и количества для различных объектов, определяемых в компонентах репликации SQL Server .

SQL Server Объект Replication Максимальные размеры и количества для SQL Server (64-разрядная версия)
Статей (публикация слиянием) 2048
Статей (моментальный снимок или публикация транзакций) 32 767
Столбцов в таблице * (публикация слиянием) 246
Столбцов в таблице ** (моментальный снимок или публикация транзакций SQL Server) 1000
Столбцов в таблице ** (моментальный снимок или публикация транзакций Oracle) 995
Байтов на столбец, используемый в фильтре строк (публикация слиянием) 1024
Байтов на столбец, используемый в фильтре строк (моментальный снимок или публикация транзакций) 8000

* Если для обнаружения конфликтов применяется трассировка на уровне строк (по умолчанию), базовая таблица может содержать не более 1024 столбцов, однако столбцы из статьи должны быть отфильтрованы, чтобы было опубликовано не более 246 столбцов. Если применяется трассировка на уровне столбцов, базовая таблица может содержать не более 246 столбцов.

** Базовая таблица может включать максимальное количество столбцов, разрешенное в базе данных публикации (1024 для SQL Server), но столбцы должны быть отфильтрованы из статьи, если они превышают максимальное количество, заданное для данного типа публикации.

Рост размера информационной базы является закономерным явлением ее эксплуатации, но, в некоторых случаях, данный процесс свидетельствует об ошибках в архитектуре системы. Среда SQL Server Management Studio предоставляет возможность легко получить информацию о занимаемом БД месте на диске, в том числе: сводную информацию; в разрезе таблиц базы данных; индексов таблиц. Анализ необычных (для системы в целом) данных может выявить ошибки архитектуры и/или ошибки выполнения регламентных операций. Способы получить такую информацию о размере данных на диске будут рассмотрены в данной статье.

SQL Server Management Studio предоставляет минимальный необходимый набор стандартных отчетов для получения информации о размере базы данных/ее файлов/таблиц/индексов в режиме пользовательского интерфейса.

Отчет содержит общие сведения об использовании места на диске базой данных.

В отчете представлена информация следующего рода:

  • Общий объем, занятый на диске (Total space reserved)
  • Место, занятое файлами данных (Data files space reserved)
  • Место, занятое журналом транзакций (Transaction log space reserved)
  • Отражает графически процент пространств в составе файлов данных: индексов (index), данных (data), не выделенного (unallocated) и не используемого (unused)
  • Отражает графически процент примененного (used) и неиспользуемого (unused) пространства в составе журнала транзакций
  • Выводит записи событий автоматического увеличения (autogrow) и/или сжатия (autoshrink) для базы данных
  • Выводит информацию о месте на диске, используемом файлами данных

В отчете представлена информация:

  • Количество записей в таблице базы данных (Records)
  • Размер зарезервированного пространства на диске (Reserved)
  • Размер данных на диске (Data)
  • Общий размер индексов таблицы на диске (Indexes)
  • Размер не используемого пространства (Unused)

Отчет содержит подробные данные об использовании места на диске индексом и секциями, расположенными в базе данных.

В отчете представлена информация:

Хранимые процедуры

Данные о размере базы данных и таблиц также можно получить с помощью хранимой процедуры sp_spaceused Management Studio.

В процедуре могут быть использованы 2 не обязательных параметра:

Примеры запросов по всей базе данных и по конкретной таблице приведены ниже:

Результат работы хранимой процедуры sp_spaceused

Результат работы хранимой процедуры sp_spaceused

Динамические административные представления

Помимо вышеприведенных способов, для получения необходимой информации можно обратиться к динамическим административным представлениям. На самом деле, как отчеты, так и хранимая процедура sp_spaceused сама их и использует. Способы получения информации с помощью динамических административных представлений будут рассмотрены в следующих статьях.

Примеры диагностируемых ошибок

я унаследовал довольно большую базу данных SQL Server. Кажется, он занимает больше места, чем я ожидал, учитывая содержащиеся в нем данные.

есть ли простой способ определить, сколько места на диске занимает каждая таблица?

Если вы используете среда SQL Server Management Studio (SSMS), вместо запуска запроса (который в моем случае вернул дубликаты строк) вы можете запустить стандартный отчет.

  1. щелкните правой кнопкой мыши по базе данных
  2. перейти к Отчеты > Стандартные Отчеты > Использование Диска По Таблице

sp_spaceused может получить информацию о дисковом пространстве, используемом таблицей, индексированным представлением или всей базой данных.

об этом сообщает информацию об использовании диска для таблицы ContactInfo.

чтобы использовать это для всех таблиц сразу:

вы также можете получить использование диска из функции стандартных отчетов SQL Server, щелкнув правой кнопкой мыши. Чтобы перейти к этому отчету, перейдите из объекта server в объект Проводник, перейдите к объекту базы данных и щелкните правой кнопкой мыши любую базу данных. В появившемся меню выберите отчеты, затем Стандартные отчеты, а затем "использование диска по разделам: [DatabaseName]".

после некоторого поиска я не смог найти простой способ получить информацию обо всех таблицах. Существует удобная хранимая процедура с именем sp_spaceused, которая возвращает все пространство, используемое базой данных. Если указано имя таблицы, оно возвращает пространство, используемое этой таблицей. Однако результаты, возвращаемые хранимой процедурой, не сортируются, поскольку столбцы являются символьными значениями.

следующий скрипт генерирует информацию, которую я ищу.

для всех таблиц ,использовать..(добавляя из комментариев Павла)

вот еще один метод: использование среда SQL Server Management Studio, в Обозреватель Объектов, перейдите в свою базу данных и выберите таблицы

enter image description here

открыть Подробности Обозревателя Объектов (либо клавишей F7 и будет " Вид "-> "Подробности Обозревателя Объектов"). На странице сведений обозревателя объектов щелкните правой кнопкой мыши заголовок столбца и включите столбцы, которые вы хотите хотелось бы посмотреть на странице. Вы также можете сортировать данные по любому столбцу.

enter image description here

вышеуказанные запросы хороши для поиска объема пространства, используемого таблицей (включая индексы), но если вы хотите сравнить, сколько пространства используется индексами в таблице, используйте этот запрос:

Если вам нужно вычислить точно такие же числа, которые находятся на странице "свойства таблицы - хранилище" в SSMS, вам нужно подсчитать их тем же методом, что и в SSMS (работает для sql server 2005 и выше . а также правильно работает для таблиц с полями LOB-потому что просто подсчета "used_pages" недостаточно, чтобы показать точный размер индекса):

мы используем секционирование таблиц и имели некоторые проблемы с запросами, приведенными выше, из-за повторяющихся записей.

для тех, кому это нужно, вы можете найти ниже запрос, выполняемый SQL Server 2014 при создании отчета" использование диска по таблице". Я предполагаю, что он также работает с предыдущими версиями SQL Server.

это работает как шарм.

небольшое изменение в ответе Mar_c, так как я так часто возвращался к этой странице, упорядоченной первым большинством строк:

Это даст вам размеры и количество записей для каждой таблицы.

для получения всех размер таблицы в одной базе данных, вы можете использовать этот запрос :

и вы можете изменить его, чтобы вставить весь результат в таблицу temp и после этого выбрать из таблицы temp.

Я добавил еще несколько столбцов поверх ответа marc_s:

вот способ быстро получить размеры всех таблиц со следующими шагами:

написать данную команды T-SQL чтобы перечислить все таблицы базы данных:

теперь скопируйте список таблиц базы данных и скопируйте его в новое окно анализатора запросов

в SQL анализатор запросов, выберите из верхней панели инструментов опцию результаты в файл ( Ctrl + Shift + F ).

теперь, наконец, ударил выполнить кнопка красная отмечена сверху бар.

Базы Данных размер всех таблиц теперь хранится в файле на вашем компьютере.

Enter image description here

расширение до @xav ответ который обрабатывал разделы таблицы, чтобы получить размер в МБ и ГБ. Протестировано на SQL Server 2008/2012 (прокомментировал строку где is_memory_optimized = 1 )

мой пост имеет отношение только к SQL Server 2000 и был протестирован для работы в моей среде.

этот код обращается к все возможные базы данных одного экземпляра, а не только одна база данных.

Я использую две временные таблицы, чтобы помочь собрать соответствующие данные, а затем сбросить результаты в одну "живую" таблицу.

возвращаемые данные: DatabaseName, DatabaseTableName, строки (в таблице), данные (размер таблицы в КБ казалось бы), запись данные (я нахожу это полезным, чтобы знать, когда я последний раз запускал скрипт).

падение этого кода-поле "данные" не хранится как int (символы " KB " хранятся в этом поле), и это было бы полезно (но не совсем необходимо) для сортировки.

надеюсь этот код поможет кому-то и экономит их время!

в случае, если вам нужно знать,rsp_DatabaseTableSizes таблица была создана с помощью:

из командной строки с помощью OSQL:

как простое расширение ответа marc_s (тот, который был принят), это настраивается для возврата количества столбцов и позволяет фильтровать:

Читайте также: