#Performance
標記為 #Performance · 13 篇文章
- NIFNSF:把 view index 搬出 NSF
NSF 肥大,一半是附件(交給 DAOS 搬出去),另一半常常是 view index(檢視索引)。NIFNSF(把檢視索引移出資料庫)就是對付後者的:它把一個庫的 view index 從 .nsf 裡搬出去、存成獨立的 .ndx 檔,讓 NSF 變小、備份還原變快(.ndx 單檔可到 1TB)。這篇講它在做什麼、為什麼它跟 DAOS 一樣「一定要先開 transaction logging」、還要 ODS 51 以上、12.0.2 起怎麼在 Server 文件的 NIFNSF 分頁設(對應舊的 notes.ini NIFNSFEnable/NIFBasePath/CREATE_NIFNSF_DATABASES)、怎麼用 load compact -c -nifnsf on 逐庫開、show dir -nifnsf 怎麼查——以及為什麼「用 -c 開」又把我們帶回 DBIID 那條規則。
2026.10.17 - DBMT:一條指令收掉 compact、updall、fixup
維護指令那篇教你一個個下 compact、updall、fixup;但正式環境沒人半夜手動下——傳統做法是排一堆 Program document 每晚跑。Domino 9 起的 dbmt(database maintenance tool)把這些收成一條:官方說它「relieves the administrator of the need to run the Updall task」,一個 task 就做掉 compact + updall +(必要時)fixup,還能用執行緒數、時間窗、每幾天壓一次來控節奏。這篇講 dbmt 在做什麼、怎麼從 Program document 跑、compact 面(-ct/-cnd/-tl/-range/-force)與 updall 面(-ut/-ftiNdays)的關鍵開關,以及 -ods 這個會做 copy-style、換掉 DBIID 的特例——為什麼它跟交易日誌、ODS 升級綁在一起。
2026.10.16 - DAOS:把附件搬出 NSF
同一個附件在幾十份文件、甚至好幾個資料庫裡各存一份,NSF 就是這樣肥起來的。DAOS 把附件搬出 NSF、在伺服器上去重存成一份 .nlo 檔,文件裡只留一張叫「ticket」的引用。這篇講它怎麼運作(存檔當下就去重、不是事後維護)、為什麼開它之前一定要先開 transaction logging、Server 文件 DAOS 分頁怎麼設(base path、minimum size、defer deletion)、資料庫怎麼加入,以及 tier 2 把冷附件搬去 S3;最後提醒:附件搬走後,NSF 還要 compact 才真的瘦下來。
2026.10.14 - XPages 效能:為什麼 computed 一次提交被算好幾遍
在 XPages 的 computed 值或 rendered 公式裡擺個 println,按一下按鈕,它卻跑了五六遍——這不是 bug,是 XPages 每次提交都跑整輪 JSF 生命週期,而 #{}(compute dynamically)的 value binding 每被讀一次就重算一次、跨多個階段加起來就是好幾遍。這篇講三個把 computed 重算壓下來的旋鈕:#{}(每次重算)vs ${}(載入算一次、靜態),rendered(在 tree 裡、每階段都算)vs loaded(根本不建進 tree、全程跳過),以及它們各自的使用時機與 ${} 的 caveat。
2026.10.12 - partial refresh vs partial execution:XPages 的 JSF 六階段,為什麼只刷一塊卻整頁重算
你在 XPages 按一個按鈕,結果一個八竿子打不著的欄位驗證器跳出來擋你——因為預設情況下,整頁都跑了一輪 JSF 生命週期,不只你按的那塊。XPages 有兩個各自獨立的「partial」旋鈕:partial refresh(refreshMode/refreshId)管的是 client 端回傳哪塊 HTML,partial execution(execMode/execId)管的才是 server 端跑哪些元件的生命週期。這篇用 JSF 六階段講清楚兩者差別、為什麼只做 partial refresh 整頁還是在 server 重算,以及 partial execution 怎麼把 server 工作縮到一塊。
2026.10.01 - MakeNotesFaster webinar 筆記:Notes 慢多半是設定、不是老筆電——ODS、cache.ndk 迷思與一張週一清單
panagenda 的 Christoph Adler 在 MakeNotesFaster webinar 上,把 Windows 上 HCL Notes 14.5.1 FP1 客戶端的效能拆成兩個決定:跑對版本、設對設定。這篇記下對管理者最有用的幾點——一個真實客戶的慘烈數字、ODS 為什麼每次開檔都在偷時間、cache.ndk 該不該定期刪(他直接打破迷思)、資料目錄別放網路碟、防毒排除清單的三個陷阱,以及他收尾那張『週一早上檢查清單』。
2026.09.26 - NotesView AutoUpdate=False:迴圈裡改文件為什麼越跑越慢、還跳「Entry not found in index」
一個 agent 迴圈跑 view、順手改文件,結果越跑越慢,甚至偶爾拋「Entry not found in index」。罪魁是 NotesView 預設會自動刷新:當你的迴圈改動的正是這個 view 索引的文件,view 就在你腳下一直重整,效能爛掉、導覽位置也可能失效。解法一行——迴圈前 view.AutoUpdate = False。這篇講清楚機制、正確的「先抓下一個再改」寫法,以及三個要知道的副作用(快照、只管當前程式、要 Refresh 才看得到更新)。
2026.09.15 - LotusScript 改寫 Java 後記憶體爆掉?你可能忘了 recycle()
同一段邏輯,LotusScript 跑一輩子都沒事,搬到 Java 版的 lotus.domino 卻會在幾萬份文件的迴圈裡把 agent 記憶體吃垮。原因是每個 Java 物件背後都連著一個垃圾回收看不到的後端 handle。這篇拆解機制、四條官方規則、迴圈洩漏樣式與安全寫法、NotesThread 的角色,以及 local 與遠端 session 的差異。
2026.08.07 - @DbLookup 與 @DbColumn:你沒在傳的那個 cache 關鍵字,與 64K 那道牆
有人改了一份 keyword 文件、重載表單,下拉還是顯示舊值。或者一份 keyword 清單長到幾千筆就悄悄不再長,直到某筆查不到才有人發現。這兩個都不是 Domino 隨機出包,而是 @DbLookup / @DbColumn 兩個有文件記載的行為,藏在多數公式忽略的地方:cache 關鍵字,與 64KB 上限。一篇關於這兩者的實測報告 —— 三種 cache 選項(預設/NoCache/ReCache)、以及這些函式回傳量的硬上限 64KB,配上 classic web 各自踩雷的情境。
2026.08.04 - NotesViewEntry × NotesViewEntryCollection:不開文件就高效讀 view 的每一列
要把一個 view 裡每份文件的某些欄位值讀出來,很多人迴圈跑文件、逐筆 GetItemValue — 但那會把每份文件都打開,幾千筆就很慢。NotesViewEntry 讓你直接讀 view 已經算好的 ColumnValues、完全不開文件;NotesViewEntryCollection 是這些列的集合,還能跳過分類/總計列、做集合運算與 StampAll 批次蓋章。本文拆解這對「高效讀 view」的搭檔、ColumnValues 的效能關鍵、entry 的身份與階層屬性。
2026.06.22 - DQL Production-Ready:Catalog 維運、權限、與 sessionAsSigner
把 DQL 上 production 真正會撞牆的兩個問題:Design Catalog 怎麼自動維護(包含全新 NSF 的 bootstrap、設計變更後的 incremental refresh),以及為什麼一般使用者跑會噴「您沒有權限執行此作業」——以及對應的 sessionAsSigner / scheduled agent 解法。本文整理實測 Domino 12 驗證過的最終 pattern + Java production-ready 範例。
2026.05.03 - NotesViewNavigator 入門:用導航器走視圖,不要再 GetFirstDocument 硬撈
NotesViewNavigator(視圖導航器)是 LotusScript 走視圖的進階工具:能拿到 ViewEntry(視圖條目,含類別、總計、位置等視圖才有的中介資料)、能從子集合(單一類別、未讀、某層以下)建立、效能上比 GetFirstDocument 迴圈高,但使用之前要先把 AutoUpdate 關掉。本文整理 4 個屬性、約 36 個方法、7 個 CreateViewNav* 變體與重要注意事項。
2026.04.29 - NotesQueryResultsProcessor 入門:DQL 之後的下一步
NQRP 是 Domino V12 引入的 LotusScript 類別,讓你把 DQL(或任何 NotesDocumentCollection)的結果重新排序、分類、加欄位、輸出成 JSON 或暫存 view。本文整理建立流程、所有方法簽名、官方範例與安全用法。
2026.04.28