10個のデータベース、各データベースに100個の異なるスキーマ、各スキーマに10個の小さな(約50行)テーブル(合計で10K個のテーブル)があり、これらすべてにフルテキストインデックスを作成したときに、SQL Server 2014でテストを行いましたこれらすべてのデータベースのテーブルを同時に。
数分後に、SQL Serverがすべての接続(ADMIN:.
接続を除く)を受け入れるために停止したことがわかりました。サーバーを再起動すると接続できますが、しばらくするとハングします。調査の結果、動作しているすべてのスレッドを消費していることが原因であることがわかり、dm_os_tasks
とdm_os_waiting_tasks
は、SUSPENDED
状態でFT_MASTER_MERGE
待機がたくさんあることを示しました。 「フルテキストはマスターマージ操作を待機しています」とグーグル検索しましたが、それに関する実際の情報は見つかりませんでした。
さまざまなフルテキストカタログ構成を試しました。DBごとに1つのカタログ、スキーマごとに1つのカタログ、インデックスごとに1つのカタログです。とにかく、サーバーはこれらすべての中断されたタスクでハングします。
待機の根本的な原因は何ですか?これをどのように修正/緩和できますか?
そして、そのような大量のテーブルでフルテキストを有効にするための推奨される方法は何ですか?
一度にすべてを行うのではなく、操作をずらす必要があります。接続アイテムは、新しい接続の受け入れについて話しません。しかし、このため、待機スレッドは解放されず(あなたの場合)、新しい接続は不可能です。
参照:
これはSQL Serverの既知の問題です。接続アイテムから:
これは、現在のジョブスケジューラの設定方法が原因で発生し、複数のマスターマージ操作がキューに入れられますが、通知されません。明確にするために、これは複数のインデックス作成/再編成操作が同時に呼び出された場合にのみ発生します-インデックス作成操作は正常に完了し、結果はクエリ可能です。タイムアウトし、後で再スケジュールされるのは、マスターマージのみです。
修正は複雑なため、次のメジャーリリースまで待機して、トリアージすることにしました。現時点では、このようなタイムアウトの問題が発生しないように、インデックスの母集団をずらすことをお勧めします。他にご不明な点がありましたらお知らせください。