Как я могу узнать, что файл MDF в SQL Server переполнен или может расти? - PullRequest
2 голосов
/ 06 января 2010

Я знаю, что файл журнала транзакций / ldf заполняется и увеличивается, и что я вижу, насколько он заполнен, запустив:

DBCC SQLPERF(logspace)

Существует ли соответствующая команда для проверки состояния файла данных / mdf?


Почему я заинтересован:

Я устраняю неполадки в простом приложении .NET, которое использует SqlBulkCopy для импорта данных. Обычно это работает нормально, но иногда происходит сбой приложения из-за тайм-аута / SqlException (см. Ниже). Я увеличил свойство BulkCopyTimeout, и это не решило проблему.

Просматривая журналы SQL Server, я вижу такие записи:

Автоматический рост файла 'MyDatabase' в база данных MyDatabase была отменена пользователь или тайм-аут после 29812 миллисекунды. Используйте ALTER DATABASE для установить меньшее значение FILEGROWTH для этот файл или явно установить новый размер файла.

Это заставляет меня поверить, что мой файл данных должен увеличиваться (10% -ный рост == несколько ГБ) и что моя массовая копия терпит неудачу, пока она ожидает увеличения файла MDF.

Исключение .NET:

Необработанное исключение: System.Data.SqlClient.SqlException: Тайм-аут истек. Т период истек до завершения операции или сервер не отвечать на запросы. Заявление было прекращено. в System.Data.SqlClient.SqlConnection.OnError (SqlException исключение, Boolea n breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObj ect stateObj) в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand см dHandler, SqlDataReader dataStream, BulkCopySimpleResultSet НаверхКопияHandler, Tds ParserStateObject stateObj) в System.Data.SqlClient.SqlBulkCopy.WriteToServerInternal () в System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServer (Int32 ColumnCount ) в System.Data.SqlClient.SqlBulkCopy.WriteToServer (DataTable таблица, DataRowSt съел rowState)

Ответы [ 3 ]

3 голосов
/ 06 января 2010
select sum (total_pages) from sys.allocation_units;

sys.allocation_units отслеживает каждую выделенную страницу в базе данных. Если вы хотите быть более конкретным, вам придется разделить единицы выделения на пространство данных (sys.data_spaces), чтобы определить , в какой файловой группе не хватает места ,

3 голосов
/ 06 января 2010

Вы можете использовать EXEC sp_spaceused

но имейте в виду, что возвращаемый им размер базы данных включает в себя как данные, так и журналы.

больше информации на http://msdn.microsoft.com/en-us/library/ms188776.aspx

0 голосов
/ 08 апреля 2014

Это даст файл, размер, объем используемого хранилища. и имеющаяся сумма;

SELECT    
[name] AS [File Name],    
physical_name AS [Physical Name],    
[Total Size_Mb] = ceiling([size]/128), 
[Space used_Mb] =    CAST(FILEPROPERTY([name], 'SpaceUsed') as int) /128,
[Available Space_Mb] = (([size]/128) - CAST(FILEPROPERTY([name], 'SpaceUsed') as int) /128) ,file_id
FROM sys.database_files   
ORDER BY [file_id]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...