$30 off During Our Annual Pro Sale. View Details »

ビュー索引のキホン(後編)

 ビュー索引のキホン(後編)

Notes/Domino のビューの索引についてまとめた資料の後編です。

2019年8月8日開催の「のの会 第17回」で使用した資料です。

Haruyuki Nakano

September 08, 2022
Tweet

More Decks by Haruyuki Nakano

Other Decks in Technology

Transcript

  1. ビュー索引(後編) 中野晴幸 (Haruyuki Nakano) @harunakano (Twitter) harunakano.blogspot.com (blog)

  2. 免責事項 • 本資料はメーカーの承認を得たものではありません。本資料の内容につい てメーカーへ問い合わせすることはしないでください。 • 内容については既出の資料を筆者なりに解釈したものであり、誤りを含ん でいる可能性があります。詳細については、メーカーが公開している技術 文書やヘルプからご確認ください。 • 本資料に基づいて発生した不具合について、筆者は一切の責任を負わない

    ものといたします。
  3. 索引更新サバイバル 終わらない更新処理に対応する機能とは

  4. Update タスクに 2つの更新スレッド ドミノディレクトリは認証やメールのルーティングなどに使用されるためビュー索引は常に最 新の状態に維持されなければなりません。他のデータベースの更新処理に影響され更新が滞る ことがないないよう Domino 6 からはデフォルトで独立したスレッドで処理するよう改善されて います。

    • Directory Indexer ドミノディレクトリのビュー索引を専門に処理 1分間隔で処理 • Indexer ドミノディレクトリ以外のビュー索引を更新 5秒ごとにキューを確認、遅延要求は15分後に処理 全文索引を更新 Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631
  5. 全文索引専用スレッド Update タスクはビュー索引を処理した後、全文索引の更新を行います。大量の更新が発生 すると、ビューの更新が全文索引待ちになり、キューに要求が溜まる場合があります。 ビュー索引と全文索引の更新を別のスレッド「Full Text Indexer」で実行することができます。 UPDATE_FULLTEXT_THREAD=1 サーバーの負荷が高い場合に Lotus

    Notes クライアントからの圧縮要求が即時に実行されない https://www-01.ibm.com/support/docview.wss?uid=swg21464160
  6. 複数の Update キューの要求が慢性的に多い場合、複数の Update を起動できます。UPDATERS=2 を notes.ini へ追加すると Domino の起動時に2つの

    Update タスクを起動できるほか、管理コンソールか らコマンド load update を投入すれば、その都度 Update タスクを1つ追加できます。 コマンド tell update quit でUpdateを終了できますが、複数のUpdateを起動している場合はす べての Update タスクが一度に終了します。 複数の Update タスクを実行する https://www.ibm.com/support/knowledgecenter/ja/SSKTMJ_9.0.1/admin/admn_runningmultipleupdatetasks_t.html Show Task Full Text Indexer Idle Directory Indexer Idle Indexer Idle Full Text Indexer Idle Directory Indexer Idle Indexer Idle
  7. 遅延キューの数は Update タスクと同じ [即時]は5秒ごとに処理 [遅延]はdeferred queueへ 要求 [遅延] 要求 [遅延]

    要求 [即時] 15分後に処理 要求 [遅延] 要求 [遅延] 要求 [遅延] プライベートメモリ Update1 – deferred queue 共有メモリ mqueue 15分後に処理 要求 [遅延] 要求 [遅延] 要求 [遅延] プライベートメモリ Update2 – deferred queue NSF Router Replicator How the Index task precesses new updates https://www-01.ibm.com/support/docview.wss?uid=swg21176062
  8. 遅延時間の調整 Update タスクはデフォルトでは 5 秒おきにキューを処理しますが、この時間を変更して調 整することができます。 UPDATE_IDLE_TIME=<秒> UPDATE_IDLE_TIME_MS=<ミリ秒> 全文索引のスレッドを分離している場合、全文索引の遅延時間を別途指定できます。 FTUPDATE_IDLE_TIME

    =<秒> FTUPDATE_IDLE_TIME_MS =<ミリ秒> Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631
  9. 遅延要求の調整 遅延要求は通常 15分後に処理されますが、処理されるまでに待機する時間を変更できます。 マイナス値を設定すると秒単位となります UPDATE_SUPPRESSION_TIME=<分> UPDATE_SUPPRESSION_TIME=-<秒> キューに保持する遅延要求の最大数を指定できます。 デフォルトは 32767 です。

    UPDATE_SUPPRESSION_LIMIT=<最大数> Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631
  10. 更新を無効にする キューの要求が処理しきれない場合、Updateタスクによるビュー更新を実行しないように して、ユーザーがビューを開いたときに更新されるようにすることができます。 UPDATE_DISABLE_VIEWS=1 全文索引の更新を無効にすることもできます。 UPDATE_DISABLE_FULLTEXT=1 通常は、これらのパラメータで無効化した場合、updall タスクをスケジュールで実行しま す。 Update

    タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631
  11. 圧縮を無効にする クライアントからのデータベース圧縮の要求はキューに入れられ Update タスクによって処 理されます。この圧縮要求を無効にすることができます。 NO_COMPACT_FROM_CLIENT=1 Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631

  12. 入出力を分散する(1) Updall -r コマンドを投入したり索引が削除されているビューをユーザーが開いてビューが 再構築されるとき、一時ファイルが生成される場合があります。一時ファイルは再構築後 に削除されます。一時ファイルの作成先としてDomino データディレクトリと異なるドライ ブに置くと、ディスク入出力が分散します。 VIEW_REBUILD_DIR=<一時ファイル作成先> ビューの再構築に使用する一時フォルダを変更する

    https://www.ibm.com/support/knowledgecenter/ja/SSKTMJ_9.0.1/admin/admn_changingthetemporaryfolderusedforviewrebuilds_t.html
  13. 入出力を分散する(2) ビュー索引が更新されると、引き続き全文索引も更新されます。全文索引の作成先として デフォルトの Domino データディレクトリと異なるドライブへ置くと、ディスク入出力が分 散します。 FTBASEPATH=<.ftフォルダ作成先> メールファイルの FT ファイルの生成先を変更する方法

    https://www-01.ibm.com/support/docview.wss?uid=swg21699381
  14. 入出力を分散する(3) ビュー索引をNSFファイルから、分離されたビュー索引ファイル(.NDX ファイル)に移動 することができます。デフォルトで Domino データディレクトリに保管されますが、別の場 所を指定することが可能です。 NIFBASEPATH=<保管先> データベース外にビューを移動する https://www.ibm.com/support/knowledgecenter/ja/SSKTMJ_9.0.1/admin/admn_moving_views_out_of_databases.html

  15. 進化を続けるインデクサ • 専用ビュースレッド(9.0.1 FP3) • ビューの外出し(9.0.1 FP8) • インラインビューの索引付け(9.0.1 FP9)

    • 動的インデクシング(10.0)
  16. 専用ビュースレッド • Domino 9.0.1 FP3 の新機能 • 非常に使用度の高いデータベースでのビューの競合や、パフォーマンスの問題を防止す るのに役立ちます •

    有効にするには次のコマンドを投入します load updall <database> -T#<sec> <view> (参考) IBM Domino の「専用ビュースレッド」機能について • https://www-01.ibm.com/support/docview.wss?uid=swg21981395 load updall postalcodejp.nsf -T#10 "by Postcode“ show task Task Description View Indexer postalcodejp.nsf "by Postcode" 10 sec. stale read Inline Index Inline Index Directory Indexer Idle Indexer Idle
  17. ビューの外出し • Domino 9.0.1 FP8 の新機能 • ビュー索引をNSFファイルの外に作成する • ODSバージョン

    51 以上のデータベース • トランザクションログ有効化し、サーバー再起動 • NIFNSFEABLED=1 を notes.ini へ追加し、サーバー再起動 • 外出しする方法は2つ • 既存のデータベース load compact –c –nifnsf on <database> をコマンド投入 • 今後作成するすべてのデータベース CREATE_NIFNSF_DATABASES=1 を notes.ini へ追加 データベース外にビューを移動するhttps://www.ibm.com/support/knowledgecenter/ja/SSKTMJ_9.0.1/admin/admn_moving_views_out_of_databases.html *.nsf 索引 *_nsf.ndx
  18. インラインビューの索引付け • Domino 9.0.1 FP9 の新機能 • 重要なビューがユーザーに対して常に最新状態に保たれるようになる • 有効にすると文書の変更後直ちに更新される

    • 設定方法は2種類 • ビュー設計を変更しない (static-enabled) INLINE_VIEW_INDEX=<database>,<database> を notes.ini に追加、ビューを開いて有効化 • ビュー設計を変更する(design-enabled) load updall <database> -T <view> -inline on をコマンド投入 ※複製先に影響する INLINE_VIEW_INDEX 設定を使用してインラインビューの索引付けを有効にする https://www.ibm.com/support/knowledgecenter/ja/SSKTMJ_9.0.1/admin/admn_inline_index_enabling_with_notesini.html show dbs * inline views Inline Index Databases C:¥IBM¥Domino¥data¥postalcodejp.nsf NumIndexes: 1 View ID Type State Refs Age Accessed Info 郵便番号順 (0x00000182) Static Enabled 0 14 min 2019/05/24 09:41:10
  19. 動的インデクシング • Domino 10.0 の新機能 • Dominoサーバーがビューの更新状況を監視し、 Top10のビューが動的に更新用の専用スレッド に適用される。 •

    Notes.ini パラメータで有効化 NIF_VIEW_USAGE_ENABLED=1 • 統計で状況を確認可能 Dynamic indexing of high-usage views https://www.ibm.com/support/knowledgecenter/en/SSKTMJ_10.0.1/admin/high_usage _views.html sh stat database.viewusage.* Database.ViewUsage.Calls = 66 Database.ViewUsage.HighUsageCurrent = 3 Database.ViewUsage.HighUsageDisables = 0 Database.ViewUsage.HighUsageEnables = 4 Database.ViewUsage.HighUsageUpdateChecks = 1052 Database.ViewUsage.HighUsageUpdates = 6 Database.ViewUsage.Skipped = 0 sh stat update.view.* Update.View.NDDocs.nsf.by Category.Score = 1 Update.View.NDDocs.nsf.by Category.TotalInserts = 4 Update.View.NDDocs.nsf.by Category.TotalNew = 1 Update.View.NDDocs.nsf.by Category.TotalRemoves = 2 Update.View.NDDocs.nsf.by Category.TotalReplace = 1 Update.View.PostalCodeJP.nsf.postcode.Score = 545 Update.View.postalcodejp.nsf.(state_kana).Score = 1 Update.View.postalcodejp.nsf.(state_kana).TotalNonReplace = 2 Update.View.postalcodejp.nsf.(state_kanji).Score = 1 Update.View.postalcodejp.nsf.(state_kanji).TotalNonReplace = 2
  20. クイズ(4)Notes クライアントで ビューを開いたとき、そのビュー索引を.. 全部読み込む 一部だけ読み込む

  21. クイズ(4)Notes クライアントで ビューを開いたとき、そのビュー索引を.. 全部読み込む 一部だけ読み込む クライアントは現在の索引群 (ページと呼びます) をメモリに保管します。 ビューの中を前後にスクロールすると、1 回目または

    2 回目のスクロールダウ ンは迅速に行われますが、3 回目は少し時間がかかります。それは、3 回目の スクロールでクライアントのメモリに保持されている索引のページを越えた ためです。新しいページをデータベースから読み取る必要があります。 (参考)Lotus Notes/Domino の Index の基本 - Updall スイッチ、Update および NIF https://www-01.ibm.com/support/docview.wss?uid=swg21467469
  22. 現状を調べる 遅い「何か」を知るには

  23. 要因 • ビューの更新が遅い/更新されない ✓ キューの要求数が慢性的に多い ✓ 複雑なビュー設計 ✓ 大量のビュー数 ✓

    多すぎる文書/ビューエントリ ✓ 頻繁な更新/再構築 ✓ 貧弱なサーバーリソース • ビューの表示が遅い ✓ 列に多量の文字数 ✓ 日時@関数の使用 ✓ 読者フィールドの使用 ✓ 狭いネットワーク帯域
  24. ビューのサイズ Domino Administrator [Files]tab – Files – ManageViews... ビューのサイズは、そのビューを再構築および更新するために必要な時間と強く関連しています。ビューのサイズ が2倍になると、そのビューを再構築または更新する時間も2倍になります。このため、100MBのデータベースがあ

    り、このサイズが6カ月ごとに倍増することが予測される場合は、現在の索引作成の時間が30秒だとすると、索引作 成の時間は6カ月後に60秒になり、さらにその6カ月後は120秒、というように増加することが予想されます。 Lotus Notes/Domino 7 アプリケーションのパフォーマンス 第2部:データベースのビューの最適化 https://www.ibm.com/developerworks/jp/lotus/library/notes7-application-performance2/index.html
  25. 遅延キューの状況 • 統計情報 更新要求の数 Update.DeferredList 次の更新時刻 Update.DeferredList.NextDueTime ※2つの Update を起動した場合

    Update2. DeferredList も調べます Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631 sh stat update.deferredlist* Update.DeferredList = 1 Update.DeferredList.Max = 1 Update.DeferredList.NextDueTime = 06/08/2019 18:28:38 ZE9
  26. 更新したデータベース名/ビュー名 • LOG_UPDATE=<1/2> 1: 更新の開始と終了の日時とデータベース名 2: 1の情報に加え、更新したビュー名 Lotus Notes/Domino 7

    アプリケーションのパフォーマンス 第2部:データベースのビューの最適化 https://www.ibm.com/developerworks/jp/lotus/library/notes7-application-performance2/index.html 2019/06/05 02:06:01 Updating views in postalcodejp.nsf 2019/06/05 02:06:01 Updating postalcodejp.nsf view '1カ月以内の更新のみ' 2019/06/05 02:06:01 Updating postalcodejp.nsf view 'by Jiscode' 2019/06/05 02:06:01 Updating postalcodejp.nsf view 'by Postcode' 2019/06/05 02:06:01 Updating postalcodejp.nsf view 'JISコード別' 2019/06/05 02:06:01 Updating postalcodejp.nsf view '(Abolished)' 2019/06/05 02:06:01 Updating postalcodejp.nsf view '(statekana)' 2019/06/05 02:06:01 Updating postalcodejp.nsf view '(statekanji)' 2019/06/05 02:07:00 Updating postalcodejp.nsf view '都道府県別' 2019/06/05 02:07:00 Updating postalcodejp.nsf view '都道府県別JIS' 2019/06/05 02:07:00 Updating postalcodejp.nsf view '読み仮名順' 2019/06/05 02:07:00 Updating postalcodejp.nsf view '郵便番号順' 2019/06/05 02:07:00 Finished updating views in postalcodejp.nsf
  27. 最も詳細な更新情報 • DEBUG_NIF=1 索引の更新に関して最も多くの情報が得られます。 ミリ秒の単位で分析できます。 DEBUG_THREADID=1 とともに指定すると対象が特定しやすくなります。 Lotus Notes/Domino 7

    アプリケーションのパフォーマンス 第2部:データベースのビューの最適化 https://www.ibm.com/developerworks/jp/lotus/library/notes7-application-performance2/index.html ※記録される量があまりにも多いため NIFTraceTimer で始まる行のみ抽出しています NIFTraceTimer: ReadCollection [1AC0:96] for by Postcode|postcode2 at 2019/06/08 20:24:02, took 0 msecs NIFTraceTimer: OpenCollection [1AC0:96] for by Postcode|postcode2 at 2019/06/08 20:24:02, took 1 msecs NIFTraceTimer: OpenCollection [1AC0:96] for 郵便番号順|postcode at 2019/06/08 20:24:02, took 0 msecs NIFTraceTimer: OpenCollection [1AC0:96] for 都道府県別JIS at 2019/06/08 20:24:02, took 0 msecs NIFTraceTimer: OpenCollection [1AC0:96] for (state_kana) at 2019/06/08 20:24:02, took 0 msecs NIFTraceTimer: OpenCollection [1AC0:96] for (state_kanji) at 2019/06/08 20:24:02, took 0 msecs NIFTraceTimer: WriteCollection [1AC0:96] for by Postcode|postcode2 at 2019/06/08 20:24:02, took 9 msecs NIFTraceTimer: WriteCollection [1AC0:96] for 郵便番号順|postcode at 2019/06/08 20:24:02, took 12 msecs NIFTraceTimer: WriteCollection [1AC0:96] for 都道府県別JIS at 2019/06/08 20:24:02, took 7 msecs NIFTraceTimer: CloseCollection [1AC0:96] for <none> at 2019/06/08 20:24:03, took 0 msecs
  28. クライアント操作をトレース • CLIENT_CLOCK=1 クライアントとサーバーとのNRPCの送受信が記録されます データベース/ビューや文書(ノート)毎にミリ秒単位で分析できます (参考) アプリケーションのデータベースサイズがLotus Domino のパフォーマンスや安定性に与える影響について https://www-01.ibm.com/support/docview.wss?uid=swg21621659

    Client Clock を使用したコンソールログの取得手順について https://www-01.ibm.com/support/docview.wss?uid=swg21468085 (2-61 [2]) OPEN_DB(CN=xps13/O=v10!!PostalCodeJP.nsf): (Opened: REP492583B3:001C106D) 3 ms. [134+290=424] (3-61 [3]) OPEN_NOTE(REP492583B3:001C106D-NTFFFF0010,03000400): 2 ms. [48+1154=1202] (4-61 [4]) OPEN_COLLECTION(REP492583B3:001C106D-NT00000182,0040,4008): 2 ms. [78+34=112] (5-61 [5]) READ_ENTRIES(REP492583B3:001C106D-NT00000182): 2 ms. [76+1820=1896] (6-61 [6]) GET LAST INDEX TIME(REP492583B3:001C106D): 2 ms. [14+76=90] (Database is not full text indexed) (7-64 [7]) NOTE LOCK/UNLOCK(REP492583B3:001C106D): 1 ms. [46+22=68] (8-64 [8]) OPEN_NOTE(REP492583B3:001C106D-NT0007AD8E,02400036): 2 ms. [48+884=932] (9-64 [9]) DB_MODIFIED_TIME(REP492583B3:001C106D): 1 ms. [14+76=90] (10-64 [10]) OPEN_COLLECTION(REP492583B3:001C106D-NT0000018A,0000,0000): 2 ms. [42+34=76] (11-64 [11]) READ_ENTRIES(REP492583B3:001C106D-NT0000018A): 2625 ms. [76+1502=1578] (12-67 [12]) DB_MODIFIED_TIME(REP492583B3:001C106D): 1 ms. [14+76=90] (13-67 [13]) OPEN_COLLECTION(REP492583B3:001C106D-NT00000186,0000,0000): 1 ms. [42+34=76] (14-67 [14]) READ_ENTRIES(REP492583B3:001C106D-NT00000186): 2602 ms. [76+1128=1204] @DbLookup式で参照する ビューエントリの読み込みに 時間がかかっている
  29. クイズ(5) ビュー索引は複製.. される されない

  30. クイズ(5) ビュー索引は複製.. される されない あるサーバーのレプリカでビューが使用されていても、別サーバーのレプリカで使用さ れているとは限りません。ビュー索引は複製されないため、あるレプリカではビュー索 引が作成されていても、別のレプリカでは作成されていないことがあります。構築され ているビュー索引が少なければ、データベースのサイズは小さくなります。 (参考)レプリカデータベース間でサイズに差異が発生する原因について https://www-01.ibm.com/support/docview.wss?uid=swg21464492

  31. クイズ(6) なぜ、メール移行後は開くのが遅い? メールサーバーを新しいハードウェアへ移行しました。ハードウェア間のメールデータベー スの移行は複製で行いました。 移行後にユーザーがアクセスしたところ、メールデータベースを開くのに約20分もかかり ました。 原因と予防策を考えましょう。 コラボレーション・エンジニアの考える日々 サーバー移行時のDB複製はビュー索引に注意 http://munesora.hatenablog.com/entry/20060918/1158555006

  32. クイズ(6) なぜ、メール移行後は開くのが遅い? メールサーバーを新しいハードウェアへ移行しました。ハードウェア間のメールデータベー スの移行は複製で行いました。 移行後にユーザーがアクセスしたところ、メールデータベースを開くのに約20分もかかり ました。 原因と予防策を考えましょう。 コラボレーション・エンジニアの考える日々 サーバー移行時のDB複製はビュー索引に注意 http://munesora.hatenablog.com/entry/20060918/1158555006

    原因:レプリカの場合、ビューの設計は複製されるがビュー索引は複製されない。また 受信ボックスからメールを移動していない場合、ビュー索引の構築時に受信ボックス内 の全てのメールを索引に含める必要があり、件数が多いとそれだけ時間がかかる。そう いったことから、移行先のメールデータベースにはビュー索引がまだ構築されていな かったと考えられる。 対策:複製で移行したメールに対してユーザーがアクセスする前に updall を実行してお く。ただし、使用しないビューやフォルダも存在するため、すべてのビューを対象にす るのではなく、受信ボックスだけ索引を構築する工夫が有効。「load updall mail¥ –T “($Inbox)” –C」とする。 ※-Tだけでは構築されていない場合に無視されてしまう。-Cを組 み合わせることでビューの索引が廃棄されている場合でも特定のビュー索引のみ構築す ることが可能
  33. 参考資料

  34. ビュー索引の基本 (参考)Lotus Notes/Domino の Index の基本 - Updall スイッチ、Update および

    NIF https://www-01.ibm.com/support/docview.wss?uid=swg21467469 (参考)Notes ビュー索引の更新に関する基本 https://www-01.ibm.com/support/docview.wss?uid=swg21464512 (参考)Notes データベースの索引はどのような場合に再構築されるのでしょうか https://www-01.ibm.com/support/docview.wss?uid=swg21467092 Inside Notes (R5) https://www.ibm.com/developerworks/jp/lotus/ldd_tech/20050128_2.html How the Index task precesses new updates https://www-01.ibm.com/support/docview.wss?uid=swg21176062
  35. パフォーマンスチューニング Lotus Notes/Domino 7 アプリケーションのパフォーマンス第2部:データベースのビューの最適化 https://www.ibm.com/developerworks/jp/lotus/library/notes7-application-performance2/index.html (参考)Lotus Notes の時刻/日付ビューのオプション https://www-01.ibm.com/support/docview.wss?uid=swg21462489

    (参考)読者名フィールドを使用すると、Lotus Notes のビューのパフォーマンスが低下する https://www-01.ibm.com/support/docview.wss?uid=swg21467044 (参考)Lotus Notes 8.x/9.0:Mail の「受信ボックスの保守管理」機能に関する FAQ https://www-01.ibm.com/support/docview.wss?uid=swg21465081 問題判別ガイド:データベースのパフォーマンス低下のトラブルシューティング https://www-01.ibm.com/support/docview.wss?uid=swg21626322 IBM Lotus Notes 開発者のためのパフォーマンスの基本 https://www.ibm.com/developerworks/jp/lotus/library/d-ls-notesperformance/
  36. スライドの最後