設定資料壓縮 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定資料壓縮

可以使用頁面或資料列壓縮來壓縮 Enterprise One 業務資料和控制項資料表中的資料表和索引。上的大多數 EnterpriseOne 工作負載在頁面壓縮 AWS 時展現最佳效能,但非常大型的工作負載 (未壓縮的 TB 數倍) 可能會在資料列壓縮時表現更好。頁面與資料列壓縮的詳細討論已超出本指南範圍。本節主要著重於頁面壓縮。

當您為一般 EnterpriseOne 工作負載啟用壓縮時,CPU 使用率的增加會很小,但對整體系統效能有顯著好處,這可以從下列方面進行衡量:

  • 較小的資料庫大小和儲存需求,因為資料是以壓縮格式儲存在磁碟上。

  • 較高的緩衝區快取命中率,因為緩衝區快取在壓縮時可以容納更多資料。

  • 所需的 Amazon EBS IOPS 和輸送量較低,因為每個 I/O 操作傳回的資料更多,而需要的操作更少,因為緩衝區快取更有效。

  • 備份速度更快,因為資料會在整個備份過程中保持壓縮。

可以按資料表或索引單獨啟用壓縮。也可以按資料表和索引選擇壓縮類型 (頁面或資料列)。不壓縮定期更新的資料表可能是有利的,例如 F0002 (下一個數字) 和 F0902 (帳戶餘額) 資料表。在許多情況下,在所有資料表和索引間啟用壓縮可提供最簡單的解決方案,因為它提供了大部分優點,而不需要逐個物件進行分析。本指南中的步驟將使用頁面壓縮來壓縮所有資料表和索引。

在某些情況下,壓縮可能會導致效能降低,尤其是當第三方系統直接存取 JD Edwards 資料庫並執行資料表和索引掃描操作時。這種降級通常是由效能不佳的查詢所引起。在這些情況下,請檢閱緩慢的查詢,並使用常見的最佳化技術來提高其效能。例如,考慮重寫查詢以使用現有索引或建置新索引。

啟用壓縮是一個多步驟程序。其中許多步驟都需要對資料庫物件的獨佔存取權,這表示必須讓 EnterpriseOne 和其他系統離線。請遵循下列高層級步驟,在 DTA 和 CTL 結構描述的所有資料表和索引中啟用頁面壓縮:

在壓縮前檢查磁碟空間使用率

若要檢查資料庫的當前磁碟空間使用率,請執行以下指令碼。

USE JDE_PRIST920 SELECT DB_NAME() AS DbName, type_desc, CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS SpaceUsedMB FROM sys.database_files WHERE type IN (0,1) AND type_desc = 'ROWS'; SELECT SUM(CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0) AS TotalSpaceUsedMB FROM sys.database_files WHERE type IN (0,1) AND type_desc = 'ROWS'

輸出格式應類似以下內容:

壓縮前的磁碟空間使用率

在此範例中,資料表列會佔用 3407 MB 的磁碟空間。

執行列舉指令碼

由於 EnterpriseOne 資料庫中有大量的資料表和索引,因此您可以使用指令碼來列舉要壓縮的物件。列舉指令碼的輸出是下一節中使用的壓縮指令碼。執行下列指令碼之前,請先更新結構描述擁有者名稱,以反映您要壓縮之資料表和索引的擁有者。

declare @tblname as varchar(100) declare @idxname as varchar(100) declare @schemaname as varchar(100) declare @sqlstatement as varchar(512) declare tblcurs CURSOR for select t.name as tblname, s.name as schemaname from sys.tables t inner join sys.schemas s on t.schema_id = s.schema_id inner join sys.indexes i on i.object_id = t.object_id inner join sys.partitions p on i.object_id = p.object_id AND i.index_id = p.index_id where s.name in ('PS920DTA', 'PS920CTL') and i.type_desc='CLUSTERED' and p.data_compression_desc <> 'PAGE' open tblcurs FETCH next from tblcurs into @tblname, @schemaname while @@FETCH_STATUS = 0 begin FETCH next from tblcurs into @tblname, @schemaname set @sqlstatement = 'alter table ' + @schemaname + '.' + @tblname + ' rebuild with (DATA_COMPRESSION = PAGE)' print @sqlstatement end close tblcurs deallocate tblcurs declare idxcurs CURSOR for select i.name as idxname, t.name as tblname, s.name as schemaname from sys.tables t inner join sys.schemas s on t.schema_id = s.schema_id inner join sys.indexes i on i.object_id = t.object_id inner jOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id where s.name in ('PS920DTA', 'PS920CTL') and p.data_compression_desc <> 'PAGE' and i.type_desc='NONCLUSTERED' and i.name is not null open idxcurs FETCH next from idxcurs into @idxname, @tblname, @schemaname while @@FETCH_STATUS = 0 begin FETCH next from idxcurs into @idxname, @tblname, @schemaname set @sqlstatement = 'alter index ' + @idxname + ' on ' + @schemaname + '.' + @tblname + ' rebuild with (DATA_COMPRESSION = PAGE)' print @sqlstatement end close idxcurs deallocate idxcurs

執行壓縮指令碼

檢閱您在上一節執行之列舉指令碼的輸出。可以將此壓縮指令碼分成較小的指令碼,然後單獨和平行地將其執行。

重要

針對 EnterpriseOne 資料庫執行此指令碼時,請確定 EnterpriseOne 系統已離線。

以下是壓縮指令碼範例。

alter table PS920DTA.F07620 rebuild with (DATA_COMPRESSION = PAGE) alter table PS920DTA.F760404A rebuild with (DATA_COMPRESSION = PAGE) alter table PS920DTA.F31B93Z1 rebuild with (DATA_COMPRESSION = PAGE) alter table PS920DTA.F31B65 rebuild with (DATA_COMPRESSION = PAGE) alter table PS920DTA.F47156 rebuild with (DATA_COMPRESSION = PAGE) alter table PS920DTA.F74F210 rebuild with (DATA_COMPRESSION = PAGE) ... alter index F4611_16 on PS920DTA.F4611 rebuild with (DATA_COMPRESSION = PAGE) alter index F4611_17 on PS920DTA.F4611 rebuild with (DATA_COMPRESSION = PAGE) alter index F7000110_PK on PS920DTA.F7000110 rebuild with (DATA_COMPRESSION = PAGE) alter index F7000110_3 on PS920DTA.F7000110 rebuild with (DATA_COMPRESSION = PAGE) alter index F7000110_4 on PS920DTA.F7000110 rebuild with (DATA_COMPRESSION = PAGE) alter index F76A801T_PK on PS920DTA.F76A801T rebuild with (DATA_COMPRESSION = PAGE) ...

在壓縮後檢查磁碟空間使用率

若要在壓縮後檢查資料庫的當前磁碟空間使用率,請執行以下指令碼。

USE JDE_PRIST920 SELECT DB_NAME() AS DbName, type_desc, CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS SpaceUsedMB FROM sys.database_files WHERE type IN (0,1) AND type_desc = 'ROWS'; SELECT SUM(CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0) AS TotalSpaceUsedMB FROM sys.database_files WHERE type IN (0,1) AND type_desc = 'ROWS'

輸出格式應類似以下內容。

壓縮後的磁碟空間使用率

在此範例中,可以看到使用的空間從 3407 MB 降至 1275 MB,這表示可節省 62% 的壓縮空間。資料庫的節省有所不同,取決於資料在資料庫資料表中的分佈方式。