Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

234 views

Published on

Notes/Domino のデータベースには設計やデータの他、ビュー索引も含まれています。後編ではビュー索引の更新や再構築におけるパフォーマンスに関する機能などについてまとめています。

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

  1. 1. ビュー索引(後編) 中野晴幸 (Haruyuki Nakano) @harunakano (Twitter) harunakano.blogspot.com (blog)
  2. 2. 免責事項 • 本資料はメーカーの承認を得たものではありません。本資料の内容につい てメーカーへ問い合わせすることはしないでください。 • 内容については既出の資料を筆者なりに解釈したものであり、誤りを含ん でいる可能性があります。詳細については、メーカーが公開している技術 文書やヘルプからご確認ください。 • 本資料に基づいて発生した不具合について、筆者は一切の責任を負わない ものといたします。
  3. 3. 索引更新サバイバル 終わらない更新処理に対応する機能とは
  4. 4. Update タスクに 2つの更新スレッド ドミノディレクトリは認証やメールのルーティングなどに使用されるためビュー索引は常に最 新の状態に維持されなければなりません。他のデータベースの更新処理に影響され更新が滞る ことがないないよう Domino 6 からはデフォルトで独立したスレッドで処理するよう改善されて います。 • Directory Indexer ドミノディレクトリのビュー索引を専門に処理 1分間隔で処理 • Indexer ドミノディレクトリ以外のビュー索引を更新 5秒ごとにキューを確認、遅延要求は15分後に処理 全文索引を更新 Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631
  5. 5. 全文索引専用スレッド Update タスクはビュー索引を処理した後、全文索引の更新を行います。大量の更新が発生 すると、ビューの更新が全文索引待ちになり、キューに要求が溜まる場合があります。 ビュー索引と全文索引の更新を別のスレッド「Full Text Indexer」で実行することができます。 UPDATE_FULLTEXT_THREAD=1 サーバーの負荷が高い場合に Lotus Notes クライアントからの圧縮要求が即時に実行されない https://www-01.ibm.com/support/docview.wss?uid=swg21464160
  6. 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. 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. 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. 9. 遅延要求の調整 遅延要求は通常 15分後に処理されますが、処理されるまでに待機する時間を変更できます。 マイナス値を設定すると秒単位となります UPDATE_SUPPRESSION_TIME=<分> UPDATE_SUPPRESSION_TIME=-<秒> キューに保持する遅延要求の最大数を指定できます。 デフォルトは 32767 です。 UPDATE_SUPPRESSION_LIMIT=<最大数> Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631
  10. 10. 更新を無効にする キューの要求が処理しきれない場合、Updateタスクによるビュー更新を実行しないように して、ユーザーがビューを開いたときに更新されるようにすることができます。 UPDATE_DISABLE_VIEWS=1 全文索引の更新を無効にすることもできます。 UPDATE_DISABLE_FULLTEXT=1 通常は、これらのパラメータで無効化した場合、updall タスクをスケジュールで実行しま す。 Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631
  11. 11. 圧縮を無効にする クライアントからのデータベース圧縮の要求はキューに入れられ Update タスクによって処 理されます。この圧縮要求を無効にすることができます。 NO_COMPACT_FROM_CLIENT=1 Update タスクのキューの調整について https://www-01.ibm.com/support/docview.wss?uid=ibm10737631
  12. 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. 13. 入出力を分散する(2) ビュー索引が更新されると、引き続き全文索引も更新されます。全文索引の作成先として デフォルトの Domino データディレクトリと異なるドライブへ置くと、ディスク入出力が分 散します。 FTBASEPATH=<.ftフォルダ作成先> メールファイルの FT ファイルの生成先を変更する方法 https://www-01.ibm.com/support/docview.wss?uid=swg21699381
  14. 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. 15. 進化を続けるインデクサ • 専用ビュースレッド(9.0.1 FP3) • ビューの外出し(9.0.1 FP8) • インラインビューの索引付け(9.0.1 FP9) • 動的インデクシング(10.0)
  16. 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. 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. 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:IBMDominodatapostalcodejp.nsf NumIndexes: 1 View ID Type State Refs Age Accessed Info 郵便番号順 (0x00000182) Static Enabled 0 14 min 2019/05/24 09:41:10
  19. 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. 20. クイズ(4)Notes クライアントで ビューを開いたとき、そのビュー索引を.. 全部読み込む 一部だけ読み込む
  21. 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. 22. 現状を調べる 遅い「何か」を知るには
  23. 23. 要因 • ビューの更新が遅い/更新されない  キューの要求数が慢性的に多い  複雑なビュー設計  大量のビュー数  多すぎる文書/ビューエントリ  頻繁な更新/再構築  貧弱なサーバーリソース • ビューの表示が遅い  列に多量の文字数  日時@関数の使用  読者フィールドの使用  狭いネットワーク帯域
  24. 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. 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. 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. 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. 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. 29. クイズ(5) ビュー索引は複製.. される されない
  30. 30. クイズ(5) ビュー索引は複製.. される されない あるサーバーのレプリカでビューが使用されていても、別サーバーのレプリカで使用さ れているとは限りません。ビュー索引は複製されないため、あるレプリカではビュー索 引が作成されていても、別のレプリカでは作成されていないことがあります。構築され ているビュー索引が少なければ、データベースのサイズは小さくなります。 (参考)レプリカデータベース間でサイズに差異が発生する原因について https://www-01.ibm.com/support/docview.wss?uid=swg21464492
  31. 31. クイズ(6) なぜ、メール移行後は開くのが遅い? メールサーバーを新しいハードウェアへ移行しました。ハードウェア間のメールデータベー スの移行は複製で行いました。 移行後にユーザーがアクセスしたところ、メールデータベースを開くのに約20分もかかり ました。 原因と予防策を考えましょう。 コラボレーション・エンジニアの考える日々 サーバー移行時のDB複製はビュー索引に注意 http://munesora.hatenablog.com/entry/20060918/1158555006
  32. 32. クイズ(6) なぜ、メール移行後は開くのが遅い? メールサーバーを新しいハードウェアへ移行しました。ハードウェア間のメールデータベー スの移行は複製で行いました。 移行後にユーザーがアクセスしたところ、メールデータベースを開くのに約20分もかかり ました。 原因と予防策を考えましょう。 コラボレーション・エンジニアの考える日々 サーバー移行時のDB複製はビュー索引に注意 http://munesora.hatenablog.com/entry/20060918/1158555006 原因:レプリカの場合、ビューの設計は複製されるがビュー索引は複製されない。また 受信ボックスからメールを移動していない場合、ビュー索引の構築時に受信ボックス内 の全てのメールを索引に含める必要があり、件数が多いとそれだけ時間がかかる。そう いったことから、移行先のメールデータベースにはビュー索引がまだ構築されていな かったと考えられる。 対策:複製で移行したメールに対してユーザーがアクセスする前に updall を実行してお く。ただし、使用しないビューやフォルダも存在するため、すべてのビューを対象にす るのではなく、受信ボックスだけ索引を構築する工夫が有効。「load updall mail –T “($Inbox)” –C」とする。 ※-Tだけでは構築されていない場合に無視されてしまう。-Cを組 み合わせることでビューの索引が廃棄されている場合でも特定のビュー索引のみ構築す ることが可能
  33. 33. 参考資料
  34. 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. 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. 36. スライドの最後

×