【问题标题】:Running SQL Server & IIS on same Windows server without making site go slow在同一个 Windows 服务器上运行 SQL Server 和 IIS,而不会使网站变慢
【发布时间】:2017-03-22 05:50:04
【问题描述】:

我有一个专用的 Windows 2008 Server,配备 32GB RAM 和 Intel Xeon E3-1230 v2 处理器和 SQL Server 2008(标准版)。

有一个繁重的数据导入和清理过程,即从每天运行的 CSV 文件导入数据,整个过程大约需要 8-10 小时。

我的问题是,托管在同一台服务器上的 ASP.NET MVC 网站在导入过程中会在一小段时间内变慢。大多数情况下,它运行良好,但在此期间,网站将变得无响应且缓慢。导入过程不会触及站点使用的数据库。

  1. 我有哪些选择可以确保我的网站在整个过程中顺利运行?
  2. 是否有可能实现,记住在同一台服务器上导入数据期间会执行一些非常耗费资源的操作?

导入过程是一个 Windows 应用程序,它使用 SSIS 包导入数据,然后运行服务器 SQL Server 存储过程。

【问题讨论】:

  • 没有什么可以做的。您可以处理的一件事是尝试在站点收到非常低的流量时运行繁重的工作。如果可能,您可以将流程外包给另一台服务器
  • 问题是,如果导入过程在高峰时间也占用了所有可用内存,IIS 必须排队等待,直到它再次可用。是否可以将进口分成更小的块? MVC网站做​​了什么样的流程?是否可以将 CSV 文件的处理分成不同的步骤?
  • @DanieSchoeman 导入过程不像一个文件导入。有数百个 csv 文件。在将这些文件放入 db 之后还会发生更多事情。我们称之为匹配。就像您在价格比较网站上看到的那样。 MVC 网站非常简单。它只是显示了导入过程准备的数据。
  • 由于导入过程不使用相同的网站数据库,您是否可以为导入过程db创建一个单独的实例并使用资源池为导入过程设置最大cpu和内存msdn.microsoft.com/en-us/library/bb934084.aspx
  • 另一种选择:将您的 SQL Server 限制为仅使用最大内存量。这可以帮助 IIS 确保它至少有一定数量的剩余内存。在您的特定情况下,实际上需要限制内存的可能是 SSIS 和可能的 SSRS。首先要了解 SQL 和 SSIS 在一天中的不同时间和慢速时间实际使用了多少内存——这可能会给你一个线索。另外——如果这个服务器是虚拟的,那么更多的细节是相关的。

标签: asp.net sql-server sql-server-2008 iis window-server


【解决方案1】:

Ankit 的快速解决方案是在您的专用托管服务器上安装 2 个虚拟机。一个 VM 可以托管您的网站,另一个 VM 可以托管您的数据库和导入过程。

从性能的角度来看,这是个案,因为您的问题非常普遍和广泛,因此社区不禁提示您仍然可以遵循。

  1. 为您的网站创建单独的应用程序池。

  2. 您可以根据需要为导入、IIS 等进程分配最小和最大 CPU 和内存利用率。

  3. 检查时钟速度;它是否在您的处理器和虚拟内存之间匹配。无论您拥有多少虚拟内存,您都需要 RAM 与处理器内核同步。

  4. 由于 SQL Server 标准版支持最多 4 个处理器内核。检查您的专用服务器中有多少内核。

如果发现任何其他提示,我们会​​更新。

【讨论】:

  • 这些看起来不错的建议。我不是真正的服务器管理员,所以不确定如何创建虚拟机。你能指导我到一个我可以学习如何做到这一点的地方吗?除此之外,请提供这些问题的答案 1.) 我需要在两个 VM 中安装 window 和 SQL Server 吗? 2.) 我可以假设在虚拟机到位的情况下,我的网站和导入过程都将获得预定义的资源容量吗?
  • 对于 VM 创建,您需要有一些软件指南,您可以从 youtube 获得这些指南。当涉及到您的问题时 1. 不,您不需要在两个 VM 上都安装 SQL Server,否则创建 VM 的整个目的将失败。 Windows 安装需要安装在两台机器上,但 SQL Server 可以安装在另一台机器上。 2. 因为您将创建两个虚拟机,它们将共享您的物理机的硬件资源。因此,您可以根据需要分配资源。如果您需要更多资源用于导入过程,请将其与网站托管的 VM 分开。
  • 接受这个答案,但也发布了我自己关于我们最终做了什么的答案。
【解决方案2】:

我从社区那里得到了一些非常好的想法来解决我的问题。拥有两台虚拟机是一个非常好的选择,但它受到我对该主题缺乏了解的限制。 Anil 在 cmets 中提出的解决方案也是一个很好的解决方案,我们可以使用两个单独的 SQL Server 实例并使用资源管理器来限制资源,但为此我们必须首先升级到企业版,这对我们目前来说是不可行的。

因此,考虑到成本,我们决定尝试 Varnish。计划是获得一个单独的 Linux VPS 并在那里设置 Varnish。 Window Server 将成为 Varnish 的后端。一旦我们的导入过程准备好数据,我们的页面或多或少保持静态,我认为我们会做得很好。

我希望它对某人有所帮助。我仍然会接受 Rahul 提供的答案,因为在理想世界中这似乎是一个更好的解决方案。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 2020-06-27
    • 2016-05-10
    • 2012-12-05
    • 2012-07-26
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多