我目前正在开发一个n层系统,并在解决一些数据库性能问题。 我们一直在研究的一个领域是数据库服务器和应用服务器之间的延迟。在我们的测试环境中 两个盒子之间的平均ping时间在0.2ms的范围内,但在客户端站点上,它在8.2ms的范围内更多。就是它 我们应该担心什么?
对于您的普通系统,您认为什么是合理的延迟?您将如何测试/测量延迟?
卡尔
答案 0 :(得分:5)
简而言之:不!
您应监控的是查询的全局性能(即传输到DB +执行+传输回服务器)
您可以使用性能计数器来监控查询通常执行的时间。 您可能会看到您的结果超过毫秒区域。
没有“合理的延迟”这样的事情。您应该考虑“项目的合理延迟”,这将根据您的工作情况而有很大差异。 人们对实时交易平台和只读业余网站没有同样的期望。
答案 1 :(得分:4)
对于非常不合时宜的回复感到抱歉,但在我查找其他人在其应用服务器和数据库服务器之间实现的网络延迟的指标时,我偶然发现了这个问题。无论如何,我注意到了其他答案
无论如何,简而言之:是的,网络延迟(通过ping测量)可以产生巨大的差异。
如果您的数据库响应是.001ms,那么您将看到从0.2ms到8ms ping的巨大影响。我听说数据库协议很简陋,如果是真的意味着它们会受到网络延迟较慢而不受http的影响。
而且很可能,如果你运行1个查询,那么添加8ms来获取db的回复并不重要。但是如果你正在进行10,000次查询,这些查询通常会出现错误代码或非优化使用ORM,那么你将等待额外的80秒进行8ms ping,其中0.2ms ping,你只需要等待4秒。
作为我自己的政策问题,我从不让客户端应用程序直接联系数据库。我要求客户端应用程序始终通过应用程序服务器(例如REST Web服务)。这样,如果我不小心遇到“1 + N”ORM问题,那么它就不会那么有影响力了。我仍然会尝试解决潜在的问题......
答案 2 :(得分:3)
在基于Linux的服务器上,您可以使用tc命令自行测试延迟的影响。
例如,此命令将为通过eth0
的所有数据包添加10毫秒的延迟tc qdisc add dev eth0 root netem delay 10ms
使用此命令删除延迟
tc qdisc del dev eth0 root
此处提供更多详细信息: http://devresources.linux-foundation.org/shemminger/netem/example.html
所有应用程序都会有所不同,但我确实看到10ms延迟对系统性能产生重大影响的情况。
答案 3 :(得分:1)
answers.com的一位负责人表示,根据他们的研究,网页加载的400毫秒等待时间大约是他们第一次开始让人们取消页面加载并转到其他地方的时间。我的建议是查看从原始客户请求到履行的整个过程,如果您在那里做得好,则无需进一步优化。 8.2 ms与0.2 ms在数学意义上呈指数级增大,但从人类意义上讲,没有人能真正感知8.0 ms的差异。这就是他们在比赛中完成照片的原因;)