Как проверить, не превышаю ли я ограничение размера Express Edition?

10

Я запутался. AFAIK SQL Server 2005 Express имеет ограничение в 4 ГБ для размера базы данных . Однако у меня есть следующие результаты sp_spaceused:

каков фактический размер базы данных

  1. Как я могу проверить, превышает ли моя БД ограничение размера?
  2. Является ли нераспределенное пространство space leftдо тех пор, пока я не достигну предела?
  3. Сколько места у меня осталось?
  4. Есть ли index_sizeсчитать в пределе?
g00fy
источник
Вы можете проверить столбец backup_size в msdb.dbo.backupset.

Ответы:

6

Вот хороший сценарий, который я беззастенчиво разорвал отсюда :

use [Insert DB Name]

select
a.FILEID,
[FILE_SIZE_MB] = 
convert(decimal(12,2),round(a.size/128.000,2)),
[SPACE_USED_MB] =
convert(decimal(12,2),round(fileproperty(a.name, 'SpaceUsed')/128.000,2)),
[FREE_SPACE_MB] =
convert(decimal(12,2),round((a.size-fileproperty(a.name, 'SpaceUsed'))/128.000,2)) ,
NAME = left(a.NAME,15),
FILENAME = left(a.FILENAME,30)
from
dbo.sysfiles a

Это хорошо, потому что это даст вам свободное место в каждом файле БД (у вас может быть несколько файлов, и, возможно, кто-то настроит его для размещения некоторых объектов в каждом), а также свободный размер.

Например, у вас есть файл данных 4 ГБ, который имеет 3 ГБ свободного места. Может быть, у вас есть 1 MDF без большого количества данных, но NDF с большим количеством данных. Этот запрос сообщит вам свободный размер каждого файла и для какой БД этот файл выделен. Не забудьте добавить все «SPACE_USED_MB» для каждой БД, чтобы получить общий размер.

Удачи!

Редактировать: Удалена неподдерживаемая и глючная команда, которая, как мне показалось, могла бы оставить здесь для этого запроса. :(

Али Разеги
источник
PS, если вы собираетесь использовать старые представления обратной совместимости, вы можете немного упростить это с помощью sysaltfiles(это исключает необходимость заходить в каждую базу данных вообще).
Аарон Бертран
1
Спасибо Аарон за sysalt-файлы, я еще не изучал это! У sp_msforeachdb есть много болезненных проблем, но я рассчитывал на установку SQL Express, когда парень просто хочет выполнить запрос, чтобы увидеть, сколько у него свободного места, это нормально.
Али Разеги
За исключением случаев, когда он пропускает базы данных и не вызывает ошибку ...
Аарон Бертран
Да, но в этом случае, вы действительно думаете, что это будет проблемой, когда конечный пользователь просто захочет подсчитать размер БД? Я полагаю, что не следует публиковать его даже в тех случаях, когда конечный пользователь обязательно увидит, пропустил ли он ту БД, которую ищет, чтобы не усилить плохое поведение. Я просто удалю эту часть в этот момент, вы правы, нам не нужно, чтобы эта команда была добавлена ​​в другом месте.
Али Разеги
5

Размер базы данных - это размер файла. Посмотрите на фактический размер файла данных (журнал транзакций не учитывается). Да, показатели учитываются. Если вам не хватает места, рассмотрите возможность обновления до SQL 2012 Express, поскольку это увеличивает ограничение размера до 10 гигабайт.

mrdenny
источник
6
SQL Server 2008 R2 Express также имеет ограничение в 10 ГБ (только для полноты)
marc_s
1

Когда sp_spaceused показывает размер базы данных около 25 ГБ в вашем первом наборе результатов, который включает файл данных / индексы и журнал транзакций. Только фактические данные и индексы учитываются в пределах ограничений SQL Server Express, поэтому у вас есть около 3,3 ГБ данных (как во втором наборе результатов), а оставшиеся 22 ГБ будут журналом транзакций. Если вы запустите «sp_helpdb», это покажет реальную картину, поскольку она сообщает об использовании данных и использовании журнала транзакций в двух отдельных строках.

Ubercoder
источник