Kar*_*arl 4 database performance latency
我目前正在开发一个n层系统,并在解决一些数据库性能问题.我们一直在研究的一个领域是数据库服务器和应用服务器之间的延迟.在我们的测试环境中,两个盒子之间的平均ping时间在0.2ms的范围内,但是在客户端站点上,它在8.2ms的范围内更多.这是我们应该担心的事吗?
对于您的普通系统,您认为什么是合理的延迟?您将如何测试/测量延迟?
卡尔
抱歉,响应时间太短,但是在寻找其他人在其应用程序服务器和数据库服务器之间实现的网络延迟指标时,我偶然发现了这个问题。无论如何,我注意到其他答案
总之,简而言之:是的,网络延迟(通过ping衡量)可以产生巨大的变化。
如果您的数据库响应为.001毫秒,那么从ping的0.2毫秒变为8毫秒,您将看到巨大的影响。我听说数据库协议很健谈,如果为true,则意味着较慢的网络延迟(相对于http)将对它们产生更大的影响。
而且更有可能的是,如果您正在运行1个查询,那么添加8ms来获取来自数据库的答复就无关紧要。但是,如果您要执行10,000次查询(通常是由于代码错误或未优化使用ORM而发生的),则您将需要等待额外的80秒才能进行8ms的ping操作,而对于0.2ms的ping则只需等待4秒。
作为我自己的政策问题,我从来不让客户端应用程序直接与数据库联系。我要求客户端应用程序必须始终通过应用程序服务器(例如REST Web服务)进行访问。这样,如果我不小心遇到了“ 1 + N” ORM问题,那么它几乎没有那么大的影响力。我仍然会尝试解决潜在的问题...
简而言之:不!
您应该监视的是查询的全局性能(即传输到DB +执行+传输回服务器)
您可以做的是使用性能计数器来监视查询通常执行的时间.您可能会看到您的结果超过毫秒区域.
没有"合理的延迟"这样的东西.您应该考虑"项目的合理延迟",这将根据您的工作情况而有很大差异.人们对实时交易平台和只读业余网站没有同样的期望.
小智 5
在基于 linux 的服务器上,您可以使用 tc 命令自己测试延迟的影响。
例如,此命令将为通过 eth0 的所有数据包添加 10 毫秒的延迟
tc qdisc add dev eth0 root netem delay 10ms
Run Code Online (Sandbox Code Playgroud)
使用此命令消除延迟
tc qdisc del dev eth0 root
Run Code Online (Sandbox Code Playgroud)
此处提供更多详细信息:http : //devresources.linux-foundation.org/shemminger/netem/example.html
所有应用程序都会有所不同,但我确实见过 10 毫秒延迟对系统性能产生重大影响的情况。