Sql-Server-2014
表分區後的主文件 - SQL Server 2014
我有一個沒有聚集索引的 230GB 數據庫,我試圖在 460GB 空間的硬碟驅動器上將其劃分為 25 個文件以提高效率。我已經創建了
partition function
andpartition scheme
,並且我已經執行了命令。在分區過程中,25 個文件也增長到大約 230GB,而主文件沒有縮小,導致驅動器空間不足。雖然查詢完成了,但我留下了兩個錯誤。
- 由於沒有空間,事務日誌消失了
ACTIVE_TRANSACTION
- 由於磁碟空間不足,無法為數據庫分配新頁面。
我試圖弄清楚是否:
- 分區成功,這是一個索引問題。
- 主節點仍在佔用全部 230GB 空間,或者它只是分配的空間,顯示在我的驅動器上已使用。如果是這樣,我可以安全地縮小它而不會產生碎片嗎?
- 缺少事務日誌存在問題。如果沒有,它要去哪裡?
我已經能夠對數據庫執行查詢,所以表面上看起來還不錯。但是,我找不到有關上述問題的更多資訊。理論上,如果沒有事務日誌,SQL 就無法執行,所以我不知道如何進行。
我只有一個包含 130 列的表 Europe_Amad。沒有設置主鍵。
我的分區腳本如下:
USE [FTC] GO BEGIN TRANSACTION CREATE PARTITION FUNCTION [FTC_to_NACE](nvarchar(255)) AS RANGE RIGHT FOR VALUES (N'3500', N'3600', N'4100', N'4500', N'4800', N'5500', N'5800', N'6400', N'6800', N'6900', N'7700', N'8400', N'8500', N'8600', N'9000', N'9400', N'9700', N'9900') CREATE PARTITION SCHEME [FTC_PS1] AS PARTITION [FTC_to_NACE] TO ([FTCC], [FTCD], [FTCE], [FTCF], [FTCG], [FTCH], [FTCI], [FTCJ], [FTCK], [FTCL], [FTCM], [FTCN], [FTCO], [FTCP], [FTCQ], [FTCR], [FTCS], [FTCT], [FTCU]) SET ANSI_PADDING ON CREATE CLUSTERED INDEX [ClusteredIndex_on_FTC_PS1_636522495640236401] ON [dbo].[Europe_Amad] ([NACE_PRIM_CODE])WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [FTC_PS1]([NACE_PRIM_CODE]) DROP INDEX [ClusteredIndex_on_FTC_PS1_636522495640236401] ON [dbo].[Europe_Amad] COMMIT TRANSACTION
這可能不是一個完整的答案,但我不能將所有這些都放在評論部分。使用更多資訊編輯問題後,如果需要,我將編輯答案。
我確定您沒有收到您在問題中提到的確切錯誤消息。
Transaction log disappeared since there was no room due to ACTIVE_TRANSACTION
–您的意思是因為日誌文件空間不足,您的事務無法完成嗎?分區成功,這是一個索引問題。
使用以下查詢來查找有關您的分區的詳細資訊。
SELECT OBJECT_NAME(SI.object_id) AS PartitionedTable , DS.name AS PartitionSchemeName , PF.name AS PartitionFunction , P.partition_number AS PartitionNumber , P.rows AS PartitionRows , FG.name AS FileGroupName FROM sys.partitions AS P JOIN sys.indexes AS SI ON P.object_id = SI.object_id AND P.index_id = SI.index_id JOIN sys.data_spaces AS DS ON DS.data_space_id = SI.data_space_id JOIN sys.partition_schemes AS PS ON PS.data_space_id = SI.data_space_id JOIN sys.partition_functions AS PF ON PF.function_id = PS.function_id JOIN sys.destination_data_spaces AS DDS ON DDS.partition_scheme_id = SI.data_space_id AND DDS.destination_id = P.partition_number JOIN sys.filegroups AS FG ON DDS.data_space_id = FG.data_space_id WHERE DS.type = 'PS' AND OBJECTPROPERTYEX(SI.object_id, 'BaseType') = 'U' AND SI.type IN(0,1) ORDER BY PartitionedTable, partitionnumber
主節點仍在佔用全部 230GB 空間,或者它只是分配的空間,顯示在我的驅動器上已使用。如果是這樣,我可以安全地縮小它而不會產生碎片嗎?
執行以下查詢以了解有多少 230GB 正在使用/空閒。
SELECT NAME = LEFT(a.NAME, 64) , a.FILEID , [FILE_SIZE_MB] = CONVERT(DECIMAL(12, 2), ROUND(a.size / 128.000, 2)) , [SPACE_USED_MB] = CONVERT(DECIMAL(12, 2), ROUND(FILEPROPERTY(a.name, 'SpaceUsed') / 128.000, 2)) , [FREE_SPACE_MB] = CONVERT(DECIMAL(12, 2), ROUND(( a.size - FILEPROPERTY(a.name, 'SpaceUsed') ) / 128.000, 2)) , [PERCENT_FREE] = CONVERT(DECIMAL(12, 2), ( CONVERT(DECIMAL(12, 2), ROUND(( a.size - FILEPROPERTY(a.name, 'SpaceUsed') ) / 128.000, 2)) * 100 ) / CONVERT(DECIMAL(12, 2), ROUND(a.size / 128.000, 2))) , FILENAME = LEFT(a.FILENAME, 66) FROM dbo.sysfiles a
缺少事務日誌存在問題。如果沒有,它要去哪裡?
如果您的數據庫線上(如您所述,您可以查詢數據庫)您的事務日誌文件不會失去。