2007/04/20

起笑的 Office Sharepoint Server Search

最近遇到一個 Sharepoint Server Farm 無法停止 Office Sharepoint Server Search Service。

會造成資料庫連線爆增,Search Server Winsock 壞掉(詳見 【茶包射手專欄】怪異的網路問題 http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/04/19/719.aspx )

印象中是當初設定 Shared Service Provider 中的搜尋排程後,才發現會有"起笑"(台語)的現象發生。

 

詳細原因還不明,不過有一些蛛絲馬跡。

 

0.從茶包射手得知, mssearch.exe 一直建立 sql connection ,用 Process Explorer 看了一下,發現是 Office Sharepoint Server Search 啟動的 process

 

1.開啟 SQL Profiler 來看, filter Database Name 為 SSP Search DB 後,發現一直重覆著執行以下指令

select collationname(0x0904100000)

 

declare @p7 int
set @p7=NULL
declare @p8 int
set @p8=NULL
exec dbo.proc_MSS_Crawl 1,7,1,170,0,0,@p7 output,@p8 output
select @p7, @p8

 

2.複製至 SQL Management Studio 查詢後發現

什麼…一個預存程序 proc_MSS_AnchorFixTargetDocid 有問題,拜 google 大神也沒有結果…

3. 後來就先改了這個 SPS SearchDB 內建的預存程序 proc_MSS_AnchorFixTargetDocid

**Line 182:

INSERT INTO MSSCrawlChangedTargetDocs (CrawlId, DocId)
SELECT @CrawlId, DocID FROM #ChangedTargetDocs

改為…

INSERT INTO MSSCrawlChangedTargetDocs (CrawlId, DocId)
SELECT distinct @CrawlId, DocID FROM #ChangedTargetDocs

**Line 185:

INSERT INTO MSSAnchorPendingChangeLog (CrawlId, TargetDocId)
SELECT distinct @CrawlId, MSSAnchorText.TargetDocId FROM MSSAnchorText
JOIN #ChangedSourceDocs
ON #ChangedSourceDocs.DocId = MSSAnchorText.SourceDocId
WHERE MSSAnchorText.TargetDocId <> -1

改為…

INSERT INTO MSSAnchorPendingChangeLog (CrawlId, TargetDocId)
SELECT distinct @CrawlId, MSSAnchorText.TargetDocId FROM MSSAnchorText
JOIN #ChangedSourceDocs
ON #ChangedSourceDocs.DocId = MSSAnchorText.SourceDocId
WHERE MSSAnchorText.TargetDocId <> -1

**Line 191:

INSERT INTO MSSAnchorPendingChangeLog (CrawlId, TargetDocId)
SELECT distinct MSSCrawlChangedTargetDocs.CrawlId, DocId FROM MSSCrawlChangedTargetDocs
WHERE MSSCrawlChangedTargetDocs.CrawlId = @CrawlId

改為…

INSERT INTO MSSAnchorPendingChangeLog (CrawlId, TargetDocId)
SELECT distinct MSSCrawlChangedTargetDocs.CrawlId, DocId FROM MSSCrawlChangedTargetDocs
WHERE MSSCrawlChangedTargetDocs.CrawlId = @CrawlId

 

改完這個預存程序後… Reset Crawl Data 重設所有編目內容 (共用服務管理 > 搜尋設定 > 編目設定-重設所有編目內容)

Yeah~~~~ 不會無法停止搜尋,也不會一直無限量建立 SQL Connection ,將 DB 搞跨。

 

不過,這只是一個治標,並非治本的作法,目前搜尋也正常,還看不出副作用,累了,查了三天了,先這樣子吧,有空再查查看囉…

 

Technorati tags: , , ,

沒有留言: