SQL数据库如何处理同时发生的请求?

这可能是一个简单的问题,但我很好奇:

数据库如何处理多个同时发生的请求,最明显的是读取? 是否每个请求都放在一个队列中,所以它一次只发生一次? 或者,对于多核处理器,是否可以同时处理多个请求?

我想这个问题的一个明显的扩展是:多核心CPU对数据库服务器有多重要?

我特别想到MS SQL Server 2008,但这个问题可能适用于大多数数据库服务器。

有很多不同的资源用于提供数据库服务(CPU,磁盘上的logging,内存位置等),任何时候都有争用,是的,所有需要使用该资源的资源都符合要求。 只要没有争用(多核系统上的两个线程,试图访问表中的不同logging),那么这些请求可以并行进行,直到它们再次争夺一些资源。

执行内部描述分布在MSDN中的几个主题上

  • 线程和任务结构
  • SQL Server批处理或任务计划
  • 查询处理架构

Slava的博客,从SQLOS开始- 释放了大量的信息。

为了理解基本原理,一个好的起点是事务处理:概念和技术 。

一个简短的综合将如下所示:每个SQL批处理创build一个请求 。 请求由任务拾取,任务由工作人员执行。 你可以认为在工人类似于“线程”(有一些差异)。 这意味着一个批处理(=请求)在单个线程上运行。 批处理中的某些语句可以从并行执行中受益,这些语句将在多个任务上执行,请参见并行查询处理 。

要回答多个CPU是否会使数据库受益:这取决于。 我会说“ 将CPU添加到处理器绑定的工作负载将增加工作负载吞吐量和性能 ”。