通过缓存提高SQL服务器的性能是否可行?

时间:2012-02-24 21:10:23

标签: c# .net sql sql-server-2008-r2 redis

提高SQL Server 2008R2数据库速度的最常用且易于实施的解决方案是什么? .Net 3.5申请。

我们有一个具有以下属性的应用程序:
- 少量同时客户(MOST约200人) - SQL服务器端的复杂数学运算
- 我们正在模仿oracle的row-level security(因此使用tvf和storedproc而不是直接查询表) - 主要问题是用户执行大量的更新/插入/删除/计算,并且他们吓坏了,因为他们需要在这些操作完成时等待页面重新加载。

我需要澄清的问题如下:

  1. 什么是更快:从SQL Server返回整个数据集并在C#端执行数学函数,或在sql端执行计算函数(因此,不返回额外的列)。或者只是硬件依赖?
  2. 缓存是否会提高性能(例如,如果我们添加redis缓存)。或缓存解决方案仅适用于大量客户?
  3. 预先计算一些数据并存储在数据库中的某个位置是不好的做法(因此,当用户请求时,它已经计算好了)。或者这就是缓存假设要做的事情?如果这不是一个坏习惯,如何在有可用资源的情况下配置SQL Server进行计算?
  4. 如果仍然需要访问数据库并查看是否有任何记录更新,缓存如何提高性能?
  5. 也欢迎提出一般性建议和意见。

1 个答案:

答案 0 :(得分:7)

让我们将答案分为两部分,即执行查询和缓存以提高性能。 我相信你应该首先解决SQL服务器上的负载,并尝试优化其上运行的进程,这应该解决了实现任何缓存的大部分需求。

从您的问题看来,您的系统既可用于事务处理,也可用于聚合/计算,当这两个任务锁定彼此的资源时,这通常会导致冲突。执行数学运算的长查询可以锁定/保持UI所需的对象。 优化这些系统以并排工作并提高查询效率是提高性能的关键。

首先,我会用你的问题。什么更快?取决于您正在执行的实际聚合,如果您正在处理集合操作,即列的SUM / AVG,请将其保留在SQL中,另一方面,如果您发现自己在过程中有光标,则将其移动到C#。游标会杀死你的表现! 您询问将数据聚合到一起并稍后查询该存储库是否是不好的做法,这是最佳实践:)。您最终将拥有一个数据库来满足交易型,高节奏客户端和另一个存储聚合信息的数据库,这将快速,轻松地满足您的其他需求。如果你拥有一个数据仓库,那么下一步将会产生这样的结果,所以当你有大量的信息和计算时,这绝对是你想要前进的地方。

最后,缓存,这很棘手,实际上取决于您需求的具体性质,我会说采取上述方法,花时间改进流程,我希望最终结果会使缓存变得多余。

这个任务最好的朋友之一是SQL Profiler,在stmt上运行跟踪:已完成以查看最高持续时间/ io / cpu,并首先选择它们。

祝你好运!