我們不太瞭解您的硬盤設置。
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