2

最近、Win 2003 / SQL Server 2000(HP ML350G4p-2GBのRAMを搭載したデュアルXeon)からWin 2008 R2 / SQL Server 2008を実行する新しいハードウェア(IBMx3200M3-シングルXeonQCX3450 2.66GHz 10GB RAM)にアップグレードしました。従来のASPWebサイトであり、全文検索を使用して、お客様が当社の製品説明を検索できるようにします。

contains検索は、述語 を使用して検索を実行するための動的クエリを構築するストアドプロシージャによって実行されます。

一部の検索が非常に遅いという断続的な問題があります。完了するまでに1分以上かかることもあります。それ以外の場合は、1秒以内に完了します。古いサーバーではこの問題はまったく発生しませんでした。

SSMSからストアドプロシージャを実行することでこの問題を再現しましたが、これも非常に長い時間がかかる場合があります。

SQL Server 2008内の新しい全文検索システムが疑われますが、問題を特定する方法がわかりません。タイムアウトが発生しているときは、サーバーのCPUに大きな負荷はかかっていないようです。他にどこを見ればいいのかわからない。SQLServer2008は比較的新しいものです。

オフに設定されている場合は、インデックスのトラッキングを変更します。私は、毎日インデックスを段階的に更新し、カタログを毎日最適化するジョブを実行しています。

グーグルで検索すると、これはかなり一般的な問題のようですが、私はまだそれに対する決定的な答えを見つけていません。誰かが私を正しい方向に向けることができますか?

マイク、よろしくお願いします。

4

2 に答える 2

2

他の誰かがこの問題を抱えている場合、私はついにそれを解決しました。Cumulative Update 9を適用してから、次のことを行う必要がありました。–

DBCC TRACEON(4199、-1); 行く;

DBCC FREEPROCCACHE; 行く;

このページのForrestsjsによる投稿から回答が見つかりました: http ://social.msdn.microsoft.com/Forums/en-US/sqlsearch/thread/7e45b7e4-2061-4c89-af68-febd668f346c/

「office2010pro*」などのワイルドカード検索では、応答が約3分から2〜3秒に短縮されました。

于 2013-03-07T21:49:37.320 に答える
1

ちょうどこれを見つけました:StackOverflowのSQL 2008 FTSの問題は解決しました(どのサービスパックや累積的な更新を適用しましたか?)

SQLServer2000からSQLServer2008にアップグレードした後、すべてのインデックスを再構築しましたか?

必要がある。

これを実行します(ただし、本番環境で実行する前に、DBA /マネージャー/誰の許可も持っていることを確認してください):

exec sp_msforeachtable "DBCC DBREINDEX('?')"
go

exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go

また、使用状況カウンターを更新します。以前のバージョンのSQL Serverでは、テーブルとインデックスの行数とページ数の値が正しくなくなる可能性があります。無効な行数またはページ数を修正するDBCC UPDATEUSAGEには、アップグレード後にすべてのデータベースで実行します。

それでも問題が解決しない場合は、「最大並列度」を1に設定して調べてください。

この投稿は役立つかもしれません:SQLServer2000から2008へのアップグレード

「完了するまでに1分以上かかる場合もありますが、1秒以内に完了する場合もあります」と説明する動作は、通常、不適切なクエリプランがキャッシュされていることを示しています。

これを読んだことがありますか?:SQL2008全文検索の問題

多数の更新が発生していますか?

この投稿からSQLServer2008フルテキストの速度低下:

次の場合に発生するようです。

  • フルテキストインデックスを自動追跡します。手動に変更しましたが、まだこの問題がありました。

  • フルテキストクエリの実行に長い時間がかかる場合があります。通常、更新が同時に行われている場合は、本番環境でのみ表示される可能性があります。

  • 1つ以上のクエリが複雑であるか、完了するまでに時間がかかります。

これが原因でシステムが遅いかどうかを確認するには、次の方法で確認できます。

  • SELECT * FROM sys.dm_os_wait_statsステートメント、いくつかのロックの待機時間が非常に長いことを示しています。

  • Sp_who2を実行しています。フルテキストギャザーがフルテキストクエリをブロックしており、クエリによってブロックされていることを一貫して示す必要があります。

この問題の現在の回避策は、RTMビルドでMicrosoftが親切に有効にしたグローバルトレースフラグを使用することです。これを使用するには、次のTransact-SQLステートメントを入力します 。DBCCTRACEON(7646、-1)

于 2012-10-30T03:28:10.277 に答える