フィルタテーブルのブロッキング解消
SQL Server 2008 R2 までのフルテキストインデックスでは、内部的に使用されるフィルタテーブルをもっていました。そのテーブルにはフルテキストインデックス内のデータと、元テーブルの該当するデータの状況を示す情報が格納されています。元テーブルのデータがすでに更新されている場合などに、一致するフルテキストインデックスのデータが最新ではないことを示すためのデータを保持しています。そのためフルテキストインデックスに対してクエリを実行すると、データの状態を確認するためにフィルタテーブルが参照され、その期間は共有ロックが獲得されます。また、元データの更新がおこわなれるとフィルタテーブルへの排他ロックが獲得されます。負荷の高いシステムでは、それぞれの処理が干渉しあってブロッキングが発生し、スループットを低下させる大きな要因となっていました。
SQL Server 2012では、ブロッキングを発生されるフィルタテーブルの使用を廃止しました。その代りにデータのバージョニングによる管理を新たに導入し、参照クエリの実行を妨げることなくロック競合の防止を実現しています。
メモリリソースの効率的な使用
次の 2 点でメモリ使用方法の見直しが行われて、より効率的なリソース配分ができるようになりました。
NUMA (Non-Uniform Memory Access)アーキテクチャへの対応
フルテキストインデックスのフラグメント作成時のメモリ使用量の見直し/削減
今回の連載では2回にわたりSQL Server 2012 で、より使い勝手がよくパワフルになったフルテキスト検索を紹介してきましたが、いかがでしたでしょうか。もしも、これまでにフルテキスト検索を使ったことがないのでしたら、これを機会に興味を持っていただき、さらには皆さんの環境でお試しいただけるととても嬉しく思います。
この記事は参考になりましたか?
- あたらしいSQL Server/Denaliの世界連載記事一覧
- この記事の著者
-
平山理(ヒラヤマオサム)
日本マイクロソフト株式会社
プレミアフィールドエンジニアリング
プレミアフィールドエンジニア日本マイクロソフトの Premier Field Engineering 部で、お客様に SQL Server をスムーズにお使いいただくための様々なお手伝いをしています。Sybase (現 SAP) 勤務時代の 5 年間とマイクロソフトでの 12 年間、データベース道を極めるために精進する毎日です。
二人の娘の父親で...※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア