2010-09-22 168 views
6

我的网站一直使用持久连接,基于我对它们的理解,没有理由不这样做。为什么关闭连接时可以重复使用?我有一个网站,总共访问大约7个数据库。这不是一个巨大的交通网站,但它足够大。我应该使用它们,你持续坚持什么?持久性与非持久性 - 我应该使用哪一种?

回答

9

随着持续连接:

  • 您不能建立事务处理有效
  • 相同的连接
  • 应用上是不可能的用户会话不可扩展。随着时间的推移,您可能需要对其进行扩展,并且需要对持久连接进行管理/跟踪
  • 如果脚本无论何种原因无法释放表上的锁,那么以下任何脚本都将无限期阻塞,并且应该重新启动db服务器。使用事务,事务块也将传递到下一个脚本(使用相同的连接),如果脚本执行的事务块结束之前结束,等

持久连接不带任何东西,你可以用非持久性连接做。
那么,为什么要使用它们呢?
唯一可能的原因是性能,在创建到SQL Server的链接开销很高时使用它们。这取决于很多因素,如:

  • 数据库类型
  • MySQL服务器是否在同一台机器上,如果没有,能走多远?可能超出您的本地网络/域名?
  • 的机器上的MySQL坐在

一个多少被其他进程超载总是可以替换非持久连接持久连接。它可能会改变脚本的性能,但不会改变它的行为!

商业关系数据库管理系统可能会被打开并发连接数进行许可,这里的永久连接misserve

+0

+1讨论MySQL不是免费用于商业用途的信息。我想知道有多少人没有意识到这一点。虽然,支付许可证相当便宜。 – NotMe 2010-09-22 03:36:37

+0

废话我不知道......我得看看,谢谢。 – Webnet 2010-09-22 13:34:26

+0

有没有一种方法可以跟踪建立/关闭连接的开销?我得到的错误涉及太多的连接,所以我想知道是否持久是问题的一部分。当你说交易是什么意思,只是查询? – Webnet 2010-09-22 13:35:25

1

我对该领域的知识有限,所以我不能给你关于这个主题的许多细节,但据我所知,创建连接并将它们交给一个线程的过程确实会花费资源,所以我会如果我是你,就避免它。无论如何,我认为这些决定大部分不能一概而论,取决于业务。

例如,如果您的应用程序与数据库连续进行通信,并且只会在应用程序关闭时停止,那么可能需要持续连接,因为您避免了之前提到的过程。但是,如果您的应用程序只是偶尔与数据库通信以获取次要信息,那么关闭连接可能会更加理智,因为您不会在未使用的打开的连接上浪费资源。

此外还有一种称为“连接池”的技术,您可以在其中创建一系列连接并将其保留在其中以供其他应用程序使用。在这种情况下,连接对数据库持久,但对应用程序不持久。

注意:MSSQL中的连接始终对数据库持久,因为连接池是默认行为。