我们不太了解您的硬盘设置。
http://blog.sqlauthority.com/2009/05/31/sql-server-create-multiple-filegroup-for-single-database/
http://msdn.microsoft.com/en-us/library/bb522469.aspx
第一个链接会解释这个概念。
第二个链接将显示语法。
你想看看的3项分别是:
[ , SIZE = size [ KB | MB | GB | TB ] ]
[ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ]
[ , FILEGROWTH = growth_increment [ KB | MB | GB | TB| % ] ]
为什么?
第一个是初始大小。 第二个是最大尺寸。如果设置了这一点,即使你的硬盘可能有空间,数据库也将停止增长。 第三个问题是“如果我没有违反最大规则,我将扩展多大”。
现在。您可以将MAXSIZE设置为UNLIMITED。
然而,硬盘驱动器填满后,您将开始发生错误。
所以你得玩dba,并选择哪个选项最好。
就个人而言,我会将MAXSIZE设置为小于驱动器上的可用空间,因此您不会碰到边缘点。
ALSO: 您可以创建不同的文件组,并将不同的表放在不同的文件组上。 如果您知道一张桌子很大,但另一张桌子很小,这很方便。
因此...检查您是否已经设置了MAXSIZE设置。
然后,你必须玩你的表和硬盘和文件组和表的轮盘赌。
您还可以将您的日志文件放在另一个硬盘上作为空间问题的另一个选项。
这是一个很好的创建文件组的小示例,然后将表移动到该新文件组。
http://www.daveturpin.com/2010/09/move-tables-to-new-filegroup/
下面是一个脚本,我有创建使用SQLCMD模式的数据库。 注意目录必须“预先存在”(在服务器上,而不是本地机器,如果你实际上并不坐在sql服务器上)。
:Setvar DBName MyFirstDatabase01
:Setvar DataFilesBaseDirectory "C:\WUTemp\Some Folder\"
:Setvar LogFilesBaseDirectory "C:\WUTemp\Some Folder\"
:Setvar DatabasePrimaryDataFileStartSizeMB 9
:Setvar DatabasePrimaryDataFileGrowthMB 8
:Setvar DatabasePrimaryLogFileStartSizeMB 7
:Setvar DatabasePrimaryLogFileGrowthMB 6
Use [master];
GO
if exists (select * from sysdatabases where name='$(DBName)')
BEGIN
DROP DATABASE [$(DBName)];
END
GO
--Create Database $(DBName)
--G--O
DECLARE @device_directory_data NVARCHAR(520)
DECLARE @device_directory_log NVARCHAR(520)
--SELECT @device_directory_data = SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1) FROM master.dbo.sysaltfiles WHERE dbid = 1 AND fileid = 1
--SELECT @device_directory_log = SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1) FROM master.dbo.sysaltfiles WHERE dbid = 1 AND fileid = 1
select @device_directory_data = '$(DataFilesBaseDirectory)'
select @device_directory_log = '$(LogFilesBaseDirectory)'
print @device_directory_data
print @device_directory_log
EXECUTE (N'CREATE DATABASE $(DBName)
ON PRIMARY (NAME = N''$(DBName)'', FILENAME = N''' + @device_directory_data + N'$(DBName).mdf'', SIZE = $(DatabasePrimaryDataFileStartSizeMB) MB, FILEGROWTH = $(DatabasePrimaryDataFileGrowthMB)MB)
LOG ON (NAME = N''$(DBName)_log'', FILENAME = N''' + @device_directory_log + N'$(DBName).ldf'', SIZE = $(DatabasePrimaryLogFileStartSizeMB) MB, FILEGROWTH = $(DatabasePrimaryLogFileGrowthMB)MB)')
DECLARE @logsize char(1)
SELECT @logsize = CASE WHEN convert(varchar, Serverproperty('ProductVersion')) LIKE '9%'
--THEN '10'
--ELSE '5'
THEN '13'
ELSE '14'
END
EXECUTE(N'ALTER DATABASE $(DBName)
ADD LOG FILE (NAME = N''$(DBName)_log2'',
FILENAME = N''' + @device_directory_log + N'$(DBName)log2.ldf'', SIZE = ' + @logsize + ' MB)')
-- Make the database case sensitive to clean up the development effort
-- EXECUTE(N'ALTER DATABASE $(DBName) COLLATE SQL_Latin1_General_CP1_CS_AS')
exec sp_dboption '$(DBName)','trunc. log on chkpt.','true'
exec sp_dboption '$(DBName)','select into/bulkcopy','true'
GO
GO
你有没有考虑使用NoSQL的解决方案一样的MongoDB或DynamoDB? – 2013-02-20 13:50:52
15000x2一个月对我来说听起来不像“大量数据”。为什么空间如此受限?不会购买新的硬盘比付出更多的费用便宜得多? – spender 2013-02-20 13:50:58
每月30000行听起来不像“大量数据”。为什么存储空间成为问题? – Kai 2013-02-20 13:52:10