Вопрос: Полнотекстовый поиск SQL Server: процессы Hung с типом ожидания MSSEARCH


У нас есть машина SQL Server 2005 с пакетом обновления 2 (SP2), в которой работает большое количество баз данных, все из которых содержат полнотекстовые каталоги. Всякий раз, когда мы пытаемся удалить одну из этих баз данных или перестроить полнотекстовый индекс, процесс drop или rebuild бесконечно зависает с типом ожидания MSSEARCH. Процесс не может быть убит, и перезагрузка сервера требуется для повторного запуска. Основано на сообщении форума Microsoft 1 , похоже, что проблема может быть неправильно удаленным полнотекстовым каталогом. Может ли кто-нибудь рекомендовать способ определить, какой каталог вызывает проблему, без необходимости их удаления?

1  [ http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2681739&SiteID=1] «Да, у нас были полные текстовые каталоги в базе данных, но поскольку я отключил полнотекстовый поиск базы данных и отключил msftesql, я их не подозревал. Однако я получил статью от поддержки Microsoft, показывая, как я могу проверить, не удалены ли каталоги. Поэтому я обнаружил, что по-прежнему существует старый каталог, после которого я после и после повторного включения полнотекстового поиска смог удалить, так как тогда моя резервная копия работала "


4


источник


Ответы:


Вот предложение. У меня нет поврежденных баз данных, но вы можете попробовать следующее:

declare @t table (name nvarchar(128))
insert into @t select name from sys.databases --where is_fulltext_enabled 

while exists(SELECT * FROM @t)
begin
    declare @name nvarchar(128)
    select @name = name from @t
    declare @SQL nvarchar(4000)
    set @SQL = 'IF EXISTS(SELECT * FROM '+@name+'.sys.fulltext_catalogs) AND NOT EXISTS(SELECT * FROM sys.databases where is_fulltext_enabled=1 AND name='''+@name+''') PRINT ''' +@Name + ' Could be the culprit'''
    print @sql
    exec sp_sqlexec @SQL
    delete from @t where name = @name
end

Если он не работает, удалите проверку фильтра sys.databases,


2



Вы пытались запустить монитор процесса и когда он зависает и посмотреть, какая основная ошибка? Используя монитор процессов, вы должны быть в состоянии сообщить whick файл / ресурс, в котором он ожидает / ошибки.


1



У меня была аналогичная проблема с недопустимыми полными каталогами каталогов. Сервер не будет загружать все базы данных онлайн при запуске. Он обрабатывал базы данных в порядке dbid и получал бы половину пути и останавливался. Только старшие БД были подключены к сети, а остальные были недоступны. Глядя на sysprocesses, обнаружил десяток или более процессов с waittype = 0x00CC, lastwaittype = MSSEARCH. MSSEARCH нельзя остановить. Проблема была вызвана тем, что мы переместили полные текстовые каталоги, но указали неправильный путь для одного из них при запуске команды alter database ... modifyfile. Решение состояло в том, чтобы отключить MSSEARCH, перезагрузить сервер, разрешив всем БД выйти в Интернет, найти поврежденную базу данных, отключить ее, исправить путь к файлу с помощью команды alter database и запустить БД онлайн. Затем запустите MSSEARCH и установите автоматический запуск.


1