Sql-Server-2014

表分區後的主文件 - SQL Server 2014

  • January 23, 2018

我有一個沒有聚集索引的 230GB 數據庫,我試圖在 460GB 空間的硬碟驅動器上將其劃分為 25 個文件以提高效率。我已經創建了partition functionand partition scheme,並且我已經執行了命令。在分區過程中,25 個文件也增長到大約 230GB,而主文件沒有縮小,導致驅動器空間不足。雖然查詢完成了,但我留下了兩個錯誤。

  1. 由於沒有空間,事務日誌消失了ACTIVE_TRANSACTION
  2. 由於磁碟空間不足,無法為數據庫分配新頁面。

我試圖弄清楚是否:

  • 分區成功,這是一個索引問題。
  • 主節點仍在佔用全部 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

缺少事務日誌存在問題。如果沒有,它要去哪裡?

如果您的數據庫線上(如您所述,您可以查詢數據庫)您的事務日誌文件不會失去。

引用自:https://dba.stackexchange.com/questions/195968