如何一次处理多个数据连接

时间:2015-11-17 06:08:30

标签: asp.net-mvc database

我有一个ASP.NET MVC应用程序,它从多个数据库中收集数据。

数据库包含各种站点的信息,每个新站点都有一个新的数据库。每个站点的数据库在两个点连接,从站点到总部。

Web应用程序每分钟从站点更新数据,并且每分钟将数据提供给HQ(通过另一个Web应用程序)。有时应用程序响应非常缓慢,而且根据我的调查,可能是因为连接池开始迅速填满。

我想问一下这种应用程序的最佳方法是什么,我可以从中获得最佳性能。欢迎任何指导。

1 个答案:

答案 0 :(得分:2)

如何提高与数据库相关的Web应用程序性能,实际上取决于您的体系结构。但是你应该遵循一些一般规则:

  1. 检查线程饥饿:在Web服务器上,.NET Framework 维护用于为ASP.NET提供服务的线程池 要求。当请求到达时,池中的线程是 派遣处理该请求。如果请求已处理 同步地,处理请求的线程被阻止 正在处理请求,并且该线程无法提供服务 另一个请求。

    这可能不是问题,因为线程 池可以做得足够大,以容纳许多阻塞的线程。 但是,线程池中的线程数是有限的。在 处理多个同时长时间运行的大型应用程序 请求,可能阻止所有可用线程。这个条件是 称为线程饥饿。达到此条件时,Web 服务器队列请求。如果请求队列已满,则为Web 服务器拒绝HTTP 503状态的请求(服务器太忙)。

    对于“线程饥饿”,最好的方法是使用“异步 方法“。请参阅here以获取更多信息。

  2. 尝试使用block作为你的datacontext,在完成后立即处理它们。

  3. 交易中的数据量巨大:您应该检查您的代码。 可能是您使用了太多数据而无需全部数据。对于 例如,您传输所有可能只需要一个的对象 对象的属性。在这种情况下,使用“投影”(请参阅​​here 一个例子。

    您也可以使用“延迟加载”或“急切加载” 场景。但请注意,这些都不是神奇的工具 每个场景。在某些情况下,“延迟加载”可以提高性能 在其他人“渴望加载”使事情更快。这取决于你的 深刻理解这两个术语以及您的问题, 你的代码和你的设计。

  4. 在服务器端或客户端过滤您的数据。在服务器端过滤数据有助于尽可能减少服务器负载和网络流量。它还使您的应用程序更具响应性并具有更好的性能。使用IQueryable Interface进行服务器端过滤(有关详细信息,请查看here)。 使用服务器端过滤的一个副作用是具有更好的安全性
  5. 检查您的架构,看看您是否有任何瓶颈。一个 被调用太多的控制器,处理批量的方法 具有大量数据的对象,数据库中接收的表 不断要求,都是瓶颈的候选人。

  6. 在适用于大多数请求的数据时,用于兑现数据。但是又一次 根据您的情况明智地使用兑现。错误的兑现使 你的服务器很慢。

  7. 如果您认为您的速度问题完全在您的数据库上,那么最好的方法是使用sql profiling工具找出您遇到危急情况的点。也许重新设计你自己的表可能是一个答案。尝试尽可能地分开阅读和写作表。可以通过创建适当的视图来完成分离。另请检查this检查表以监控数据库。