sql-server - 我应该保留这个 "GlobalConnection"还是为每个查询创建连接?

标签 sql-server delphi connection

我继承了一个旧的 Delphi 应用程序,它使用 ADO 连接到 SQL Server。

该应用程序有一个“全局连接”的概念——这是一个在开始时打开的单个连接,然后在应用程序运行的整个过程中(可以是几天、几周或更长时间)保持打开状态。 ...)

所以我的问题是:我应该保留这种做事方式还是应该切换到“连接-查询-断开”做事模式?这有关系吗?

切换将是一项不平凡的任务,但如果这意味着更好的性能、数据管理等,我会这样做。

最佳答案

嗯,这取决于您期望从中得到什么,以及它是什么类型的应用程序。

使用单个长时间运行的连接并没有什么特别的问题,只要应用程序可以正常处理断开连接并在无法重新连接时恢复或记录/通知即可。

连接-查询-断开连接设置的问题在于,您增加了每个查询的连接和断开连接的开销。这会减慢速度,并且在交互式 GUI 应用程序中,用户可能会注意到额外的开销。您还必须确保授权已得到透明处理(如果尚未处理)。

同时,如果您可以将所有查询推送到后台线程并异步更新 GUI,则可能会获得交互式性能提升。如果由于查询被序列化而出现争用,您也可以相当容易地迁移到连接池系统,并进一步改进。不过,这会带来相当高的复杂性成本,因此现在您需要平衡 yield 与所涉及的工作。

现在,我的最终 react 是“如果它没有坏,就不要修理它。”按照您建议的方式进行更改需要大量工作 - 该应用程序的用户可以获得多少 yield ?还有其他问题需要解决,可能对他们更有利吗?

编辑:好的,所以它坏了。好吧,至少慢一点,这对我来说都是一样的。如果您已经排除了 SQL Server 本身的问题,并且查询正在尽可能快地执行(即数据库模式是健全的,正确的索引可用,查询不是完全无脑的,服务器有足够的 RAM 并且足够快) I/O、网络是否不稳定等),那么是的,是时候寻找方法来提高应用程序本身的性能了。

简单地转向连接-查询-断开会让事情变得更糟,并且发出的查询越多,下降就越大。听起来您需要重新构建应用程序,以便可以运行更少的查询,在后台运行它们,在客户端上更积极地缓存,或者这三者的某种组合。

不要忘记让客户端性能更好意味着服务器端性能变得更加重要,因为如果客户端开始建立多个连接并并行发出多个查询,它可能会处理更高的负载。

关于sql-server - 我应该保留这个 "GlobalConnection"还是为每个查询创建连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16987620/

相关文章:

c# - 在 C# 中捕获 ActiveDirectory "addUser"事件?

Delphi 网络应用程序

delphi - 计算赫斯特指数

c++ - 在 C++ 程序中创建连接

ruby - 如何处理 ruby​​ Net/HTTP 中的连接超时错误?

mysql - 通过数据库保存流媒体文件(视频或音频或两者)的方式及其效果

sql - 如何将UNION查询结果移动到新表?

c# - 600K 记录的数据库或平面文件?

windows - TWebBrowser 和 IE 版本

java - 从 MS Access 输出获取 Unicode 数据将为 "???????????????????"