我们正在开发一款桌面应用程序,采用客户端-服务器架构。目前,我们的 SQL 服务器托管在 PC 上。当有人从某个位置(与托管服务器的国家/地区不同)使用应用程序时,响应非常慢。我们正在查看正在执行的查询以及表单加载时的往返次数。但是,我想知道如何测量服务器本身的性能 - 即每单位时间传输了多少数据。我还应该测量什么?哪些因素会影响此数据传输?
谢谢
答案1
正如您在提到往返时所表明的那样 - 在这种情况下,延迟可能比带宽更重要。
举一个简单的例子,如果您有一个表单,在加载表单时需要(比如说) 20 个连续查询,并且每个查询都是格式正确且合理高效的,那么在 LAN 连接上收集所有结果所花费的总时间可能只有几毫秒或更少。
本地网络的往返时间(从同一 LAN 上的客户端 ping SQL 服务器可以看出)将小于 1 毫秒,在良好的现代网络上可能要少得多。但是,一旦您转到 WAN 连接,往返时间就会增加。通常,相邻国家之间的连接(例如英国与德国)需要 10-50 毫秒,而跨越大洋的连接(例如英国与美国)需要 50-100 毫秒。
您在本地用时不到 2 毫秒的一组查询现在需要 1-2 秒甚至更长时间才能完成。如果您在表单中有下拉列表之类的内容需要以交互方式重新填充,那么网络延迟严重的用户将获得非常糟糕的体验。
另一个副作用是,如果这些查询中的任何一个导致任何类型的锁定,那么随着您添加更多这些用户,其他所有人的整体性能也会下降,因为对于这些远程用户来说,这些锁保持的时间会更长。
有很多方法可以改善这种情况,但我并不是真正能给你建议的人。不过,我认为将查询合并为较少数量的存储过程调用可能是最有效的开始方式,并且改变应用程序行为,这样查询就不会因每个用户操作而触发,这也是明智之举。一旦你知道每个查询的成本有多高(就远程客户端性能而言),那么你应该能够更好地决定将精力集中在哪里。