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

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

这可能是一个有点菜鸟的问题,但我很好奇:

数据库如何处理多个同时发生的请求,尤其是读取请求?每个请求是否都放在队列中,因此每次只会发生一个请求?或者,使用多核处理器是否真的可以同时处理多个请求?

我想,这个问题的一个明显的延伸就是:多核 CPU 对数据库服务器来说有多重要?

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

答案1

提供数据库服务需要使用多种不同的资源(CPU、磁盘上的记录、内存位置等),只要存在争用,那么需要使用该资源的所有内容都会排队。只要不存在争用(多核系统上的两个线程试图访问表中的不同记录),这些请求就可以并行进行,直到它们再次争用某些资源。

答案2

MSDN 中的多个主题描述了执行内部过程

还有 Slava 的博客,开头是SQLOS——释放有一个很多的信息。

要理解基础知识,一个很好的起点是事务处理:概念和技术

简短的合成如下:每个 SQL 批处理都会创建一个要求. 请求由任务并由执行任务工人。您可以将工作器视为类似于“线程”(存在一些差异)。这意味着批处理(=请求)在单个线程上运行。批处理中的某些语句可以从并行执行中受益,这些语句将在多个任务上执行,请参阅并行查询处理

回答多核 CPU 是否会对数据库有益:这要视情况而定。我会说“向处理器绑定的工作负载添加 CPU 将提高工作负载的吞吐量和性能“。

相关内容