Полнотекстовый поиск SQL Server: зависшие процессы с типом ожидания MSSEARCH - PullRequest
4 голосов
/ 05 сентября 2008

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

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

Ответы [ 3 ]

2 голосов
/ 03 октября 2008

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

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.

1 голос
/ 23 марта 2010

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

1 голос
/ 08 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...