Java tcp/ip上的jdbc比本地计算机上的速度慢得多

Java tcp/ip上的jdbc比本地计算机上的速度慢得多,java,sql-server,jdbc,tcp,jboss,Java,Sql Server,Jdbc,Tcp,Jboss,我们有一个三层Java应用程序,Jboss作为应用服务器,MS Sql server作为db服务器。我们使用jdbc类型4从App server连接到Db server 我们已经看到,如果Jboss和DB server在不同的机器上运行,那么在同一台机器上运行它们会带来大约50%的性能提升。如何解释如此巨大的差异? Jboss和DB Server运行的机器是非常好的工作站(具有最好的intel CPU),网络是1Gb以太网,具有业务标准基础设施 您认为这是我们网络上的一个问题(延迟、吞吐量等),

我们有一个三层Java应用程序,Jboss作为应用服务器,MS Sql server作为db服务器。我们使用jdbc类型4从App server连接到Db server

我们已经看到,如果Jboss和DB server在不同的机器上运行,那么在同一台机器上运行它们会带来大约50%的性能提升。如何解释如此巨大的差异? Jboss和DB Server运行的机器是非常好的工作站(具有最好的intel CPU),网络是1Gb以太网,具有业务标准基础设施


您认为这是我们网络上的一个问题(延迟、吞吐量等),或者有其他一些原因可以解释这种差异?

嗯,有太多的可能性: 1) 网络设置 2) 防火墙 3) 通信服务的实施 4) 等等

我建议禁用所有服务、选项和过滤器,然后尝试逐个启用。 如果这不起作用,请检查您的代码


祝你好运,这并不容易

嗯,有太多的可能性: 1) 网络设置 2) 防火墙 3) 通信服务的实施 4) 等等

我建议禁用所有服务、选项和过滤器,然后尝试逐个启用。 如果这不起作用,请检查您的代码


祝你好运,这并不容易

在上述情况下,以下因素可能会影响性能

1) 访问数据库时的网络延迟:在本地计算机中,它将小于1毫秒。如果数据库服务器和应用程序服务器位于不同的位置,则延迟将更大。如果为服务特定请求而进行“n”DB调用,则延迟将为n*2*延迟

解决方案:少打电话。对引用数据集使用缓存

2) 访问应用服务器的位置:如果用户位于美国&应用服务器位于印度,则网络延迟约为200ms。如果页面上加载了许多css&js文件,则会导致大量延迟,具体取决于所使用的浏览器

解决方案:将所有js文件合并成一个文件。将GZip用于js和css。缩小JS。有效地使用浏览器缓存


3) 如果以上两个不是瓶颈,请检查部署应用程序的服务器上的CPU、内存和磁盘速度。

在上述情况下,以下因素可能会影响性能

1) 访问数据库时的网络延迟:在本地计算机中,它将小于1毫秒。如果数据库服务器和应用程序服务器位于不同的位置,则延迟将更大。如果为服务特定请求而进行“n”DB调用,则延迟将为n*2*延迟

解决方案:少打电话。对引用数据集使用缓存

2) 访问应用服务器的位置:如果用户位于美国&应用服务器位于印度,则网络延迟约为200ms。如果页面上加载了许多css&js文件,则会导致大量延迟,具体取决于所使用的浏览器

解决方案:将所有js文件合并成一个文件。将GZip用于js和css。缩小JS。有效地使用浏览器缓存


3) 如果以上两个不是瓶颈,请检查部署应用程序的服务器上的CPU、内存和磁盘速度。

由于不知道您的配置,SQL server默认使用命名管道作为传输。在本地,这将是比TCP/IP更快的内存内进程内通信。如果是远程的,则需要通过TCP/IP传输管道,这增加了在TCP/IP堆栈上下封送/解封送(以及实际传输)的开销


您说您使用TCP,但可能是您实际上在本地使用命名管道。连接字符串是什么样子的?

SQL Server不知道您的配置,默认情况下使用命名管道作为传输。在本地,这将是比TCP/IP更快的内存内进程内通信。如果是远程的,则需要通过TCP/IP传输管道,这增加了在TCP/IP堆栈上下封送/解封送(以及实际传输)的开销

您说您使用TCP,但可能是您实际上在本地使用命名管道。您的连接字符串是什么样子的