gpt4 book ai didi

mysql - 当有两个或多个进程同时请求它时,数据库如何决定它应该给哪个进程锁定?

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:13 25 4
gpt4 key购买 nike

我知道数据库将始终允许第一个进程查询它以锁定该行/表。但是,当数据库同时从多个进程接收到完全相同的查询时会发生什么?它是否随机决定首先将锁授予哪个进程?

一个例子是两个顾客请求购买一个汉堡,而数据库只有 1 个汉堡。他们的查询在同一时刻到达服务器。哪个倒霉的顾客会弄丢午餐?

注意:我主要使用 SQL Server。

最佳答案

从数据库软件的角度来看,没有“同时”这回事。但是,假设您有一个带有两个网络接口(interface)的多处理器系统,两个请求最终在完全相同的 CPU 时钟周期内得到处理——这不太可能(每秒有数十亿个周期),但并非完全不可能。

每个请求都会有一个线程。每个线程都需要获取一个数据库锁,该锁可能保存在内存中的某个地方。该锁将受到操作系统锁的保护,这将防止两个线程同时访问数据库锁。

操作系统锁最终也取决于内存访问。为了访问内存,CPU 对其进行锁定并将其副本传输到板载缓存中。在第一个 CPU 完成之前,另一个 CPU 将无法访问它。因此只有一个 CPU 将能够写入内存以获取 O/S 锁以获取数据库锁。

如果由于某种巧合,两个 CPU 在同一时间请求相同的内存段并且都尝试获取内存锁,这两个请求将通过“总线仲裁”解决,这可以通过多种方式进行。它最终可能取决于哪个 CPU 在物理上更接近总线,或者可能取决于哪个 CPU 具有更高的设备 ID。

使用数据库的应用程序永远不必担心像这样的微小细节。它由数据库平台、O/S、CPU 以及最终的物理硬件负责。

关于mysql - 当有两个或多个进程同时请求它时,数据库如何决定它应该给哪个进程锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58721981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com