私は、実稼働データベースが最近非常に大きくなった理由を解明しようとしており、原因が監査テーブルであることがわかりました。問題を修正するためにテーブルをアーカイブしますが、このような大きなSQLサーバーテーブルの場合、テーブルのサイズが正常に見えるかどうかを確認したいと思います。次の構造を持つ4,000,000行があります...
Name Type Nullable
AuditLogId bigint no
UserName nvarchar no
TimeOfChange datetime no
ObjectName nvarchar no
ChangeName nvarchar no
RecordId int yes
OriginalValues nvarchar yes
ResultingValues nvarchar no
AuditLogIdに主キーがある
ALTER TABLE [dbo].[AuditLog] ADD CONSTRAINT [PK_AuditLog] PRIMARY KEY CLUSTERED
(
[AuditLogId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
GO
RecordIdで更新されたレコードへの外部キーもあります。 nvarcharフィールドは最大で12,0000文字で、平均は約8000文字であるようです。テーブルのサイズは現在40GBですが、それでよろしいですか?上記で投稿した内容でその質問に答えられない場合は、表に詳細情報を記載できます。
ありがとう
4,000,000行あり、1列の平均文字数は8,000文字(16,000バイトと思います)。
SELECT CONVERT(bigint,4000000) * /* b */ 16000 / /*kb*/ 1024 / /*mb*/ 1024;
------
61,035
統計が正確であれば、このテーブルは61 GBになると思います。 (8,000文字ではなく8,000バイトを意味するのでしょうか。その場合、30 GBを超えると予想されます。)
その他の要因は次のとおりです。
SQL Serverでは、nvarchar列は 1文字あたり2バイト であるため、12k文字の場合、非常に大きなテーブルを簡単に作成できます。列にUnicodeデータが格納されていない場合は、varcharに変換してストレージを解放できます。