透過安全地管理索引來加速 ownCloud 10 查詢

對於 ownCloud 10,首先應用已安裝的核心和應用程式提供的架構更改,然後驗證哪些資料庫查詢速度較慢。不要盲目添加索引,也不要假設 Nextcloud 命令db:add-missing-indices是 ownCloud 10 支援的修復命令:目前的 ownCloud Server 10.15 OCC 參考文件中並未包含此命令。索引可以加快匹配讀取的速度,但每個新增的索引都會佔用儲存空間,並增加插入、更新和刪除操作的開銷。

這種方法適用於 ownCloud 頁面、檔案清單或應用程式運作緩慢,且管理員可以存取伺服器和資料庫的情況。如果整個實例運行緩慢,或者實例運行在 SQLite 資料庫且有多個活躍用戶,則在將索引視為問題原因之前,請先檢查更廣泛的資料庫和部署設定。

選擇與證據相符的變更。

資料庫索引是一種輔助結構,它可以幫助資料庫在不掃描整個表的情況下定位行。 ownCloud 及其應用程式在其架構中定義了表、列和索引。核心和應用程式更新可能包含架構遷移,從而建立或調整這些索引。因此,保持應用程式架構的最新狀態是最安全的第一步。

在進行任何更改之前,請先了解以下差異:

  • 管理員警告或已知升級問題:請執行正常的 ownCloud 升級流程並查看其輸出。升級遷移是 ownCloud 或應用程式提供的架構變更的支援路徑。
  • 已知存在執行計劃效率低下的慢查詢:請資料庫管理員檢查查詢及其執行計劃。建立針對性索引可能有所幫助,但建議的列及其順序必須與查詢和表定義相符。
  • 上傳速度慢、檔案鎖定或出現大範圍爭用:請檢查交易、儲存延遲、資料庫容量和檔案鎖定情況。這些症狀本身並不能證明索引缺失。
  • 如果您的小型 SQLite 安裝需要擴展到多用戶環境,請考慮遷移到 MySQL/MariaDB 或 PostgreSQL。 ownCloud 指出,SQLite 適用於測試和小型單一使用者工作負載,而生產環境中的多用戶部署應使用支援的伺服器資料庫。

索引並非提升速度的萬能鑰匙。增加索引數量或許能提升特定查詢的效能,但同時也會增加資料庫大小和寫入延遲。最終結果取決於查詢結構、表格大小、資料分佈、資料庫引擎以及快取狀態。

準備一個安全的維護窗口

  1. 記錄確切的版本和資料庫資訊。在 ownCloud 安裝目錄中執行命令sudo -u www-data ./occ status。記下 ownCloud 版本、已安裝的應用程式版本、資料庫類型和表格前綴config/config.php。將 `< www-dataweb server account>` 替換為您的發行版上的 Web 伺服器帳戶。
  2. 捕獲運行緩慢的操作。記錄受影響的螢幕或應用程式、大致時間以及延遲是否重複出現。查看 ownCloud 日誌和資料庫的慢查詢診斷資訊。僅根據資料庫供應商的指導啟用查詢日誌記錄,因為日誌可能包含敏感的 SQL 值,並且會迅速成長。
  3. 備份資料庫和配置。使用資料庫一致性備份方法,並確認備份檔案可讀。 ownCloud 的備份文件mysqldump --single-transaction以 MySQL 相容資料庫為例;請根據您的配置調整主機、使用者和資料庫值。切勿將資料庫密碼直接寫入 shell 歷史記錄或進程清單中。
  4. 負責任地安排變更。架構升級或索引建置會佔用磁碟 I/O、CPU 和鎖定資源。對於繁忙或大型部署,請告知使用者變更視窗並監控資料庫負載。僅在適用的升級或維護流程需要時才使用 ownCloud 維護模式;切勿將其用作備份的替代方案。

首先應用 ownCloud 管理的架構更新

如果 ownCloud 核心或應用程式有待更新,請使用適用於您安裝方式的文件化升級流程。在傳統的 Linux 安裝中,OCC 指令以 HTTP 使用者身分從 ownCloud 根目錄執行。依照手動升級說明操作時,命令如下:

sudo -u www-data ./occ upgrade

請勿在檔案僅部分更新的安裝上執行此命令。請先準備好匹配的發布版本文件,並按照該版本的官方升級步驟進行操作。對於 Docker 部署,請使用容器文件中提供的 OCC 調用,而不是指向其他 PHP 環境的主機路徑。

請閱讀完整的命令輸出和日誌。成功的命令應該不會報告遷移失敗;但這並不保證所有緩慢的查詢都已修復。如果更新報告了遷移錯誤,請停止並調查該錯誤,而不是重複重新執行命令或手動編輯模式表。如果涉及應用程式遷移,請查閱特定版本的 ownCloud 升級文件並諮詢應用程式維護人員。

ownCloud 10.15 OCC 參考文件列出了諸如db:convert-type`db`、db:convert-mysql-charset`db` 和`db` 之類的資料庫指令db:restore-default-row-format,但沒有列出 `db` 。由於命令的可用性可能會因版本和已安裝的程式碼而異,您可以使用 `command`或 `command`命令db:add-missing-indices檢查您自己的實例。如果後者報告未知命令,請勿將 Nextcloud 教程中的命令複製到 ownCloud 中。請查閱您所使用的 ownCloud 版本的文檔,並使用受支援的升級或應用遷移路徑。sudo -u www-data ./occ list dbsudo -u www-data ./occ help db:add-missing-indices

什麼時候適合採用人工索引?

手動編寫 SQL 是資料庫管理員針對已驗證的查詢問題所採取的措施,並非 ownCloud 的常規最佳化。首先,捕捉特定的慢查詢,並執行引擎的計劃檢查工具,例如EXPLAIN針對 MySQL/MariaDB 或 PostgreSQL 的工具。確認該計劃是否掃描了過多的行,以及是否忽略了現有索引。 ownCloud 表前綴是可配置的,因此切勿假定表名以 `.` 開頭oc_。

在建立索引之前,請將建議的欄位與查詢的篩選條件、連接和排序順序進行比較。複合索引的列順序至關重要;複製現有索引可能會增加成本,而不會最佳化執行計劃。請諮詢資料庫管理員 (DBA),以了解資料庫版本行為、線上或並發索引建置支援、磁碟空間、鎖定影響以及回滾流程。這些細節取決於引擎和版本,因此對於每個 ownCloud 10 安裝,並不存在一個絕對安全的 SQL 語句。

不要僅僅因為名稱看起來冗餘就修改 ownCloud 表或刪除索引。此類變更可能會與後續的核心或應用程式遷移衝突,並可能導致使用與您檢查的查詢不同的查詢的功能發生故障。請保留任何手動架構變更的書面記錄,並確保在復原或遷移後可以重新建立。如果缺少的索引是產品架構缺陷,請優先使用受支援的 ownCloud 修補程式或應用程式版本。

比較資料庫層級的替代方案

如果方案已經使用了合適的索引,那麼添加另一個索引不太可能解決其他原因造成的延遲。請將這些選項與觀察到的瓶頸進行比較:

  • MySQL 或 MariaDB:對於管理員已在使用這兩種資料庫引擎的部署環境來說,它們是常見的選擇。在變更伺服器設定之前,請檢查緩衝池記憶體、磁碟延遲、連線數和慢查詢計畫。
  • PostgreSQL:如果 PHP 資料庫連接器和部署配置正確,則 PostgreSQL 是 ownCloud 10 的一個支援替代方案。它的查詢計劃和索引維護工具與 MySQL 不同,因此請遵循 PostgreSQL 的相關建議。
  • SQLite:操作簡便,適合測試或小型單一使用者使用,但並非同時進行、多使用者生產工作負載的首選。索引調優無法消除部署的並發限制。

更換資料庫引擎是遷移項目,而非簡單的索引調整。 ownCloud 提供occ db:convert-type支援的轉換方案;請先查看其前提條件,做好備份,並在將使用者引導至轉換後的實例之前進行測試。

核實結果,如果證據與之相悖則停止。

在類似條件下重複相同的使用者操作,並比較查詢持續時間、執行計劃、檢查的行數、資料庫 I/O 和伺服器負載。確認相關的 ownCloud 頁面或應用程式正常完成,且日誌中沒有顯示任何資料庫或遷移錯誤。單次請求速度的提升並不代表整體效能的提升;請比較多個具代表性的請求,並考慮熱緩存的影響。

如果使用適當的索引後,相同查詢仍然很慢,請檢查鎖定、儲存、網路延遲、PHP 工作進程以及資料庫資源限制。如果查詢計劃或表格結構不明確,請在手動執行 DDL 語句之前停止操作,並聯絡 DBA 或 ownCloud 支援人員進行審核。可靠的結果是,資料庫模式與已安裝的 ownCloud 版本和已測量的查詢保持一致,並且沒有未追蹤的索引變更。

官方參考資料

留下評論

安全地清除 ownCloud Apache .htaccess 警告

安全地清除 ownCloud Apache .htaccess 警告

僅對 ownCloud 的 Web 根目錄設定 AllowOverride All,驗證活動的 Apache 虛擬主機,然後安全地重新載入以恢復 .htaccess 規則。

設定 ownCloud 企業審計並驗證日誌

啟用 ownCloud 的企業審計應用程序,將 admin_audit 事件路由到受保護的日誌文件,並確認正在記錄真實使用者的操作。

使用 OIDC 將 ownCloud Infinite Scale 連接到 Keycloak

使用 OIDC 將 ownCloud Infinite Scale 連接到 Keycloak

讓 Keycloak 的 realm 頒發者、Web 用戶端和使用者聲明保持一致,以便 ownCloud Infinite Scale 能夠可靠地在 Web 和行動用戶端上登入使用者。

將 ownCloud 檔案轉移給新所有者而不丟失共享份額

使用 ownCloud 的 occ 指令傳輸擁有的檔案和要傳出的共享,以了解哪些內容會保留下來,並在刪除舊帳戶之前驗證存取權限。

透過安全地管理索引來加速 ownCloud 10 查詢

了解何時需要關注 ownCloud 10 資料庫索引,如何安全地應用受支援的架構更新,以及何時查詢調優或資料庫變更是更好的解決方案。

無需 Linux 掛載即可在 ownCloud 中掛載 SMB/CIFS 共享

透過外部儲存將 Windows 或 Samba 網路共用連接到 ownCloud,驗證憑證,並安全地排查無法存取的資料夾問題。

使用 occ 指令安全地清除 ownCloud 檔案版本

使用 occ 指令安全地清除 ownCloud 檔案版本

刪除一個帳戶或所有使用者的所有已儲存的 ownCloud Server Classic 檔案版本,並區分完全清除和基於保留期限的過期。

ownCloud 行動連線被拒絕?請檢查 URL 和可及性

ownCloud 行動連線被拒絕?請檢查 URL 和可及性

以正確的順序檢查伺服器 URL、手機網路、HTTPS 端點和伺服器日誌,即可追蹤 ownCloud 行動連線被拒絕的原因。

使用 Systemd 定時器可靠地執行 ownCloud 後台作業

將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。

透過尋找故障路由來恢復 ownCloud WebDAV 同步

透過 Apache、Nginx 或反向代理程式追蹤 WebDAV 請求,然後使用經過驗證的 PROPFIND 測試確認 ownCloud 同步功能正常。