用缓存提高SQL服务器的性能可行吗?
什么是最常见和易于实施的解决方案,以提高SQL Server 2008R2数据库的速度& .Net 3.5应用程序。用缓存提高SQL服务器的性能可行吗?
我们有一个应用程序,具有以下属性:
- 少数同时客户端(MOST约200)。
- 在SQL服务器端的复杂数学运算
- 我们都在模仿一些Oracle的row-level security(因此使用TVF的和storedprocs,而不是直接查询表) -The主要问题是,用户执行的大量更新/插入/删除/计算,他们因为需要等待页面重新加载而完成这些操作而吓坏了。
我需要澄清的问题如下:
- 什么是快:从SQL Server返回的整个数据集,并在C#方执行的数学函数,或SQL方面进行运算功能(因此,没有返回额外的列)。还是只有硬件依赖?
- 缓存是否会提高性能(例如,如果我们添加redis缓存)。或缓存解决方案只适用于大量客户端?
- 预先计算某些数据并将其存储在数据库的某个位置是不好的做法(所以,当用户请求时,它已经被计算)。或者这就是缓存想要做的事情?如果这不是一个错误的做法,那么当有可用资源时,如何配置SQL Server进行计算?
- 如果缓存仍然需要转到数据库并查看是否有更新记录,缓存如何提高性能?
一般建议和意见也欢迎。
让我们的答案分开两个部分,查询执行和缓存来提高,业绩的表现。 我相信你应该先解决你的SQL服务器上的负载问题,并尝试优化它上面运行的进程到最大限度,这应该可以解决实现任何缓存的大部分需求。
从你的问题看来,你有一个用于事务性处理,也为聚合/计算,这往往会导致冲突时,这两个任务锁定对方资源的系统。执行数学运算的长查询可以锁定/保持UI所需的对象。 优化这些系统并行工作并提高查询效率是提高性能的关键。
首先,我会用你的问题。什么更快?取决于您正在执行的实际聚合,如果您正在处理集合操作(即列的SUM/AVG),请将其保留在SQL中,另一方面,如果您在过程中发现自己有光标,请将其移至C#。光标会杀死你的表现! 你问过把数据聚合在一边,后来查询该存储库是不好的做法,这是最佳做法:)。您最终将拥有一个数据库来处理事务性高速客户端和另一个存储汇总信息的数据库,这将快速轻松地满足您的其他需求。将它带到下一步将会产生一个数据仓库,所以当你有很多信息和计算时,这绝对是你想要标题的地方。
最后,缓存,这很棘手,真的取决于您的需求的具体性质,我会说采取上述方法,花时间改进过程,我期望最终的结果将使缓存冗余。
你最好的朋友之一是SQL Profiler,在stmt上运行一个跟踪:完成以查看什么是最高持续时间/ io/cpu并首先选择它们。
祝你好运!
绝对赞同SQL Profiler – 2012-02-25 07:18:35