whe*_*ike 3 schema sql-server sql-server-2008-r2
仅具有架构的空白数据库很大是否正常?或者有没有办法减少初始数据库的大小?
Aar*_*and 11
如果在没有指定文件大小的情况下创建数据库,则大小将从模型映射。您可以通过运行来查看这是什么:
EXEC model.sys.sp_helpfile;
-- on my system, size of primary data file -> 3264 KB
Run Code Online (Sandbox Code Playgroud)
现在,如果我只使用 来创建一个数据库CREATE DATABASE,我就会得到这些文件的精确副本。
CREATE DATABASE [floob1];
GO
EXEC floob1.sys.sp_helpfile;
-- size of primary data file -> 3264 KB
Run Code Online (Sandbox Code Playgroud)
事后我可以尝试缩小它,它会缩小一些,但不会完全缩小。
DBCC SHRINKFILE(floob1, 1);
GO
EXEC floob1.sys.sp_helpfile;
-- size of primary data file -> 2368 KB
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做,但也许你应该首先找出你的model数据库中有什么以及为什么它是 20 MB。也许您可以通过删除对象和/或缩小该文件来解决此问题。如果缩小文件没有减小大小,则检查对象:
SELECT s.name, t.name, rows = SUM(p.rows)
FROM model.sys.partitions AS p
INNER JOIN model.sys.objects AS t
ON p.[object_id] = t.[object_id]
INNER JOIN model.sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE p.index_id IN (0,1)
ORDER BY rows DESC;
SELECT s.name, o.name, codesize = DATALENGTH(m.definition)
FROM sys.objects AS o
INNER JOIN sys.schemas AS s
ON o.[schema_id] = s.[schema_id]
INNER JOIN sys.sql_modules AS m
ON o.[object_id] = m.[object_id]
ORDER BY codesize DESC;
Run Code Online (Sandbox Code Playgroud)
对象可能是错误地在那里创建的(在这种情况下删除它们),或者有比它们应该多的行(在这种情况下修剪它们并重建)。
请注意,如果您尝试覆盖model并创建较小的数据库,则不能:
CREATE DATABASE [floob2]
ON (NAME = floob2_data,
FILENAME = 'C:\...wherever...\floob2.mdf',
SIZE = 1MB, FILEGROWTH = 2MB);
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
消息 1803,级别 16,状态 1,第 18 行
CREATE DATABASE 语句失败。主文件必须至少为 4 MB,以容纳模型数据库的副本。
我假设如果您尝试创建一个显式数据文件小于 20 MB 的数据库,您会遇到类似的错误,因为听起来您的model数据库大约为 20 MB。所以回到我之前的观点,您需要深入了解为什么model是 20 MB,然后解决这个问题。(请注意,我不知道您如何测量 20 MB - 据我所知,它可能是日志文件,因此您可能需要查看该文件。)
当然,如果空间是一个真正的问题,并且您将数千个数据库放在那里,假设它们永远不会增长,然后它们都开始增长,这将是一个问题。
| 归档时间: |
|
| 查看次数: |
445 次 |
| 最近记录: |