かなり大きなテーブルのフルテキストカタログとインデックスを作成しました。インデックスが作成されている列のデータ型はvarchar(max)
です。カタログの作成を開始するとすぐに問題が発生しました。それはほぼ835GBに成長し、人口ステータスは「処理中の通知」のままです。 SQLの「変更追跡」ステータスに対応するステータスコード9だと思います。それはほとんどいつまでもこの状態で立ち往生しています。
この巨大なカタログサイズに対処する方法はありますか、それを縮小するか、別の場所に移動することができます。
状況を改善するために変更追跡をオフにしています。
これに関するどんな助けも高く評価されます。
更新:
私たちが扱っているデータの量に関するいくつかの詳細情報:
行数: 129,953,562 合計: 1327 GB データ 867 GB インデックス 452 GB 列サイズ = 361 GB
LIKE検索の代わりにFTを使用しましたが、LIKE検索を最適化してパフォーマンスを向上させる方法はあります(FTほど効率的ではないかもしれませんが、それに近いかもしれません)。
フルテキストインデックスの定義、行数、およびその列の合計サイズを入力してください。 VARCHAR(max)
を指定すると、ストレージの行ごとに32メガバイトが割り当てられます。誰かがその列に巨大なテキストを何度も挿入すると、データベースとインデックスは非常に速く成長します。
別のFILEGROUP
にインデックスを作成し、別のドライブのdbファイルにマップすることができます。 ALTER DATABASEを使用して、ファイルを新しいファイルグループに追加します。 FGが作成され、単一のステートメントでそれにファイルが追加されます。
USE master
GO
ALTER DATABASE AdventureWorks2008R2
ADD FILEGROUP Test1FG1;
GO
ALTER DATABASE AdventureWorks2008R2
ADD FILE
(
NAME = test1dat3,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\t1dat3.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
),
(
NAME = test1dat4,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\t1dat4.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP Test1FG1;
GO
さらに読むために(そしてこのコードのソース): ALTER DATABASE File and Filegroup Options
申し訳ありませんが、何らかの理由でコメントを追加できません。後でこの回答を更新/削除します。
[〜#〜]更新[〜#〜]
マップされたドライブを介して可能ですが、ネットワークにインデックスを保存すると、パフォーマンスが大幅に低下します。テーブル内のすべてのレコードを頻繁に使用していて、FTインデックスが探索する新機能である場合、これは問題ありません。ローカルストレージ上のテーブルとネットワーク上のインデックスです。
あるいは、テーブルの使用状況とパーティションテーブルを、現在頻繁に使用されている-およびアーカイブ-ほとんど使用されていない-データに検討することをお勧めします。複数のアーカイブテーブルを異なる共有に置くことができます。テーブルとインデックスは同じパーティションに保存されます。
RE:圧縮。ストレージとCPUの間のトレードオフです。 CPUリソースが十分にある場合は、これを考慮してください。ネットワークに格納されたインデックスと圧縮率が良い場合は、それも役立ちます。
圧縮時の更新:圧縮では、行サイズを8060バイト未満にする必要があります。したがって、テキストを格納している場合、テーブル(=クラスタ化インデックスまたはヒープ)は圧縮できません。ただし、FTI行サイズがそれより小さい場合は、FTIインデックスを圧縮できます。
少し肥大しているようです。どんな書類を保管していますか?彼らはどのような長さを持っていますか?
システムストップリストをオフにするようなことをしましたか?これにより、「a」などの文字がノイズがFTIに含まれるようになったため、以前に却下されたため、フルテキストインデックス(FTI)が膨らみます。
たとえば、DMVを使用してインデックスの内容を検査します
SELECT *
FROM sys.dm_fts_index_keywords_by_document( DB_ID(), OBJECT_ID('dbo.documents') ) X
WHERE document_id = 1