27

ログエントリを保持するデータベースがあります。

ログ テーブルの列の 1 つに (XML に) シリアル化されたオブジェクトが含まれており、私のチームの担当者が NVARCHAR(MAX) ではなく XML データ型を使用することを提案しました。このテーブルには、ログが「永久に」保持されます (非常に古いエントリのアーカイブが将来検討される可能性があります)。

CPUのオーバーヘッドが少し心配ですが、DBがより速く成長できるかどうかはさらに心配です(参照された質問のFoxyBOAは、XMLを使用するとDBが70%大きくなりました)。

この質問を読ん で、いくつかのアイデアが得られましたが、データベースのサイズが増減するかどうかを明確にすることに特に興味があります。

その件に関するあなたの洞察/経験を共有していただけませんか。

ところで。現在、SQL Server 内の XML 機能に依存する必要はありません (特定のケースでは、私にとって利点はほとんどありません)。場合によってはログ エントリが抽出されますが、私は .NET を使用して XML を処理することを好みます (小さなクライアントを作成するか、.NET アセンブリで定義された関数を使用します)。

4

2 に答える 2

35

XML を使用していて、それが常に XML であると確信できる場合は、その方法を使用することを強くお勧めします。SQL Server は XML を最適化された形式で格納します。XML インデックスを使用する必要さえありません。

5KB の XML の 5000 行を XML 列に挿入すると、およそ 1250 ページ = 9 MB になります。同じ 5KB の XML を持つ同じ 5000 行を NVARCHAR(MAX) に挿入すると、3700 ページまたは 29 MB 以上が使用されます。これは大きな違いです。

XML を SQL Server に格納されている XML スキーマに関連付けることができれば、その違いはさらに顕著になります。さらに、保存された XML がスキーマに準拠していることが保証されているため、非常に役立つ場合もあります。プレーンな NVARCHAR(MAX) 列ではできません...

また、XML を NVARCHAR(MAX) で使用するとパフォーマンスが低下することに同意しません。まったく逆です。コンテンツを表示または取得しようとしているときに SQL Server から取得するデータが少なくなる可能性があるため、NVARCHAR(MAX) よりも少し高速であると主張します。

于 2010-05-21T15:56:50.480 に答える
3

このベンチマークは、VARCHAR(MAX) よりも少ない IO を使用し、CPU を少し多く使用する XML データ型を示しています。NVARCHAR(MAX) はユニコードであるため、さらに多くのIOがかかると思います。

http://searchsqlserver.techtarget.com/tip/XML-data-type-in​​-SQL-Server-2005-vs-VARCHAR-MAX

于 2010-08-14T12:54:18.883 に答える