NIFNSF:把 view index 搬出 NSF

NIFNSF:把 view index 搬出 NSF

上一篇 DAOS 把附件搬出 NSF。但 NSF 肥大常常還有另一半元凶:view index(檢視索引)。每個檢視都要維護一份索引,索引就躺在 .nsf 裡,一起把檔案撐大、也拖慢備份。

NIFNSF(把檢視索引移出資料庫)對付的就是後者:它把一個庫的 view index 從 .nsf 裡搬出去、存成獨立的 .ndx 檔。NSF 變小、備份還原變快(.ndx 單檔可長到 1TB)。而它有個跟 DAOS 一模一樣的硬前提——得先開 transaction logging(見 Domino 交易日誌)。


重點摘要

  • 它在做什麼:把一個庫的 view index 搬出 .nsf、存成獨立的 .ndx 檔。官方說法:讓資料庫檔變小(更不容易撞大小上限)、加速備份與還原。
  • 硬前提:跟 DAOS 一樣,先開 transaction logging(官方步驟第一條就是「Enable transactional logging in the Server document」);而且資料庫要 ODS 51 以上(官方逐字:「To use this feature, databases must be at ODS version 51 or higher」)。
  • 怎麼開(12.0.2 起):在 Server 文件的 NIFNSF 分頁設——Store view indexes in NIFNSF、NIFNSF base path、Enable NIFNSF when creating new databases。對應舊的 notes.ini 是 NIFNSFEnable=1、NIFBasePath=<路徑>、CREATE_NIFNSF_DATABASES=1;Server 文件的值優先。改完要重啟。
  • 逐庫開/關:load compact -c -nifnsf on <db>.nsf(開完重啟)、load compact -c -nifnsf off <db>.nsf(關)。
  • 怎麼查:show dir -nifnsf(列全部庫、各自有沒有用、.ndx 多大)、show dir -nifnsfonly(只列有用的)。
  • 又回到 DBIID:逐庫開用的是 copy-style 的 -c——會換掉 DBIID,所以跟交易日誌那篇講的一樣,做完要補一次完整備份。

它在做什麼:view index → 獨立的 .ndx

每個檢視背後都有一份索引,預設跟文件資料一起放在 .nsf 裡。檢視多、文件多,索引就跟著把 NSF 撐大;備份時整包一起搬,也更慢。

NIFNSF 把這份索引搬出 .nsf,改存成一個獨立的 .ndx 檔(預設放 data 目錄,可改)。官方點出的兩個好處很直接:

  • NSF 變小——檔案不含索引,更不容易撞到 64GB 的資料庫大小上限。
  • 備份/還原更快——要備的 .nsf 小了;索引那塊可以分開處理。

.ndx 單檔可以長到 1TB(實務上通常是「檢視大到應用程式反應變慢」先成為瓶頸,而不是這個上限)。

你會發現這跟 DAOS 的思路一樣:把本來塞在 NSF 裡、但不一定要跟文件綁在一起的東西搬出去。DAOS 搬附件、NIFNSF 搬檢視索引。

硬前提:translog + ODS 51

跟 DAOS 一樣,開 NIFNSF 之前有兩道關要先過(官方步驟):

  • 先開 transaction logging:官方程序的第一步就是「Enable transactional logging in the Server document in the Domino directory」。理由跟 DAOS 一致——NSF 跟外部 .ndx 之間的關係,要靠交易日誌一起保護,當機回復才對得上(translog 本身見交易日誌那篇)。
  • ODS 要 51 以上:官方逐字「To use this feature, databases must be at ODS version 51 or higher」。ODS 怎麼看、怎麼升,見 ODS 版本那篇——庫太舊的話,得先升 ODS 才用得了 NIFNSF。

怎麼開:Server 文件分頁(12.0.2 起)

12.0.2 起,設定搬到了 Server 文件的 NIFNSF 分頁;若 notes.ini 和 Server 文件都有設,Server 文件的值優先。(這三個欄位要伺服器本身 12.0.2 以上、且 Domino Directory 用 V12.0.2+ 的 pubnames.ntf 設計才會出現;更舊的環境仍走 notes.ini。)三個欄位對應舊的 notes.ini:

Server 文件欄位舊 notes.ini作用
Store view indexes in NIFNSFNIFNSFEnable=1開啟「索引存庫外」(NIFNSFEnable:1=庫外、0=庫內,預設 0)
NIFNSF base pathNIFBasePath=<路徑>.ndx 存哪(NIFBasePath,預設 data 目錄)
Enable NIFNSF when creating new databasesCREATE_NIFNSF_DATABASES=1新建的庫是否套用(預設否)

改完要重啟伺服器。

逐庫開關與檢查

伺服器層開了之後(或不想整台一起來時),可以逐庫處理:

  • 開:load compact -c -nifnsf on <db>.nsf,開完重啟。
  • 關:load compact -c -nifnsf off <db>.nsf。
  • 查:show dir -nifnsf 列出所有庫、各自有沒有用 NIFNSF、.ndx 多大;show dir -nifnsfonly 只列有用的。

又回到 DBIID:為什麼用 -c 開

注意逐庫開 NIFNSF 用的是 copy-style 壓縮 -c。交易日誌那篇講過,copy-style(-c)等於把庫重寫一份、會換掉 DBIID,舊日誌就對不上了——所以開完 NIFNSF 記得補一次完整備份,讓備份基準跟上新的 DBIID。這跟 DAOS 要用 compact -c -daos on 搬既有附件、DBMT 的 -ods 是同一條規則:凡是 copy-style 的動作,做完都要補備份。

小結

  • 是什麼:把一個庫的 view index 搬出 .nsf、存成獨立 .ndx;NSF 變小、備份還原更快(.ndx 可到 1TB)。
  • 硬前提:先開 transaction logging(官方第一步)+ ODS 51 以上。
  • 怎麼開(12.0.2 起):Server 文件 NIFNSF 分頁(對應 NIFNSFEnable/NIFBasePath/CREATE_NIFNSF_DATABASES),Server 文件優先,改完重啟。
  • 逐庫:load compact -c -nifnsf on/off;show dir -nifnsf / -nifnsfonly 查。
  • DBIID:逐庫開用 copy-style -c、換 DBIID → 做完補完整備份;跟 DAOS 搬附件、DBMT -ods 同一條規則。
  • 跟 DAOS 的對照:DAOS 搬附件、NIFNSF 搬檢視索引——都把 NSF 塞不下的東西外移,也都要先開日誌。

參考來源

← 回到文章列表