Sql server Nifi ExecuteSQLRecord:如何捕获性能瓶颈 客观的

Sql server Nifi ExecuteSQLRecord:如何捕获性能瓶颈 客观的,sql-server,apache-nifi,Sql Server,Apache Nifi,我在Azure VM上有一个容器,带有附加的高级超高吞吐量SSD磁盘。我在AWS上有MSSQL Server 2012数据库。Nifi到数据库的通信通过mssql jar v6.2和高通量AWS直连MPLS网络进行 在Nifi流中,只执行一个处理器-ExecuteSQLRecord。它只使用一个线程/CPU,并且有4 GB JVM堆空间可用。ExecuteSQLRecord返回一百万行的执行查询,相当于60MB的流文件。查询是基于表索引的,所以在数据库端并没有什么需要优化的。查询如下所示:从id

我在Azure VM上有一个容器,带有附加的高级超高吞吐量SSD磁盘。我在AWS上有MSSQL Server 2012数据库。Nifi到数据库的通信通过mssql jar v6.2和高通量AWS直连MPLS网络进行

在Nifi流中,只执行一个处理器-ExecuteSQLRecord。它只使用一个线程/CPU,并且有4 GB JVM堆空间可用。ExecuteSQLRecord返回一百万行的执行查询,相当于60MB的流文件。查询是基于表索引的,所以在数据库端并没有什么需要优化的。查询如下所示:从id在x和y之间的表中选择*

问题 带有1个线程/CPU、1个查询的ExecuteSQLRecord在40秒内检索1M行60MB。 同时,从MSMS和数据库内部网络运行相同的查询需要18秒

同时,查询已经在数据库端通过索引进行了优化,并且吞吐量随着线程/CPU数量的增加而线性增加-网络不是瓶颈

问题 Nifi 1 CPU的性能可以吗?Nifi从40秒到22秒用于检索并将结果存储到内容存储库可以吗? Nifi如何从MSSQL服务器提取数据?这是一种拉动式方法吗?如果是的话,也许我们要往返很多次? 如何检查Nifi在将结果集转换为CSV上花费了多少时间,以及在内容存储库中写入的时间?
您是否使用最新的Docker image 1.11.4?如果是这样,您应该能够在ExecuteSQLRecord处理器上设置提取大小


当我搜索MSSQL驱动程序的默认获取大小时,我得到了两个不同的结果,一个站点说1,另一个站点说32。对于这么多的记录,我想您会希望它更高,请参见设置适当的提取大小。

您使用的是最新的Docker image 1.11.4吗?如果是这样,您应该能够在ExecuteSQLRecord处理器上设置提取大小


当我搜索MSSQL驱动程序的默认获取大小时,我得到了两个不同的结果,一个站点说1,另一个站点说32。在您的情况下,我想您会希望它更高,以设置适当的获取大小。

要添加到Matt的答案中,您可以检查每个流文件的继承持续时间,并查看它在流的每个段中花费的时间量。您还可以查看每个处理器的数据,因此可以根据每个处理器的流文件大小和数量、CPU使用情况等检查数据的输入/输出

要添加到Matt的答案中,您可以检查每个流文件的沿袭持续时间,并查看它在流的每个段中花费的时间量。您还可以查看每个处理器的数据,因此可以根据每个处理器的流文件大小和数量、CPU使用情况等检查数据的输入/输出

谢谢你的回答!我使用了1.10.0,我刚刚切换到1.11.4并测试了解决方案。我玩不同尺寸的游戏:从1k到1m。我只赢了一秒钟。因此,往返次数不是瓶颈,或者Nifi或MS SQL忽略了该属性。在我尝试了所有选项后,我倾向于认为~100MB/min是1 CPU/2 GB RAM的最佳速度,并且应通过扩展CPU数量来获得进一步的性能。我接近真相了吗?谢谢你的回答!我使用了1.10.0,我刚刚切换到1.11.4并测试了解决方案。我玩不同尺寸的游戏:从1k到1m。我只赢了一秒钟。因此,往返次数不是瓶颈,或者Nifi或MS SQL忽略了该属性。在我尝试了所有选项后,我倾向于认为~100MB/min是1 CPU/2 GB RAM的最佳速度,并且应通过扩展CPU数量来获得进一步的性能。我接近真相了吗?是的,谢谢你的建议。我确实知道起源和历史地位。ExecuteSQLRecord processor的诀窍在于它一次包含所有统计信息:从开始查询数据库到持久性结束,再到内容存储库。因此,瓶颈可能在数据库、网络、RAM、磁盘,或者其他方面。你是Nifi,它不会告诉你在什么地方需要使用不同的选项,或者可能需要实现一个对我来说太长的自定义处理器。如果你需要更细粒度,那么下一步可能是附加Java分析器。谢谢!目前我不得不停止我的调查,因为最后期限,但这是一个很好的观点是的,谢谢你的建议。我确实知道起源和历史地位。ExecuteSQLRecord processor的诀窍在于它一次包含所有统计信息:从开始查询数据库到持久性结束,再到内容存储库。因此,瓶颈可能在数据库、网络、RAM、磁盘,或者其他方面。你是Nifi,它不会告诉你在哪里需要使用不同的选项,或者可能需要实现一个定制的处理器,如果你需要mor,它对我来说太长了
e granular,附加Java探查器可能是下一步。谢谢!目前我不得不停止我的调查,因为最后期限,但这是一个很好的观点