C# SqlConnection缓存DNS
C# SqlConnection caching DNS
我们正在将数据库移动到新的数据中心。我的迁移计划是更新所有客户端在连接时使用的 DNS 记录。
我已经通过启动一个循环执行以下操作的进程对此进行了测试:
- 打开一个新的 SQL 连接,使用 DNS 条目作为服务器名称
- 使用该连接执行查询
- 关闭并处理 SQL 连接
虽然那是 运行,但我更新了 DNS 条目以指向新服务器。
查询将继续对旧服务器执行,除非我停止并重新启动进程。
我在使用 HttpClient 发送 Web 请求时尝试过同样的方法,似乎每 2 分钟刷新一次 DNS,但 SqlConnection 对象会一直保持原始分辨率,直到整个过程重新启动。我假设这是因为连接被合并,并且当它从池中获取连接时不会重新验证 DNS 条目。
理想情况下,我希望避免在迁移过程中不得不回收应用程序池和重启服务。有没有其他人经历过这种行为?如果是这样,您是否找到一种方法来强制 SqlConnection 重新评估它用作服务器名称的 DNS 条目?
有了连接池,连接和基础会话将被重新使用,直到连接从池中删除并创建新的连接。您可以通过调用 SqlConnection.ClearAllPools 来强制清除连接池以清除当前应用程序域的池。您也可以使用 Pooling=False
连接字符串关键字完全关闭连接池,但请注意性能损失可能相当大。
我们正在将数据库移动到新的数据中心。我的迁移计划是更新所有客户端在连接时使用的 DNS 记录。
我已经通过启动一个循环执行以下操作的进程对此进行了测试:
- 打开一个新的 SQL 连接,使用 DNS 条目作为服务器名称
- 使用该连接执行查询
- 关闭并处理 SQL 连接
虽然那是 运行,但我更新了 DNS 条目以指向新服务器。
查询将继续对旧服务器执行,除非我停止并重新启动进程。
我在使用 HttpClient 发送 Web 请求时尝试过同样的方法,似乎每 2 分钟刷新一次 DNS,但 SqlConnection 对象会一直保持原始分辨率,直到整个过程重新启动。我假设这是因为连接被合并,并且当它从池中获取连接时不会重新验证 DNS 条目。
理想情况下,我希望避免在迁移过程中不得不回收应用程序池和重启服务。有没有其他人经历过这种行为?如果是这样,您是否找到一种方法来强制 SqlConnection 重新评估它用作服务器名称的 DNS 条目?
有了连接池,连接和基础会话将被重新使用,直到连接从池中删除并创建新的连接。您可以通过调用 SqlConnection.ClearAllPools 来强制清除连接池以清除当前应用程序域的池。您也可以使用 Pooling=False
连接字符串关键字完全关闭连接池,但请注意性能损失可能相当大。