OrientDB - 性能调优
在本章中,您可以获得一些关于如何优化使用 OrientDB 的应用程序的一般技巧。有三种方法可以提高不同类型数据库的性能。
文档数据库性能调优 − 它使用一种有助于避免为每个新文档创建文档的技术。
对象数据库性能调优 − 它使用通用技术来提高性能。
分布式配置调优 −它使用不同的方法来提高分布式配置中的性能。
您可以通过更改内存、JVM 和远程连接设置来实现通用性能调整。
内存设置
内存设置中有不同的策略来提高性能。
服务器和嵌入式设置
这些设置对服务器组件和 JVM 均有效,其中 Java 应用程序使用 OrientDB 在嵌入式模式下运行,直接使用 plocal。
调整时最重要的是确保内存设置正确。真正能产生影响的是内存映射所使用的堆和虚拟内存之间的正确平衡,尤其是在大型数据集(GB、TB 等)上,其中内存缓存结构的数量少于原始 IO。
例如,如果您可以为 Java 进程分配最大 8GB,通常最好分配较小的堆和较大的磁盘缓存缓冲区(堆外内存)。
尝试以下命令来增加堆内存。
java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...
storage.diskCache.bufferSize 设置(对于旧的"本地"存储,它是 file.mmap.maxMemory)以 MB 为单位,并指示磁盘缓存组件要使用多少内存。默认情况下,它是 4GB。
注意 − 如果最大堆和磁盘缓存缓冲区的总和太高,可能会导致操作系统交换并大幅减速。
JVM 设置
JVM 设置编码在 server.sh(和 server.bat)批处理文件中。您可以更改它们以根据您的使用情况和硬件/软件设置调整 JVM。在 server.bat 文件中添加以下行。
-server -XX:+PerfDisableSharedMem
此设置将禁用写入有关 JVM 的调试信息。如果您需要分析 JVM,只需删除此设置即可。
远程连接
使用远程连接访问数据库时,有很多方法可以提高性能。
获取策略
使用远程数据库时,您必须注意使用的获取策略。默认情况下,OrientDB 客户端仅加载结果集中包含的记录。例如,如果查询返回 100 个元素,但如果您从客户端越过这些元素,则 OrientDB 客户端会延迟加载元素,并为每个错过的记录向服务器再进行一次网络调用。
网络连接池
默认情况下,每个客户端仅使用一个网络连接与服务器通信。同一客户端上的多个线程共享同一个网络连接池。
当您有多个线程时,可能会出现瓶颈,因为需要花费大量时间等待空闲的网络连接。这就是配置网络连接池如此重要的原因。
配置非常简单,只有2个参数 −
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 倍。
对于写入,情况正好相反:如果复制是同步的,则具有完全复制的多个节点会减慢操作速度。在这种情况下,跨多个节点分片数据库允许您扩展写入,因为写入时只涉及节点的子集。此外,您可以拥有一个大于一个服务器节点 HD 的数据库。
扩展写入
如果您的网络速度较慢并且您有同步(默认)复制,则可能需要付出延迟成本。事实上,当 OrientDB 同步运行时,它至少会等待 writeQuorum。这意味着,如果 writeQuorum 为 3,并且您有 5 个节点,则协调器服务器节点(启动分布式操作的地方)必须等待至少 3 个节点的答案才能向客户端提供答案。
为了保持一致性,应将 writeQuorum 设置为多数。如果您有 5 个节点,多数是 3。如果有 4 个节点,它仍然是 3。将 writeQuorum 设置为 3 而不是 4 或 5 可以减少延迟成本并保持一致性。
异步复制
为了加快速度,您可以设置异步复制以消除延迟瓶颈。在这种情况下,协调器服务器节点在本地执行操作并将答案提供给客户端。整个复制将在后台进行。如果未达到法定人数,更改将透明地回滚。
扩大读取量
如果您已将 writeQuorum 设置为大多数节点,则可以将 readQuorum 保留为 1(默认值)。这样可以加快所有读取速度。