Ant*_*lev 46 filegroup sql-server-2008
我们的数据库目前为64 Gb,我们的一个应用程序开始失败,并出现以下错误:
System.Data.SqlClient.SqlException:无法为'cnv.LoggedUnpreparedSpos'.'PK_LoggedUnpreparedSpos'数据库中的对象分配空间,'travelgateway'因为'PRIMARY'文件组已满.通过删除不需要的文件,删除文件组中的对象,向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间.
我仔细检查了一切:在一个单一的文件组的所有文件都允许有合理的增量(100 MB的数据文件,日志文件10%)为自动增长,超过100 GB的可用空间是可用于数据库,tempdb是设置为自动增长,其驱动器上有足够的可用硬盘空间.
为了解决问题,我将第二个文件添加到文件组,错误已经消失.但我对这整个局势感到不安.
这里的问题在哪里,伙计们?
San*_*ddy 19
安东,
作为最佳实践,不应在主文件组中创建用户对象.有带宽时,创建一个新文件组并移动用户对象并将系统对象保留为主要对象.
以下查询将帮助您识别每个文件中使用的空间以及行数最多的顶级表以及是否有任何堆.这是调查这个问题的一个很好的起点.
SELECT
ds.name as filegroupname
, df.name AS 'FileName'
, physical_name AS 'PhysicalName'
, size/128 AS 'TotalSizeinMB'
, size/128.0 - CAST(FILEPROPERTY(df.name, 'SpaceUsed') AS int)/128.0 AS 'AvailableSpaceInMB'
, CAST(FILEPROPERTY(df.name, 'SpaceUsed') AS int)/128.0 AS 'ActualSpaceUsedInMB'
, (CAST(FILEPROPERTY(df.name, 'SpaceUsed') AS int)/128.0)/(size/128)*100. as '%SpaceUsed'
FROM sys.database_files df LEFT OUTER JOIN sys.data_spaces ds
ON df.data_space_id = ds.data_space_id;
EXEC xp_fixeddrives
select t.name as TableName,
i.name as IndexName,
p.rows as Rows
from sys.filegroups fg (nolock) join sys.database_files df (nolock)
on fg.data_space_id = df.data_space_id join sys.indexes i (nolock)
on df.data_space_id = i.data_space_id join sys.tables t (nolock)
on i.object_id = t.object_id join sys.partitions p (nolock)
on t.object_id = p.object_id and i.index_id = p.index_id
where fg.name = 'PRIMARY' and t.type = 'U'
order by rows desc
select t.name as TableName,
i.name as IndexName,
p.rows as Rows
from sys.filegroups fg (nolock) join sys.database_files df (nolock)
on fg.data_space_id = df.data_space_id join sys.indexes i (nolock)
on df.data_space_id = i.data_space_id join sys.tables t (nolock)
on i.object_id = t.object_id join sys.partitions p (nolock)
on t.object_id = p.object_id and i.index_id = p.index_id
where fg.name = 'PRIMARY' and t.type = 'U' and i.index_id = 0
order by rows desc
Run Code Online (Sandbox Code Playgroud)
Hug*_*ing 18
遇到同样的问题,起初碎片整理似乎有效.但这只是一段时间.结果是客户正在使用的服务器,正在运行Express version并且具有约的许可限制10gb.
因此即使大小设置为"无限制",也不是.