2009-05-14 5 views
6

Я хочу, чтобы узнать, сколько места осталось в моих файлах базы данных, чтобы я мог знать, когда увеличить пространство, чтобы он не делал этого, когда приложение работает.Лучший способ найти свободное пространство в SQL-серверах баз данных?

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

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

Я могу использовать Management Studio для этого вручную для баз данных 2005 года, но не для баз данных 2000 года.

+0

В чем проблема с тем, что сервер делает это, когда это «сложно»? – Stu

+0

Сервер sql в основном останавливается, пока файлы распространяются. Это потому, что писать информацию некуда. – GordyII

+0

Это был SQL 2000, возможно, более новая версия делает это лучше – GordyII

ответ

-1

Для меня сервер sql всегда автоматически выделял больше места, пока жесткий диск не был заполнен, поэтому просто запросите свободное место на жестком диске.

Какие настройки вы используете, чтобы увеличить «пространство» базы данных?

+3

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

+0

Запрос о свободном пространстве в файловой системе делает много предположений, особенно когда данные легко доступны с SQL-сервера. Если dba осведомлен о тенденциях производительности, сценарий роста может выполнять эту работу без влияния на perf (встроенная функция почти наверняка повлияет на перфоманс). – JGurtz

14

Попробуйте sp_spaceused:

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

Я считаю, что это было в SQL Server 2000, но я не могу это доказать. Он работает в 2005 и 2008 годах.

И вы можете заглянуть в него с помощью sp_helptext, если вы хотите связать его с какой-либо серверной логикой.

EDIT: расширение на моем комментарии ниже, и благодаря оригинальному вкладчику в http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82359, вот способ сломать использование напильника:

select 
     name 
    , filename 
    , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB 
    , convert(decimal(12,2),round(fileproperty(a.name,'SpaceUsed')/128.000,2)) as SpaceUsedMB 
    , convert(decimal(12,2),round((a.size-fileproperty(a.name,'SpaceUsed'))/128.000,2)) as FreeSpaceMB 
from dbo.sysfiles a 
+0

Есть ли что-то подобное, чтобы получить свободное пространство в файлах базы данных? – GordyII

+3

Данные, которые вы хотите, это dbo.sysfiles. Попробуйте утверждение в конце этой темы: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82359 –

0

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

Лучшая статья, которую я нашел - Managing Database Data Usage With Custom Space Alerts (требуется вход в SQLServerCentral), даже персонал службы поддержки может не иметь опыта работы с DBA.

Вы также можете использовать аналогичный артикул Monitor database file sizes with SQL Server Jobs.

также для ручной проверки я предпочитаю sp_SOS (можно загрузить с http://searchsqlserver.techtarget.com/tip/Find-size-of-SQL-Server-tables-and-other-objects-with-stored-procedure)

EXEC dbo.sp_SOS @OrderBy='T' 
0

Выполнить следующую команду, чтобы узнать, сколько свободного места в настоящее время в вашем SQL Server 2000:

DECLARE @command VARCHAR(5000) 
DECLARE @DBInfo TABLE 
(ServerName VARCHAR(100), 
DatabaseName VARCHAR(100), 
PhysicalFileName NVARCHAR(520), 
FileSizeMB DECIMAL(10,2), 
SpaceUsedMB DECIMAL(10,2), 
FreeSpaceMB DECIMAL(10,2), 
FreeSpacePct varchar(8) 
) 

SELECT @command = 'Use [' + '?' + '] SELECT 
@@servername as ServerName, 
' + '''' + '?' + '''' + ' AS DatabaseName , filename 
    , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB 
    , convert(decimal(12,2),round(fileproperty(a.name,'+''''+'SpaceUsed'+''''+')/128.000,2)) as SpaceUsedMB 
    , convert(decimal(12,2),round((a.size-fileproperty(a.name,'+''''+'SpaceUsed'+''''+'))/128.000,2)) as FreeSpaceMB, 
    CAST(100 * (CAST (((a.size/128.0 -CAST(FILEPROPERTY(a.name,' + '''' + 'SpaceUsed' + '''' + ') AS int)/128.0)/(a.size/128.0)) AS decimal(4,2))) AS varchar(8)) + ' + '''' + '%' + '''' + ' AS FreeSpacePct 
from dbo.sysfiles a' 

INSERT INTO @DBInfo 
EXEC sp_MSForEachDB @command 

SELECT * from @DBInfo 
Смежные вопросы