Influxdb 单硬盘暂停上的多进程fsync

Influxdb 单硬盘暂停上的多进程fsync,influxdb,clickhouse,opentsdb,timescaledb,dolphindb,Influxdb,Clickhouse,Opentsdb,Timescaledb,Dolphindb,fsync/fdatasync调用很昂贵,但它们在数据库中是必不可少的,因为它允许在ACID中的持久性。正如我所测试的,当只有一个进程周期性地进行写操作和fsync时,每个fsync大约需要50毫秒。但是当有多个进程在做同一件事时,比如说其中两个进程,有时(可能50%)fsync会花费大量时间,数百或数千毫秒,甚至数十秒,显然系统在这种情况下变得不可用。我想知道当有多个节点使用单个硬盘时,如何在数据库中解决这个问题,特别是在分布式时间序列数据库中。分布式数据库从不在单个硬盘上运行,除非您从桌面创

fsync/fdatasync调用很昂贵,但它们在数据库中是必不可少的,因为它允许在ACID中的持久性。正如我所测试的,当只有一个进程周期性地进行写操作和fsync时,每个fsync大约需要50毫秒。但是当有多个进程在做同一件事时,比如说其中两个进程,有时(可能50%)fsync会花费大量时间,数百或数千毫秒,甚至数十秒,显然系统在这种情况下变得不可用。我想知道当有多个节点使用单个硬盘时,如何在数据库中解决这个问题,特别是在分布式时间序列数据库中。

分布式数据库从不在单个硬盘上运行,除非您从桌面创建网络共享,将该共享装载到所有服务器节点上,并告诉数据库使用该共享。所以,抱歉,但这没有意义。抱歉没有澄清,这里我指的是伪分布式集群,所有节点都运行在同一台机器上。为什么要这样做?但无论如何,他们会争夺资源。这就像在一条车道上驾驶多辆车并排行驶一样。车道不会变大。我们都知道交通堵塞是如何开始的。SSD在这方面很有帮助,因为它可以并行处理更多IO操作。但如果这加快了系统在同一节点上运行多个实例而不是单个实例的速度,那么这只意味着要么需要优化数据库,要么根本无法利用存储的功能。但回到问题上来:数据库无法“解决”它们不负责的较低层中的问题。如果I/O请求挂起在操作系统调用或硬件中,则数据库无能为力。坏消息还在于,大多数I/O操作仍在阻止调用方,因为它们也必须看起来像原子操作。如今,“fsync”并不一定意味着调用返回时字节在磁盘上。此外,数据库倾向于在一定时间内收集I/O写入,以重新组织它们,并减少它们必须发送到文件系统的I/O操作总数。现代文件系统也做同样的事情(例如,请参阅ext4的参数“commit”)。如果两个或多个DB实例现在几乎同时执行大量写操作,那么写操作也可以很容易地“压倒”磁盘,特别是在等待队列中也有读操作的情况下。但这里,我们又回到了交通堵塞问题上。分布式数据库永远不会在单个硬盘上运行,除非您从桌面创建网络共享,将该共享装载到所有服务器节点上,并告诉数据库使用该共享。所以,抱歉,但这没有意义。抱歉没有澄清,这里我指的是伪分布式集群,所有节点都运行在同一台机器上。为什么要这样做?但无论如何,他们会争夺资源。这就像在一条车道上驾驶多辆车并排行驶一样。车道不会变大。我们都知道交通堵塞是如何开始的。SSD在这方面很有帮助,因为它可以并行处理更多IO操作。但如果这加快了系统在同一节点上运行多个实例而不是单个实例的速度,那么这只意味着要么需要优化数据库,要么根本无法利用存储的功能。但回到问题上来:数据库无法“解决”它们不负责的较低层中的问题。如果I/O请求挂起在操作系统调用或硬件中,则数据库无能为力。坏消息还在于,大多数I/O操作仍在阻止调用方,因为它们也必须看起来像原子操作。如今,“fsync”并不一定意味着调用返回时字节在磁盘上。此外,数据库倾向于在一定时间内收集I/O写入,以重新组织它们,并减少它们必须发送到文件系统的I/O操作总数。现代文件系统也做同样的事情(例如,请参阅ext4的参数“commit”)。如果两个或多个DB实例现在几乎同时执行大量写操作,那么写操作也可以很容易地“压倒”磁盘,特别是在等待队列中也有读操作的情况下。但在这里,我们又回到了交通堵塞问题上。