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(默认值)。这将加快所有读取速度。

广告
© . All rights reserved.