我知道事务日志/ 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)
答案 0 :(得分:3)
你可以使用
EXEC sp_spaceused
但请记住,它返回的database_size包括数据和日志..
的更多信息答案 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]