SQL服务器使用缓存可以提高性能吗?

5
什么是提高SQL Server 2008R2数据库和.Net 3.5应用程序速度最常见和易于实现的解决方案?
我们有一个具有以下属性的应用程序: - 同时在线客户端数量很少(最多不超过200个)。 - SQL服务器端进行复杂的数学操作 - 我们正在模拟类似于Oracle的行级安全(因此使用tvf和storedprocs而不是直接查询表) - 主要问题是用户执行大量的更新/插入/删除/计算,他们会因为需要等待页面重新加载而感到恐慌。
我需要澄清的问题如下:
  1. 什么更快:从SQL服务器返回整个数据集并在C#端执行数学函数,还是在SQL端执行计算函数(因此不返回额外列)。或者这只是硬件相关的?
  2. 缓存是否会提高性能(例如如果我们添加redis缓存)。或者缓存解决方案仅适用于大量客户端?
  3. 预先计算一些数据并将其存储在数据库中是否是一种不好的做法(因此,当用户请求时,它将已经被计算)。或者这就是缓存应该做的事情?如果这不是一种不好的做法,如何配置SQL服务器以在有可用资源时进行计算?
  4. 如果缓存仍然需要访问数据库并查看是否更新了任何记录,那么缓存如何提高性能?

欢迎提供一般建议和评论。

1个回答

7
让我们将答案分为两个部分,查询执行的性能和缓存以提高性能。我认为您应该从解决SQL服务器上的负载并尝试将其上运行的流程最大化开始,这应该解决大部分实现任何缓存的需求。
从您的问题中可以看出,您拥有一个用于事务处理和聚合/计算的系统,这通常会导致这两个任务锁定彼此的资源时产生冲突。执行数学运算的长查询可能会锁定/持有UI所需的对象。优化这些系统以便并行工作并提高查询效率是提高性能的关键。
首先,我将使用您的问题。什么更快?这取决于您正在执行的实际聚合操作。如果您正在处理一组操作,即某一列的SUM / AVG,请将其保留在SQL中;另一方面,如果您发现自己在过程中使用了游标,请将其移动到C#中。游标会降低性能!您问是否将数据汇总在一起并稍后查询该存储库是否不好的做法?这是最佳实践。您最终将拥有一个数据库,为交易高速客户提供服务,并且另一个数据库存储聚合信息,这将很快且轻松地满足您的其他需求。将其提升到下一个级别将使您拥有数据仓库,因此这绝对是您需要关注的方向,尤其是在拥有大量信息和计算时。
最后,缓存是棘手的,而且确实取决于您特定需求的性质。我建议采用上述方法,在改进流程方面花费时间,我预计最终结果将使缓存变得多余。
对于此任务,SQL Profiler是您最好的朋友之一,请在stmt:completed上运行跟踪以查看哪些持续时间/ io / cpu最长,并首先选择它们。
祝你好运!

1
绝对同意关于 SQL Profiler 的观点。 - Micky McQuade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接