如何判断SQL Server MDF文件是否已满/可能需要增长?

时间:2010-01-05 22:59:41

标签: sql-server sql-server-2008

我知道事务日志/ ldf文件已填满并增长,我可以通过运行来查看它是多么充实:

DBCC SQLPERF(logspace)

是否有相应的命令来检查data / mdf文件的状态?


为什么我感兴趣:

我正在对使用SqlBulkCopy导入数据的简单.NET应用程序进行故障排除。通常情况下这很好但有时由于超时/ SqlException(包含在下面),应用程序失败了。我增加了BulkCopyTimeout属性,但没有解决问题。

查看SQL Server日志,我看到如下条目:

  

自动增长文件'MyDatabase'   数据库'MyDatabase'被取消了   用户或在29812之后超时   毫秒。使用ALTER DATABASE   为。设置较小的FILEGROWTH值   此文件或显式设置新文件   文件大小。

这使我相信我的数据文件需要增长(10%增长==几GB),并且我的批量副本在等待MDF文件增长时失败。

.NET异常:

  

未处理的例外情况:   System.Data.SqlClient.SqlException:   超时已过期。 t       在操作完成之前已经过了一段时间   服务器不是       响应。       该语句已终止。          在System.Data.SqlClient.SqlConnection.OnError(SqlException   例外,Boolea       n breakConnection)          在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObj)       等stateObj)          在System.Data.SqlClient.TdsParser.Run(RunBehavior   runBehavior,SqlCommand cm       dHandler,SqlDataReader dataStream,BulkCopySimpleResultSet   bulkCopyHandler,Tds       ParserStateObject stateObj)          在System.Data.SqlClient.SqlBulkCopy.WriteToServerInternal()          在System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServer(Int32   信息columnCount       )          在System.Data.SqlClient.SqlBulkCopy.WriteToServer(DataTable   table,DataRowSt       吃了rowState)

3 个答案:

答案 0 :(得分:3)

你可以使用 EXEC sp_spaceused

但请记住,它返回的database_size包括数据和日志..

http://msdn.microsoft.com/en-us/library/ms188776.aspx

的更多信息

答案 1 :(得分:3)

select sum (total_pages) from sys.allocation_units;

sys.allocation_units跟踪数据库中的每个已分配页面。如果您想要更具体,那么您将不得不将每个数据空间(sys.data_spaces)的分配单元分开,以便识别哪个文件组空间不足。

答案 2 :(得分:0)

这将给出文件,大小,使用的存储量。和可用金额;

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]