我有一个Web应用程序,其中Web服务器和SQL Server 2008数据库位于同一服务器场中的不同框上。

如果我采取单片存储过程并将其分解成几个较小的存储过程,因此使客户端代码负责对多个存储过程而不是一个呼叫,而且我会注意到重大表现我的Web应用程序?


附加背景信息:

我有一个存储的过程,其中包含多百行代码,包含决策逻辑,更新语句,最后一个select语句,返回客户端的一组数据。

我需要将一块功能插入到我的客户端代码(从而在这个意义上,客户端代码是调用组件DLL的数据库服务器的ASP Web服务器。但是,存储过程正在更新记录集并在同一呼叫中返回UDPated数据,并且在之后,我的代码需要被称为,但在之前称为 / em>数据返回给客户端。

为了获得此功能来工作,我可能必须将现有的存储过程拆分为至少两个部分:一个存储的proc,以更新数据库的proc,另一个存储的proc和另一部分更新数据库中的数据库中检索数据。然后,我会在这些存储的proc调用之间插入新代码。

当我看这个问题时,我忍不住认为,从代码维护的角度来看,将 all 孤立我的更新并选择语句变瘦会更好存储的procs并将业务逻辑留给客户端代码。这样,只要我需要将功能或决定逻辑插入到我的客户端代码中,我需要做的就是更改客户端代码,而不是修改庞大的存储过程。

虽然使用薄的存储过程可能会从代码维护的视图中更好,但我可以通过增加到数据库的次数来体验多少性能疼痛?数据的最终结果是相同的,但我频繁地触摸数据库。当应用程序缩放以处理需求时,这种方法如何影响性能?

我不是一个人在其他一切上方放置性能优化,尤其是在影响代码维护时,但我不想在脚下射击自己,并在Web应用程序规模时创建头痛。

有帮助吗?

解决方案

一般来说,作为拇指的规则,您应该至少将往返SQL Server最少。

服务器上的“命中”非常昂贵,它实际上更昂贵的是将相同的操作与3部件相同,然后在服务器上做1个命中和其他一切。

在维护中,您可以从客户端调用1个存储的proc,该Proc调用另外2个proc。

我有一个具有极端搜索逻辑的应用程序,这就是我所做的事情。

一些基准测试结果...... 我有一个客户端的虽然有服务器掉下来,当我们检查问题时,当我们检查问题时,它是对SQL Server的许多巡航,当我们最小化它时,服务器恢复正常。

其他提示

它会影响它。我们使用WebLogic Server,其中所有业务逻辑都在连接到DB / 2数据库的AppServer中。我们大多数使用项目中的实体bean,并且对于大多数商业服务,调用使多次探讨DB,没有明显的副作用。(我们在需要时调整一些查询是多表)。

真的取决于您的应用程序。您将需要基准。

良好硬件的SQL Server可以处理每秒数千笔交易。

实际上分解了一个大的存储过程可能是有益的,因为你只能每批次拥有一个缓存的查询计划。分为几个批次意味着它们每个都会获得自己的查询计划。

你应该在代码维护方面肯定是错误的,但是要确定的基准。

鉴于查询计划景观将Chnage,您应该准备好更新索引,也许创建不同的覆盖索引。

本质上讲,这个问题与紧密与耦合密切相关。

在一开始:您可以始终采取单片存储过程并将其分解为几个较小的存储过程,全部由一个存储的过程调用,从而使客户端代码仅负责呼叫一个存储过程。

除非客户端将做某事(更改数据或向用户提供状态),我可能不会建议将多个呼叫移动到客户端,因为您将更紧密地将客户端耦合到存储过程的操作顺序,而没有显着的性能增加。

无论哪种方式,我都会将其基准并从那里进行调整。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top