Як перевірити, чи потрапляю я в обмеження розміру Express Edition?


10

Я збентежений. AFAIK SQL Server 2005 Express має обмеження розміру даних у базі даних 4 Гб . Однак у мене є такі результати sp_spaceused:

який фактичний розмір бази даних

  1. Як я можу перевірити, чи досягає мій БД обмеження розміру?
  2. Нерозподілений простір space leftдо тих пір, поки я не потрапив на межу?
  3. Скільки місця мені залишилось?
  4. Чи index_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
Дякую Аарону за sysaltfiles, я ще не вдивлявся в нього! sp_msforeachdb має багато болісних проблем, але я зрозумів, що встановити SQL Express, де хлопець просто хоче виконати запит, щоб побачити, скільки вільного місця у нього є, це добре.
Алі Разегі

За винятком випадків, коли він пропускає бази даних і не викликає помилок ...
Аарон Бертран

Так, але в цьому випадку, чи справді ви думаєте, що це буде проблемою, коли кінцевий користувач просто хоче розраховувати розмір db? Я думаю, я не повинен розміщувати його навіть у тих випадках, коли кінцевий користувач абсолютно не побачить, чи пропустив він шукану БД, щоб вона не посилювала погану поведінку. Я просто видалю цю частину в цей момент, ви маєте рацію, нам не потрібна команда, приклеєна більше ніде.
Алі Разегі

5

Розмір бази даних - це розмір файлу. Подивіться на фактичний розмір файлу даних (журнал транзакцій не враховується). Так, індекси рахуються. Якщо у вас не вистачає місця, розгляньте оновлення до SQL 2012 Express, оскільки це збільшує обмеження розміру до 10 гігів.


6
SQL Server 2008 R2 Express також має обмеження 10 Гб (тільки для повноти)
marc_s

1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.