gpt4 book ai didi

数据库持久性与性能

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:57 25 4
gpt4 key购买 nike

我研究了很多如何在数据库中实现持久性,如果我理解得很好,它会像这样工作(简化):

客户的观点:

  1. 开始交易。
  2. 插入表值...
  3. 提交交易

数据库引擎的观点:

  1. 将事务开始指示符写入日志文件
  2. 将客户端所做的更改写入日志文件
  3. 将事务提交指示符写入日志文件
  4. 将日志文件刷新到 HDD(这确保了数据的持久性)
  5. 返回'OK'给客户

我观察到的:

客户端应用程序是单线程应用程序(一个数据库连接)。我能够每秒执行 400 个事务,而将某些内容写入文件然后将该文件 fsync 到 HDD 的简单测试仅执行 150 个同步/秒。如果客户端是多线程/多连接,我会想象 DB 引擎将事务分组并为每几个事务执行一次 fsync,但事实并非如此。

我的问题是,例如 MsSQL,是否真的在每次事务提交时同步日志文件(fsync、FlushFileBuffers 等...),还是背后有其他魔法?

最佳答案

简短的回答是,要使事务持久化,必须先将日志文件写入稳定存储,然后再将数据库更改写入磁盘。

稳定存储比您想象的要复杂。例如,磁盘通常不被认为是稳定的存储。 (无论如何,不​​是由为事务数据库引擎编写代码的人编写的。)

它查看特定的开源 dbms 如何写入稳定存储,您需要阅读源代码。 PostgreSQL 源代码是 online . (文件是xlog.c)不知道MySQL源。

关于数据库持久性与性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5442041/

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