OrientDB - 效能調優



本章將介紹一些關於如何最佳化使用 OrientDB 的應用程式的通用技巧。有三種方法可以提高不同型別資料庫的效能。

  • 文件資料庫效能調優 - 它使用一種技術來幫助避免為每個新文件建立文件。

  • 物件資料庫效能調優 - 它使用通用技術來提高效能。

  • 分散式配置調優 - 它使用不同的方法來提高分散式配置中的效能。

您可以透過更改記憶體、JVM 和遠端連線設定來實現通用的效能調優。

記憶體設定

記憶體設定中有不同的策略可以提高效能。

伺服器和嵌入式設定

這些設定同時適用於伺服器元件和 JVM,在嵌入模式下使用 OrientDB(直接使用plocal)執行 Java 應用程式的 JVM。

調優最重要的方面是確保記憶體設定正確。堆和記憶體對映使用的虛擬記憶體之間的正確平衡會產生真正的差異,尤其是在大型資料集(GB、TB 及更多)中,其中記憶體快取結構比原始 IO 重要性低。

例如,如果您最多可以為 Java 程序分配 8GB 記憶體,則通常最好分配較小的堆和較大的磁碟快取緩衝區(堆外記憶體)。

嘗試使用以下命令來增加堆記憶體。

java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ... 

storage.diskCache.bufferSize 設定(舊的“local”儲存中為file.mmap.maxMemory)以 MB 為單位,指示要為磁碟快取元件使用多少記憶體。預設值為 4GB。

注意 - 如果最大堆和磁碟快取緩衝區的總和過高,可能會導致作業系統交換,從而導致速度大幅下降。

JVM 設定

JVM 設定編碼在 server.sh(和 server.bat)批處理檔案中。您可以更改它們以根據您的使用情況和硬體/軟體設定來調整 JVM。在 server.bat 檔案中新增以下行。

-server -XX:+PerfDisableSharedMem 

此設定將停用寫入有關 JVM 的除錯資訊。如果您需要分析 JVM,只需刪除此設定。

遠端連線

使用遠端連線訪問資料庫時,有很多方法可以提高效能。

提取策略

使用遠端資料庫時,您必須注意使用的提取策略。預設情況下,OrientDB 客戶端僅載入結果集中包含的記錄。例如,如果查詢返回 100 個元素,但如果您從客戶端交叉這些元素,則 OrientDB 客戶端會延遲載入元素,每次缺少記錄時都會向伺服器進行一次網路呼叫。

網路連線池

預設情況下,每個客戶端僅使用一個網路連線與伺服器通訊。同一客戶端上的多個執行緒共享相同的網路連線池。

當您有多個執行緒時,可能會出現瓶頸,因為大量時間都花費在等待空閒網路連線上。這就是為什麼配置網路連線池非常重要的原因。

配置非常簡單,只有兩個引數 -

  • minPool - 這是連線池的初始大小。預設值配置為全域性引數“client.channel.minPool”。

  • maxPool - 這是連線池可以達到的最大大小。預設值配置為全域性引數“client.channel.maxPool”。

如果所有池連線都繁忙,則客戶端執行緒將等待第一個空閒連線。

使用資料庫屬性進行配置的示例命令。

database = new ODatabaseDocumentTx("remote:localhost/demo"); 
database.setProperty("minPool", 2); 
database.setProperty("maxPool", 5);  

database.open("admin", "admin");

分散式配置調優

有很多方法可以提高分散式配置的效能。

使用事務

即使更新圖,也應始終在事務中工作。OrientDB 允許您在事務之外工作。常見的情況是隻讀查詢或大規模且非併發操作可以在發生故障時恢復。在分散式配置中執行時,使用事務有助於減少延遲。這是因為分散式操作僅在提交時發生。由於延遲,分發一個大型操作比傳輸多個小型操作效率更高。

複製與分片

OrientDB 分散式配置設定為完全複製。擁有多個具有相同資料庫副本的節點對於擴充套件讀取非常重要。事實上,每個伺服器在執行讀取和查詢方面都是獨立的。如果您有 10 個伺服器節點,則讀取吞吐量為 10 倍。

對於寫入,情況正好相反:如果複製是同步的,則擁有多個具有完全複製的節點會減慢操作速度。在這種情況下,跨多個節點對資料庫進行分片允許您擴充套件寫入,因為只有一部分節點參與寫入。此外,您可以擁有一個比一個伺服器節點硬碟更大的資料庫。

擴充套件寫入

如果您有慢速網路並且具有同步(預設)複製,則您可能需要支付延遲的成本。事實上,當 OrientDB 同步執行時,它至少會等待writeQuorum。這意味著,如果 writeQuorum 為 3,並且您有 5 個節點,則協調器伺服器節點(在其中啟動分散式操作)必須等待來自至少 3 個節點的答案才能向客戶端提供答案。

為了保持一致性,writeQuorum 應設定為多數。如果您有 5 個節點,則多數為 3。對於 4 個節點,它仍然是 3。將 writeQuorum 設定為 3 而不是 4 或 5 可以降低延遲成本,同時仍然保持一致性。

非同步複製

為了加快速度,您可以設定非同步複製以消除延遲瓶頸。在這種情況下,協調器伺服器節點在本地執行操作並向客戶端提供答案。整個複製將在後臺進行。如果未達到仲裁數,則更改將被透明地回滾。

擴充套件讀取

如果您已將 writeQuorum 設定為大多數節點,則可以將readQuorum保留為 1(預設值)。這將加快所有讀取速度。

廣告