web-dev-qa-db-ja.com

SQL Server 2012:すべてのディスク領域を占めるフルテキストカタログ

かなり大きなテーブルのフルテキストカタログとインデックスを作成しました。インデックスが作成されている列のデータ型はvarchar(max)です。カタログの作成を開始するとすぐに問題が発生しました。それはほぼ835GBに成長し、人口ステータスは「処理中の通知」のままです。 SQLの「変更追跡」ステータスに対応するステータスコード9だと思います。それはほとんどいつまでもこの状態で立ち往生しています。

この巨大なカタログサイズに対処する方法はありますか、それを縮小するか、別の場所に移動することができます。

状況を改善するために変更追跡をオフにしています。

これに関するどんな助けも高く評価されます。

更新:

私たちが扱っているデータの量に関するいくつかの詳細情報:

行数: 129,953,562 合計: 1327 GB データ 867 GB インデックス 452 GB 列サイズ = 361 GB

LIKE検索の代わりにFTを使用しましたが、LIKE検索を最適化してパフォーマンスを向上させる方法はあります(FTほど効率的ではないかもしれませんが、それに近いかもしれません)。 enter image description here

1
Saikat

フルテキストインデックスの定義、行数、およびその列の合計サイズを入力してください。 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インデックスを圧縮できます。

1
Stoleg

少し肥大しているようです。どんな書類を保管していますか?彼らはどのような長さを持っていますか?

システムストップリストをオフにするようなことをしましたか?これにより、「a」などの文字がノイズがFTIに含まれるようになったため、以前に却下されたため、フルテキストインデックス(FTI)が膨らみます。

たとえば、DMVを使用してインデックスの内容を検査します

SELECT * 
FROM sys.dm_fts_index_keywords_by_document( DB_ID(), OBJECT_ID('dbo.documents') ) X
WHERE document_id = 1
0
wBob