客户端应用程序中打开的 SqlConnections 与 SQL Server 中的进程之间有什么关系?

2023-12-08

我只是尝试对 SQL Server 数据库中的表进行简单的架构更改(通过使用 SMSS 中的设计工具)。每当我尝试保存更改时,它总是超时。我想知道这是否是由于现有的连接“锁定”了表。

作为一个实验,我决定终止连接。我查询 master..sysprocesses 以获取该数据库的当前 spid,并一一杀死它们,直到我能够保存我的架构更改。 (不是很科学,但我远不是 SQL Server 专家)。果然,当我杀死所有 spid(除了我使用 SMSS 的那个)后,我能够保存架构更改。

我想问一下ADO.NET SqlConnections和spids之间的关系。例如,如果客户端应用程序在 SqlConnection 对象上调用 Open(),我是否应该在 master..sysprocesses 中看到另一个 spid?如果我在该 SqlConnection 上调用 Close() 会怎么样? spid 应该消失吗?

我确信事情没有那么简单,因为我知道存在连接池的概念,但是有人可以阐明这种关系是如何运作的吗?

谢谢

David


如果连接字符串中的 pooling=false

SqlConnection.Open() and Close()将与 spid 的创建和销毁完全相关。这会导致性能非常慢:)

如果连接字符串中的 pooling=true

Calling SqlConnection.Open()将使用池中现有的物理连接,或者如果池中没有可用的物理连接,则创建一个新的。

创建新的物理连接将创建一个新的 spid,它将显示为新行sys.sysprocesses and sys.dm_exec_connections.

重用现有的池化物理连接只会重用现有的 spid,因此您SqlConnection.Open()不会对服务器端的这些表进行任何可见的更改。但是,可以使用 SQL Profiler 或 XEvent 通过查找来检测sp_reset_connection,这是一个由 SqlClient 调用的存储过程,它告诉服务器清除连接状态(例如,确保没有事务等)。

SqlConnection.Close()通常会将物理连接返回到池中,因此它不会从服务器中消失。物理连接实际上在幕后以各种方式关闭,例如被服务器终止,例如kill @spid and SqlConnection.ClearAllPools().

希望已经足够详细了,您还有什么想知道的吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

客户端应用程序中打开的 SqlConnections 与 SQL Server 中的进程之间有什么关系? 的相关文章

  • AWS lambda 和数据库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直在理论上了解到 创建与数据库的新连接是昂贵的操作 因此 我们应该保持打开的连接池并将其用于数据库操作 在考虑 AWS lambda 时 假
  • 如何为 ADO.NET 拆分 Oracle sql 语句

    拆分 SQL 语句以发送到 Oracle ADO NET 客户端的正确方法是什么 例如 假设您在文本文件中有以下代码并且想要执行这些语句 CREATE TABLE foo bar VARCHAR2 100 INSERT INTO foo b
  • Firebird ADO.NET 4.10.0.0 数据提供程序是否可以与 Firebird 3.0 一起使用?

    我目前正在尝试将我的 ASP net 4 5 项目连接到最近发布的 Firebird 3 0 我使用的是 Visual Studio 2015 社区版 Firebird 3 64 位 并使用 NuGet 获取 ADO NET 4 10 0
  • 如何在没有 SSL 的情况下连接到 MySQL 数据库

    我正在尝试连接到本地 MySQL 数据库 我有这个连接器 using MySqlConnection conn new MySqlConnection Database Studentenverwaltung Port 3306 Data
  • 第三方 Oracle .NET 提供商的比较

    我正在清理 Oracle 数据库应用程序 在此应用程序中 性能和易于访问是最重要的考虑因素 它必须不妨碍您 让您以自由且不受限制的方式获取数据 这样做的同时 必须very快速地 当它不能很快时 它必须是多线程的 这样才不会冻结系统 所有这些
  • 清理 .NET 中动态 SQL 中的表/列名称? (防止SQL注入攻击)

    我正在生成一些动态 SQL 并希望确保我的代码是安全的SQL注入 http en wikipedia org wiki SQL injection 为了便于论证 这里是一个关于如何生成它的最小示例 var sql string Format
  • 是否应该重用 SqlConnection、SqlDataAdapter 和 SqlCommand 对象?

    我正在使用一个 DAL 对象 该对象的布局类似于以下代码 我简化了很多代码只是为了展示设置 public class UserDatabase IDisposable private SqlDataAdapter UserDbAdapter
  • 如何使用 .NET 2.0 捕获 using 块中的异常?

    这些天 当我有一个实现 IDisposable 的对象时 我尝试越来越多地利用 using 块 但我还没有弄清楚的一件事是如何像在正常的 try catch finally 中一样捕获异常 有任何代码示例可以为我指明正确的方向吗 编辑 阅读
  • 为什么连接没有在我的 iSeries/ASP.NET MVC 4 应用程序中重用?

    我们正在 Windows 2008 服务器场上运行 MVC 4 Web 应用程序 我们一直在尝试将服务器场升级到 Windows 2008 R2 64 位服务器 但在 iSeries 运行 V7R1 上遇到了连接池问题 我们经常调用 DB2
  • 从实体框架模型构建数据库架构

    我发现 EF 可以根据现有数据库架构更新模型 然而 我完全从头开始 那我不想建表了rebuild它们位于 EF 模型文件中 有没有一种方法可以绘制模型文件 并自动为我创建 SQL 表 不幸的是 您必须等待 EF 版本 2 这是一个链接 ht
  • 将 MySQL 与实体框架结合使用 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在 Google 上找不到任何有关实体框架 MySQL 的信息 所以我希望有人知道 已发布 获取适用于
  • ALL 的 SQL 参数

    我想知道SQL中是否有一个参数适用于所有 不是 例如 我现在正在编写一个搜索表 如果用户不在文本框中输入某些内容 则意味着忽略该特定参数并显示该字段的所有内容 我知道您可以为每种情况创建单独的 OLEDB 或 SQL 命令 并且它会起作用
  • 调用 new SqlConnection() 会挂起程序

    这个把我难住了 我什至没有尝试连接到数据库 当这段代码到达我实例化一个新的 SqlConnection 对象的行时 它只是挂在那里 不会抛出异常或任何东西 我已经尝试将其编译为2 0 3 5和4 0 它们都挂了 当然 它也适用于我的机器和你
  • 尝试使用指向 ODBC DSN 的连接字符串时出现关键字不支持异常

    我为我的 Asp Net MVC 应用程序的数据库访问创建了一个 ODBC DSN 主要原因之一是它可以轻松地将数据库凭据 例如服务器地址 端口 用户名和密码 置于源代码控制之外 而不会妨碍我的发布能力 所以我将连接更改为DSN MyDSN
  • ASP.NET/ADO.NET:处理 .NET 对象内的许多数据库连接?

    我们有一个 NET 对象 它对数据库进行大量读 写操作 在该对象 或使用它的 ASP 页 的整个生命周期中 它可能会通过查询 更新来访问数据库 1 到 10 次 它不是在每次对象需要访问数据库时打开和关闭数据库连接 而是只是在实例化期间打开
  • JDBC中为什么要关闭连接?如果我们不这样做,会发生什么

    在java中与数据库通信 我们经常遵循以下步骤 加载驱动程序 建立连接 创建声明或PreparedStatement get the ResultSet 关闭连接 我很困惑我们应该关闭连接 都说创建连接很昂贵 所以为什么我们不能这样做 st
  • SAP Hana DB SQL 中声明数组/表变量值时出现错误

    我试图添加一个声明的变量来替换 where in 子句中的硬编码值列表 研究 Hana 如何处理数组变量 似乎我可以通过声明一个数组 然后直接在其上使用选择或首先将其取消嵌套到表中来做到这一点 但我不断收到无法解决的错误 当我这样尝试时 D
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • 获取给定EntityType的导航属性

    我在用VS2010 EF4 0 需要如下功能 private string GetNaviProps Type entityType eg typeof Employee NorthwindEntities en new Northwind
  • ADO.NET SQLServer:如何防止关闭的连接持有S-DB锁?

    i Dispose http msdn microsoft com en us library system data sqlclient sqlconnection close aspx一个 SqlConnection 对象 但是当然它并

随机推荐