Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Avatar for Haruyuki Nakano Haruyuki Nakano
September 08, 2022

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

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

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

Avatar for Haruyuki Nakano

Haruyuki Nakano

September 08, 2022
Tweet

More Decks by Haruyuki Nakano

Other Decks in Technology

Transcript

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

    • Directory Indexer ドミノディレクトリのビュー索引を専門に処理 1分間隔で処理 • Indexer ドミノディレクトリ以外のビュー索引を更新 5秒ごとにキューを確認、遅延要求は15分後に処理 全文索引を更新 Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631
  2. 複数の 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
  3. 遅延キューの数は 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
  4. 専用ビュースレッド • 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
  5. ビューの外出し • 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
  6. インラインビューの索引付け • 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
  7. 動的インデクシング • 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
  8. クイズ(4)Notes クライアントで ビューを開いたとき、そのビュー索引を.. 全部読み込む 一部だけ読み込む クライアントは現在の索引群 (ページと呼びます) をメモリに保管します。 ビューの中を前後にスクロールすると、1 回目または

    2 回目のスクロールダウ ンは迅速に行われますが、3 回目は少し時間がかかります。それは、3 回目の スクロールでクライアントのメモリに保持されている索引のページを越えた ためです。新しいページをデータベースから読み取る必要があります。 (参考)Lotus Notes/Domino の Index の基本 - Updall スイッチ、Update および NIF https://www-01.ibm.com/support/docview.wss?uid=swg21467469
  9. 要因 • ビューの更新が遅い/更新されない ✓ キューの要求数が慢性的に多い ✓ 複雑なビュー設計 ✓ 大量のビュー数 ✓

    多すぎる文書/ビューエントリ ✓ 頻繁な更新/再構築 ✓ 貧弱なサーバーリソース • ビューの表示が遅い ✓ 列に多量の文字数 ✓ 日時@関数の使用 ✓ 読者フィールドの使用 ✓ 狭いネットワーク帯域
  10. ビューのサイズ 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
  11. 遅延キューの状況 • 統計情報 更新要求の数 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
  12. 更新したデータベース名/ビュー名 • 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
  13. 最も詳細な更新情報 • 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
  14. クライアント操作をトレース • 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式で参照する ビューエントリの読み込みに 時間がかかっている
  15. クイズ(6) なぜ、メール移行後は開くのが遅い? メールサーバーを新しいハードウェアへ移行しました。ハードウェア間のメールデータベー スの移行は複製で行いました。 移行後にユーザーがアクセスしたところ、メールデータベースを開くのに約20分もかかり ました。 原因と予防策を考えましょう。 コラボレーション・エンジニアの考える日々 サーバー移行時のDB複製はビュー索引に注意 http://munesora.hatenablog.com/entry/20060918/1158555006

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