2

我最近从 Win 2003 / SQL Server 2000(HP ML350 G4p - Dual Xeon with 2GB RAM)升级到运行 Win 2008 R2 / SQL Server 2008 的新硬件(IBM x3200 M3 - Single Xeon QC X3450 2.66GHz 10GB RAM)。我们运行一个经典的 ASP 网站,并使用全文搜索使客户能够搜索我们的产品描述。

搜索由存储过程执行,该存储过程构建动态查询以使用contains谓词运行搜索。

我有一个间歇性问题,因为某些搜索非常慢。有时需要一分钟才能完成。在其他时候,它们将在不到一秒的时间内完成。在旧服务器上根本没有这个问题。

我已经通过从 SSMS 运行存储过程复制了这个问题,而且,这有时可能需要很长时间。

我怀疑 SQL Server 2008 中的新全文搜索系统,但我不确定如何查明问题。发生超时时,服务器 cpu 上的负载似乎并不大。我不知道还能去哪里看。相对较新的 SQL Server 2008。

如果设置为关闭,则更改索引​​上的跟踪,并且我正在运行一项作业以每天增量更新索引,以及每天优化目录。

在谷歌上搜索,这似乎是一个相当普遍的问题,但我还没有找到一个明确的答案。有人可以指出我正确的方向吗?

在此先感谢,迈克。

4

2 回答 2

2

万一其他人有这个问题,我终于解决了。我需要应用累积更新 9,然后执行以下操作:–

DBCC TRACEON(4199,-1);去;

DBCC FREEPROCCACHE;去;

从 Forrestsjs 在此页面上的帖子中找到答案:http: //social.msdn.microsoft.com/Forums/en-US/sqlsearch/thread/7e45b7e4-2061-4c89-af68-febd668f346c/

通配符搜索的响应时间从大约 3 分钟缩短到 2-3 秒,例如:“office 2010 pro*”

于 2013-03-07T21:49:37.320 回答
1

刚刚发现:StackOverflow 的 SQL 2008 FTS 问题已解决(您应用了哪些服务包和/或累积更新?)

从 SQL Server 2000 升级到 SQL Server 2008 后,您是否重建了所有索引?

你需要。

运行这个(但在生产运行之前确保你有你的 DBA/经理/任何人的许可):

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

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

此外,更新使用计数器:在 SQL Server 的早期版本中,表和索引行计数和页计数的值可能会变得不正确。要更正任何无效的行数或页数,DBCC UPDATEUSAGE请在升级后在所有数据库上运行。

如果这不能解决您的问题,请调查将“最大并行度”设置为 1。

这篇文章可能会有所帮助:从 SQL Server 2000 升级到 2008

您描述的“有时需要一分钟以上才能完成。有时他们将在不到一秒的时间内完成”的行为通常表明正在缓存不适当的查询计划。

你读过这个吗?:SQL 2008 全文搜索问题

您是否有大量更新发生?

从这篇文章SQL Server 2008 全文缓慢

如果出现以下情况,它似乎会发生:

  • 您对全文索引进行了自动跟踪;尽管我们将其更改为手动,但仍然存在此问题。

  • 您遇到全文查询需要很长时间才能执行;通常当更新同时发生时,你可能只会在生产中看到这个。

  • 您的一个或多个查询很复杂或需要一些时间才能完成。

您可以通过以下方式检查您的系统是否因此而变慢:

  • SELECT * FROM sys.dm_os_wait_stats 语句,它显示了一些锁的非常高的等待时间。

  • 运行 Sp_who2; 它应该始终显示全文收集正在阻止全文查询,并且反过来又被查询阻止。

当前解决此问题的方法是使用 Microsoft 在 RTM 构建中启用的全局跟踪标志。要使用它,请键入以下 Transact-SQL 语句: DBCC TRACEON (7646, -1)

于 2012-10-30T03:28:10.277 回答