我有一个网站,访问者数量不断增加,但响应时间却很慢。我不是服务器专家,因此我想在这里公开我的问题,以便获得一些反馈。该网站具有以下特点:
- 使用 ASP.NET Web Forms 开发(我很快将使用 ASP.NET MVC 实现新版本)。
- 它使用 PostgreSQL 9.1 数据库。
- 它是 100% 动态的,这意味着每个页面都是在运行时从数据库获取信息形成的。
- 托管在具有 2 核和 4 GB RAM 的云服务器中。
- Windows Server 2012 位于驱动器 C:
- PostgreSQL DB 位于另一个“硬盘”中,即驱动器 D:
- 每日平均访客人数为 2,500 人
通过查看任务管理器,我注意到有许多 PostgreSQL 进程消耗了 100% 的 CPU。另一个进程显示在“IIS 工作进程”中,但我没有看到它像 PostgreSQL 进程一样重要。因此,这里的主要问题似乎与数据库访问有关。当 CPU 使用率高时,网站响应极低,而且很难建立远程桌面连接。
我曾考虑过将云服务器升级到 4 核和 8 GB RAM,但首先我想从这里的专家那里获得反馈,以便采取最佳方法。我不是服务器专家,因此,我不想盲目采取措施。
答案1
如果不提供某种类型的查询示例,很难说出确切的问题是什么,但我首先建议让 DBA 检查您的常见查询,以确保您没有遗漏任何索引。对大型数据集进行大量全表扫描可能会导致严重的性能问题。
我的第二个建议是查看某种类型的缓存解决方案。具体来说,就是全页缓存。像 Varnish 这样的解决方案将允许您缓存整个渲染页面,这样您就不必执行重复的、昂贵的查询。 https://varnish-cache.org/- 请记住,这是根据具体情况而定的,并且出于显而易见的原因,您不应该期望缓存网站上的每个页面,除非没有动态内容。
最后,您可以考虑配置主/从复制。这将允许您创建n
副本来处理您遇到的不断增加的读取工作负载。请确保您对如何维护复制进行了足够的研究,因为它可能会给您的数据库管理任务增加一些开销
增加数据库实例大小将导致收益递减。如果存在 SQL 性能问题,我建议先解决此问题。