ユーザーがDBを開こうとしたりすると
「メモリが足りません。インデックスプールがいっぱいです」
といったメッセージが表示されるようになったのです。※表示されないユーザーもいました
IBMの情報(下のリンク)によると、当現象は Domino 6.5.3 の不具合とのこと。
定期的に「インデックスプールがいっぱいです」というメッセージが表示される
http://www-06.ibm.com/jp/domino04/lotus/support/faqs/faqs.nsf/all/729123
どうやら NIF Pool が制限値の128MBに達すると発生するようです。
確かに、2度目に発生した時の統計情報の値 (Database.NIFPool.Used) は8MB付近から一気に制限値へ増加していました...
そもそもこの不具合がどうして突然発生するようになったのか...??
最近作成したアプリケーションでどでかいビュー索引を作った覚えもないし...??
まずはサーバー上にある全てのビューのサイズをチェックしようと考え、次のようなスクリプトを作りました。
Sub Initialize
Dim ss As New NotesSession
Dim logdb As NotesDatabase
Dim logdoc As NotesDocument, doc As NotesDocument
Dim logdc As NotesDocumentCollection
Dim item As NotesItem
Dim views As Variant
dlmCRLF = Chr( 13 ) & Chr( 10 )
Set logdb = New NotesDatabase( "hogehoge/org", "log.nsf" )
If logdb Is Nothing Then Exit Sub
Set logdc = logdb.Search( |Form = "Activity"|, Nothing, 0 )
If logdc.Count = 0 Then Exit Sub
Set logdoc = logdc.GetFirstDocument
While Not ( logdoc Is Nothing )
If logdoc.HasItem( "AllViewInfo" ) Then
Set item = logdoc.GetFirstItem( "AllViewInfo" )
views = Split( item.Values, dlmCRLF )
Forall o In views
Set doc = New NotesDocument( ss.CurrentDatabase )
doc.Form = "view"
doc.Title = logdoc.Title( 0 )
doc.PathName = logdoc.PathName( 0 )
doc.ViewName = Strleftback( o, " ", 1 )
doc.ViewSize = Strrightback( o, " ", 2 )
Call doc.Save( True, False )
Set doc = Nothing
End Forall
End If
Set logdoc = logdc.GetNextDocument( logdoc )
Wend
End Sub簡単に説明します。log.nsf には毎朝5時に statlog タスクにて作成・更新される Activity というフォームの文書があり、ここに各アプリケーション内にあるすべてのビューやフォルダの名前とサイズが記録されています。
log.nsf にある全ての Activity 文書を参照して、改行で区切られた各ビューの情報を分解して書き出します。
こうして書き出した情報をビューで工夫するとビューの数が多いアプリケーションやサイズが大きいビューがわかります。
不具合に関しては現在のところ、アップデートするまでに再現した場合に何かの参考になるかと考え LOG_UPDATE=1 を設定して様子をみていますが、近い将来Domino を 6.5.6 へアップデートします。
0 件のコメント:
コメントを投稿