フィルタテーブルのブロッキング解消
SQL Server 2008 R2 までのフルテキストインデックスでは、内部的に使用されるフィルタテーブルをもっていました。そのテーブルにはフルテキストインデックス内のデータと、元テーブルの該当するデータの状況を示す情報が格納されています。元テーブルのデータがすでに更新されている場合などに、一致するフルテキストインデックスのデータが最新ではないことを示すためのデータを保持しています。そのためフルテキストインデックスに対してクエリを実行すると、データの状態を確認するためにフィルタテーブルが参照され、その期間は共有ロックが獲得されます。また、元データの更新がおこわなれるとフィルタテーブルへの排他ロックが獲得されます。負荷の高いシステムでは、それぞれの処理が干渉しあってブロッキングが発生し、スループットを低下させる大きな要因となっていました。
SQL Server 2012では、ブロッキングを発生されるフィルタテーブルの使用を廃止しました。その代りにデータのバージョニングによる管理を新たに導入し、参照クエリの実行を妨げることなくロック競合の防止を実現しています。
メモリリソースの効率的な使用
次の 2 点でメモリ使用方法の見直しが行われて、より効率的なリソース配分ができるようになりました。
NUMA (Non-Uniform Memory Access)アーキテクチャへの対応
フルテキストインデックスのフラグメント作成時のメモリ使用量の見直し/削減
今回の連載では2回にわたりSQL Server 2012 で、より使い勝手がよくパワフルになったフルテキスト検索を紹介してきましたが、いかがでしたでしょうか。もしも、これまでにフルテキスト検索を使ったことがないのでしたら、これを機会に興味を持っていただき、さらには皆さんの環境でお試しいただけるととても嬉しく思います。