OrientDB性能调优
2018-12-24 15:24 更新
在本章中,您可以获得一些有关如何优化使用OrientDB的应用程序的一般提示。有三种方法可以提高不同类型数据库的性能。
文档数据库性能调整 - 它使用一种技术,可帮助避免为每个新文档创建文档。
对象数据库性能调优 - 它使用通用技术来提高性能。
分布式配置调整 - 它使用不同的方法来提高分布式配置的性能。
您可以通过更改内存,JVM和远程连接设置来实现通用性能调整。
服务器和嵌入式设置
这些设置对于使用OrientDB在嵌入模式下运行Java应用程序的服务器组件和JVM都有效,直接使用plocal。
调整最重要的是确保内存设置正确。什么可以产生真正的区别是堆和内存映射使用的虚拟内存之间的正确平衡,特别是在内存缓存结构计数小于原始IO的大型数据集(GB,TB和更多)上。
例如,如果您可以为Java进程分配最大8GB,通常最好分配小堆缓存和大磁盘缓存(堆外内存)。
尝试以下命令增加堆内存。
注意 - 如果最大堆和磁盘缓存缓冲区的总和太高,它可能导致操作系统与巨大的减速交换。
网络连接池
默认情况下,每个客户端只使用一个网络连接与服务器通信。同一客户端上的多个线程共享同一个网络连接池。
当您有多个线程时,可能会有瓶颈,因为花费大量时间等待一个空闲的网络连接。这就是为什么重要的是配置网络连接池的原因。
配置很简单,只有2个参数 -
minPool - 这是连接池的初始大小。默认值配置为全局参数“client.channel.minPool”。
maxPool - 这是连接池可以达到的最大大小。默认值配置为全局参数“client.channel.maxPool”。
如果所有池连接都忙,则客户端线程将等待第一个空闲连接。
使用数据库属性的配置示例命令。
使用事务
即使更新图表,也应该始终在事务中工作。 OrientDB允许你在他们之外工作。常见的情况是只读查询,如果失败,可以恢复大规模和非并发操作。当您在分布式配置上运行时,使用事务有助于减少延迟。这是因为分布式操作仅在提交时发生。分发一个大操作比传输小的多个操作更有效,因为延迟。
复制与分片
OrientDB分布式配置设置为完全复制。使用具有相同数据库副本的多个节点对于缩放读取是重要的。事实上,每个服务器在执行读取和查询时是独立的。如果有10个服务器节点,则读取吞吐量为10x。
使用写入,情况恰恰相反:如果复制是同步的,则具有完全复制的多个节点会减慢操作速度。在这种情况下,跨多个节点分割数据库允许您扩展写入,因为在写入时仅涉及节点的一个子集。此外,您可以有一个数据库大于一个服务器节点HD。
按比例放大写入
如果您的网络速度较慢,并且具有同步(默认)复制,则可以支付延迟成本。事实上当OrientDB同步运行时,它至少等待writeQuorum。这意味着如果writeQuorum为3,并且您有5个节点,则协调服务器节点(分布式操作启动的地方)必须等待至少3个节点的答案,以便向客户端提供答案。
为了保持一致性,writeQuorum应该设置为多数。如果你有5个节点,多数是3.对于4个节点,它仍然是3.将writeQuorum设置为3而不是4或5允许减少延迟成本,并仍然保持一致性。
异步复制
为了加快速度,您可以设置异步复制以消除延迟瓶颈。在这种情况下,协调器服务器节点在本地执行操作并向客户端给出答案。整个复制将在后台。如果未达到定额,则更改将被透明地回滚。
在阅读时放大
如果已经将writeQuorum设置为大多数节点,则可以将readQuorum保留为1(默认值)。这加快了所有的读取。
文档数据库性能调整 - 它使用一种技术,可帮助避免为每个新文档创建文档。
对象数据库性能调优 - 它使用通用技术来提高性能。
分布式配置调整 - 它使用不同的方法来提高分布式配置的性能。
您可以通过更改内存,JVM和远程连接设置来实现通用性能调整。
内存设置
在内存设置中有不同的策略来提高性能。服务器和嵌入式设置
这些设置对于使用OrientDB在嵌入模式下运行Java应用程序的服务器组件和JVM都有效,直接使用plocal。
调整最重要的是确保内存设置正确。什么可以产生真正的区别是堆和内存映射使用的虚拟内存之间的正确平衡,特别是在内存缓存结构计数小于原始IO的大型数据集(GB,TB和更多)上。
例如,如果您可以为Java进程分配最大8GB,通常最好分配小堆缓存和大磁盘缓存(堆外内存)。
尝试以下命令增加堆内存。
java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...storage.diskCache.bufferSize设置(使用旧的“本地”存储是file.mmap.maxMemory)以MB为单位,并告诉要为磁盘高速缓存组件使用多少内存。 默认情况下是4GB。
注意 - 如果最大堆和磁盘缓存缓冲区的总和太高,它可能导致操作系统与巨大的减速交换。
JVM设置
JVM设置在server.sh(和server.bat)批处理文件中编码。 您可以根据使用情况和hw / sw设置更改它们以调整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个服务器节点,则读取吞吐量为10x。
使用写入,情况恰恰相反:如果复制是同步的,则具有完全复制的多个节点会减慢操作速度。在这种情况下,跨多个节点分割数据库允许您扩展写入,因为在写入时仅涉及节点的一个子集。此外,您可以有一个数据库大于一个服务器节点HD。
按比例放大写入
如果您的网络速度较慢,并且具有同步(默认)复制,则可以支付延迟成本。事实上当OrientDB同步运行时,它至少等待writeQuorum。这意味着如果writeQuorum为3,并且您有5个节点,则协调服务器节点(分布式操作启动的地方)必须等待至少3个节点的答案,以便向客户端提供答案。
为了保持一致性,writeQuorum应该设置为多数。如果你有5个节点,多数是3.对于4个节点,它仍然是3.将writeQuorum设置为3而不是4或5允许减少延迟成本,并仍然保持一致性。
异步复制
为了加快速度,您可以设置异步复制以消除延迟瓶颈。在这种情况下,协调器服务器节点在本地执行操作并向客户端给出答案。整个复制将在后台。如果未达到定额,则更改将被透明地回滚。
在阅读时放大
如果已经将writeQuorum设置为大多数节点,则可以将readQuorum保留为1(默认值)。这加快了所有的读取。
以上内容是否对您有帮助:
更多建议: