【问题标题】:Can we use single database connection to execute multiple database select statements simultaneously from multiple threads?我们可以使用单个数据库连接从多个线程同时执行多个数据库选择语句吗?
【发布时间】:2011-12-01 14:47:50
【问题描述】:

我想使用来自多个线程的单个数据库连接在 MS SQL Server 中同时读取(或仅执行选择语句)。是否可以从不同的线程同时执行所有这些选择语句。

我在 Linux 环境中使用来自 C++ 的 MS SQL Server。我需要分别创建数据库连接池进行读写。所以我想知道是否有可能在线程之间共享相同的连接以只读。

select 语句可能返回多行(多于一行或结果集)。这会是个问题吗?

【问题讨论】:

    标签: sql-server database multithreading


    【解决方案1】:

    是的,会有问题。一次只能执行一个命令。 但是你可以使用多个连接,连接池非常适合 SQL 服务器。

    【讨论】:

    • 确实如此。在需要时随时创建新连接。让 .Net 为您管理可用的连接。连接池是一件很棒的事情。
    • 我在 Linux 环境中使用来自 C++ 的 MS SQL Server。我需要分别创建数据库连接池进行读写。所以我想知道是否有可能在线程之间共享相同的连接以只读。
    【解决方案2】:

    不要跨线程使用相同的连接。每个连接只能执行一个命令。为每个线程创建一个连接。我建议创建一个帮助类以使您更轻松。

    【讨论】:

      【解决方案3】:

      我想使用来自多个线程的单个数据库连接来读取(或只执行选择 语句)同时在 MS SQL Server 中

      你应该开始阅读文档,而不是开始有你想要的有趣的想法。

      是的,您可以这样做(MARS 是主题 - 仔细阅读),但一个连接始终只能有一个事务上下文,因此这是在一个事务中进行多次选择的好方法(插入、几个 upsert 等)但作为编程数据库连接的通用方法很糟糕。

      按照说明进行操作,这意味着在您需要时打开一个连接,完成后关闭它,不要害怕运行多个连接。

      【讨论】:

        【解决方案4】:

        如果您担心 SQL Server 中的多进程,则必须考虑两个选项。

        1. 并行设置
        2. AlwaysOn 设置

        第一个通过执行具有多个 cpu 逻辑核心的单个查询来帮助您;当您有并发连接时,第二个可以帮助您实现负载平衡。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-17
          • 1970-01-01
          • 1970-01-01
          • 2013-04-07
          • 2021-07-02
          • 1970-01-01
          • 1970-01-01
          • 2014-10-12
          相关资源
          最近更新 更多