这可能是一个简单的问题,但我很好奇:
数据库如何处理多个同时发生的请求,最明显的是读取? 是否每个请求都放在一个队列中,所以它一次只发生一次? 或者,对于多核处理器,是否可以同时处理多个请求?
我想这个问题的一个明显的扩展是:多核心CPU对数据库服务器有多重要?
我特别想到MS SQL Server 2008,但这个问题可能适用于大多数数据库服务器。
有很多不同的资源用于提供数据库服务(CPU,磁盘上的logging,内存位置等),任何时候都有争用,是的,所有需要使用该资源的资源都符合要求。 只要没有争用(多核系统上的两个线程,试图访问表中的不同logging),那么这些请求可以并行进行,直到它们再次争夺一些资源。
执行内部描述分布在MSDN中的几个主题上
Slava的博客,从SQLOS开始- 释放了大量的信息。
为了理解基本原理,一个好的起点是事务处理:概念和技术 。
一个简短的综合将如下所示:每个SQL批处理创build一个请求 。 请求由任务拾取,任务由工作人员执行。 你可以认为在工人类似于“线程”(有一些差异)。 这意味着一个批处理(=请求)在单个线程上运行。 批处理中的某些语句可以从并行执行中受益,这些语句将在多个任务上执行,请参见并行查询处理 。
要回答多个CPU是否会使数据库受益:这取决于。 我会说“ 将CPU添加到处理器绑定的工作负载将增加工作负载吞吐量和性能 ”。