草庐IT

c# - 通过缓存提高SQL Server的性能是否可行?

coder 2023-07-17 原文

提高 SQL Server 2008R2 数据库和 .Net 3.5 应用程序速度的最常见且最容易实现的解决方案是什么。

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

我需要澄清的问题如下:

  1. 什么更快:从 sql server 返回整个数据集并在 C# 端执行数学函数,或在 sql 端执行计算函数(因此,不返回额外的列)。还是仅取决于硬件?
  2. 缓存会提高性能吗(例如,如果我们添加 redis 缓存)。或者缓存解决方案仅适用于大量客户端?
  3. 预先计算一些数据并存储在数据库中的某个地方是否是一种不好的做法(因此,当用户请求时,它已经被计算)。或者这就是缓存应该做的?如果这不是一个坏习惯,您如何配置 SQL Server 在有可用资源时进行计算?
  4. 如果仍然需要访问数据库并查看是否有更新的记录,缓存如何提高性能?

也欢迎提出一般建议和意见。

最佳答案

让我们将答案分为两部分,查询执行的性能和缓存以提高性能。 我相信您应该从解决 SQL Server 上的负载开始,并尝试最大限度地优化在其上运行的进程,这应该可以解决实现任何缓存的大部分需求。

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

首先,我将使用您的问题。什么更快?取决于您正在执行的实际聚合,如果您正在处理一组操作,即列的 SUM/AVG,请将其保留在 SQL 中,另一方面,如果您发现自己在过程中有游标,请将其移动到C#。光标会扼杀你的表现! 您询问将数据放在一边并稍后查询该存储库是否是一种不好的做法,这是最佳做法:)。您最终将拥有一个满足事务性、高节奏客户需求的数据库,以及另一个存储聚合信息的数据库,这将可以快速轻松地满足您的其他需求。将它带到下一步将导致您拥有一个数据仓库,因此当您拥有大量信息和计算时,这绝对是您想要前往的地方。

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

执行该任务的最好 friend 之一是 SQL Profiler,在 stmt:completed 上运行跟踪以查看最高持续时间/io/cpu 是什么,然后首先选择它们。

祝你好运!

关于c# - 通过缓存提高SQL Server的性能是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438096/

有关c# - 通过缓存提高SQL Server的性能是否可行?的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  4. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  5. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  6. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  7. ruby-on-rails - Enumerator.new 如何处理已通过的 block ? - 2

    我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m

  8. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  9. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  10. ruby - 检查日期是否在过去 7 天内 - 2

    我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/

随机推荐