SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

あたらしいSQL Server/Denaliの世界

SQL Server 2012 フルテキスト検索の新機能(後編)

日本マイクロソフトの平山です。今回の連載では引き続きSQL Server 2012フルテキスト検索で強化された機能を紹介します。派手なかたちで目に触れる機会は少ないのですがSQL Server2012フルテキスト検索では、パフォーマンスを向上させるために数多くの取り組みが行われています。今回の記事ではじっくりそれらの点について触れてみたいと思います。

 日本マイクロソフトの平山です。今回の連載では引き続きSQL Server 2012フルテキスト検索で強化された機能を紹介します。派手なかたちで目に触れる機会は少ないのですがSQL Server2012フルテキスト検索では、パフォーマンスを向上させるために数多くの取り組みが行われています。今回の記事ではじっくりそれらの点について触れてみたいと思います。

パフォーマンスの改善

 SQL Server の新しいバージョンがリリースされるたびに、フルテキストに関連するデータ格納方式は大きく進化を遂げてきました。かつてフルテキスト検索で使用されるオブジェクトは、データベース外の単なるOSファイルとして管理されていました。そのため、運用面のコストやセキュリティ面のリスクといった観点から、あまり望ましくない状態にありました。そのような状況を改善するために、通常のオブジェクトと同様にデータベース内で管理できるようにすることが急務でした。その結果としてSQL Server 2008からは、ほぼ全てのオブジェクトをデータベース内に取り込むことができています。

 一方、データ構造の統合を実現するための作業の優先度があまりに高いため、フルテキスト検索に関わる各種操作のパフォーマンスを向上させるための実装が、やや後手に回っていた感があったのも事実です。

 しかし、SQL Server 2012ではついにパフォーマンスに関わる部分にメスが入れられ、大幅に改善されています。そのなかでも代表的なものをいくつか見ていきましょう。

検索処理の並列化

 実は SQL Server 2008 R2 まで、フルテキストインデックスに対する検索は、たった一つのスレッドで実行されていました。そんな状況であれば、当然のことながら巨大なサイズのフルテキストインデックスに対しては、それなりの検索時間が必要となってしまうのは自明ともいえました。そして、ついにSQL Server 2012 からは複数スレッドによって検索処理の並列実行が行わるようになりました。これによって、より大きなフルテキストインデックスに対する検索スピードを短縮することでき、スケーラビリティの向上につながります。

マスターマージ処理の並列化

 フルテキストインデックスの検索処理と共に、更新処理も並列で実行されるようになりました。

 フルテキストインデックスは、フラグメントと呼ばれるデータ構造を使用して管理されています。作成された当初はひとつのフラグメントで構成されています。それが長い期間にわたる運用を経た後では、複数のフラグメントに増えてしまうことが一般的です。それはフルテキストインデックスが参照している元テーブルにデータが追加されたなどの理由によって、新たに小さなフラグメントが追加されていくからです。

 複数のフラグメントに増えてしまうことのデメリットは、ディスクに無駄なスペースを占有する点と、メモリ上にも本来であれば不要な領域を使用してしまう点です(メモリ上にロードするフラグメントが増えるため)。

 そのような理由から一定期間ごとに、数が増えてしまったフラグメントをひとつにまとめる作業(マスターマージ処理)を運用に組み込むことが推奨されています。

 SQL Server 2008 R2 までは、マスターマージ処理がひとつのスレッドだけを使用して行われていました。想像に難くないと思いますが、サイズの非常に大きなテーブルではとても長い時間が必要でした。数日から1週間といった期間が必要となってしまうような場合さえありました。

 SQL Server 2012 からは、マスターマージ処理が複数スレッドをつかった並列処理で行われることから、運用作業の負荷を大幅に軽減することができます。

 マスターマージ処理を行うためのステートメントは従来と変わりありません。

 ALTER FULLTEXT CATALOG フルテキストカタログ名
 REORGANIZE
 GO

 マスターマージ処理の並列度は次のシステムストアドプロシージャで管理します。

 EXEC sp_fulltext_service 'master_merge_dop', 並列数
 GO

次のページ
フィルタテーブルのブロッキング解消

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
あたらしいSQL Server/Denaliの世界連載記事一覧

もっと読む

この記事の著者

平山理(ヒラヤマオサム)

日本マイクロソフト株式会社
プレミアフィールドエンジニアリング
プレミアフィールドエンジニア日本マイクロソフトの Premier Field Engineering 部で、お客様に SQL Server をスムーズにお使いいただくための様々なお手伝いをしています。Sybase (現 SAP) 勤務時代の 5 年間とマイクロソフトでの 12 年間、データベース道を極めるために精進する毎日です。
二人の娘の父親で...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3883 2012/04/19 00:00

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング