数据库引擎如何处理并发插入?

Jag*_*ggu 4 database sql-server sql-server-2008

我试图谷歌这个问题,但没有发现类似的问题所以我在这里问.这可能看起来像一个noob问题,但我真的不知道数据库如何处理并发插入.

假如100个用户启动插入查询.数据库是否同时插入多个记录(相同的秒,相同的纳秒等)或者一个接一个地插入每个记录?数据库在多线程环境中运行,因此自然答案将同时插入.

Rem*_*anu 5

像SQL Server这样的数据库引擎(我假设您要询问,因为您将其标记)将使用某些版本的ARIES Write-Ahead Logging协议.由于这样的协议需要将日志写为顺序流,因此通常遵循同时触发的100个插入,即使在100 CPU服务器上也必须在访问日志时进行内部序列化.因此,正如您所建议的那样,在"纳秒"级别的并发性在理论上甚至是不可能的.主题在几个地方描述,请参阅预写事务日志,事务恢复及其工作原理:Bob Dorr的SQL Server I/O演示.

但是,从实际的角度来看,您应该考虑事务和隔离级别.