Nic*_*ges 4 sql-server delphi connection
我继承了一个使用ADO连接到SQL Server的传统Delphi应用程序.
该应用程序有一个"全局连接"的概念 - 它是一个在开始时打开的单一连接,然后在整个应用程序运行期间保持打开状态(可以是几天,几周或更长时间...... )
所以我的问题是:我应该采用这种方式做事还是应该切换到"connect-query-disconnect"做事方式?有关系吗?
切换将是一项非常重要的任务,但如果它意味着更好的性能,数据管理等,我会这样做.
afr*_*ier 10
嗯,这取决于你期望从中得到什么,以及它是什么样的应用程序.
使用单个长时间运行连接没有什么特别的错误,只要应用程序可以正常处理断开连接并在无法重新连接时恢复或记录/通知.
connect-query-disconnect设置的问题在于您添加了在每个查询上连接和断开连接的开销.这会减慢速度,在交互式GUI应用程序中,用户可能会注意到额外的开销.您还必须确保授权透明地处理(如果尚未透明).
同时,如果您可以将所有查询推送到后台线程并异步更新GUI,则可能会获得交互式性能提升.如果由于查询被序列化而出现争用,您可以相当容易地迁移到连接池系统并进一步改进.虽然这具有相当高的复杂性成本,但现在您正在寻求平衡收益与所涉及的工作的比较.
现在,我的最终回应是"如果没有破产,就不要修理它".你提出的改变是很多工作 - 这个应用程序的用户可以获得多少收益?还有其他问题可以解决,可能会使他们受益更多吗?
编辑:好的,所以它破了.好吧,至少缓慢,这对我来说都是一样的.如果你已经排除了SQL Server本身的问题,并且查询的执行速度尽可能快(即数据库模式是理智的,正确的索引可用,查询不是完全脑力,服务器有足够的RAM和足够快I/O,网络不是片状等等,然后是的,现在是时候找到提高应用程序本身性能的方法了.
简单地转移到连接查询 - 断开连接将使事情变得更糟,并且您发出的查询越多,下降就越大.听起来你需要重新构建应用程序,这样你就可以运行更少的查询,在后台运行它们,在客户端上更积极地缓存,或者所有3个的组合.
不要忘记让客户端表现更好意味着服务器端性能变得更加重要,因为如果客户端开始建立多个连接并并行发出多个查询,它可能会处理更高的负载.
正如弗雷泽先生之前所说的那样,一个全球性的联系本身并不坏。
如果您打算更改,首先要检测问题是什么。让我们看看一些场景:
某些屏幕(IOW:一组在业务实体中操作的 1..n 表单)速度很慢。可能的原因:
整个应用程序只会变慢。清单:
SELECT内部交易。在读提交隔离中,这只是开销,因为它会创建更多的网络流量。打开查询,检索数据并关闭数据集。WHERE类似 :的查询WHERE SomeFunction(table1.blabla) = @SomeParam。大多数情况下,那些不会使用索引导致读取整个表以选择所需的数据。如果是一个大表......在持久计算列上建立索引可以创造奇迹......[MSSQL HAT OFF]这就是我能想到的,没有更多细节...... ;-)
| 归档时间: |
|
| 查看次数: |
1719 次 |
| 最近记录: |