DolphinDB数据库日志与CacheEngine教程

本页面是一篇教程,介绍 DolphinDB 中的 Redo Log 与 CacheEngine、它们的关系、性能影响,以及适用范围与启用约束。

Source: https://dolphindb.cn/blogs/70

What this page covers

技能认证特训营第二期活动入口

页面顶部提供活动报名入口与福利提示。

DolphinDB数据库日志与CacheEngine教程(文章信息与范围提示)

文章给出标题、作者与日期,并概述教程内容与适用范围及启用约束。

Redo Log(概念、必要性、性能影响、参数)

本节解释 Redo Log 与 WAL 的关系、引入原因、对性能与启动的影响,并说明集群模式下的配置参数与位置。

CacheEngine(机制、与Redo Log关系、性能影响、参数与函数)

本节介绍 CacheEngine 的写入缓存机制、与 Redo Log 的依赖关系与风险、资源与性能影响,以及关键参数与相关函数。

DolphinDB集群启动流程与注意事项

本节给出集群启动顺序,并说明启动慢可能与 Redo Log 遗留过多及相关配置有关,同时给出需合理配置的参数方向。

RaftLog(Raft协议与在DolphinDB中的应用)

本节说明 Raft 的一致性与可用性特征,并指出 DolphinDB 使用 Raft 实现控制节点元数据高可用。

必须使用Log的场景

本节列出若干典型业务场景,并给出必须开启的日志或组件组合要求。

总体性能优化的建议

本节给出存储介质放置建议,以及 Redo Log 与 CacheEngine 的内存与回收周期等配置推荐范围与约束。

Facts index

Entity Attribute Value Confidence
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high
DolphinDB数据库日志与CacheEngine教程发布日期2021-08-05high
DolphinDB数据库日志与CacheEngine教程作者署名Junxihigh
本教程内容主题覆盖介绍DolphinDB中的Redo Log和CacheEngine、它们相互关系以及对整体性能的影响high
Redo Log与CacheEngine适用范围只对DFS数据库起作用;对磁盘表和流表不起作用high
Redo Log与CacheEngine启用约束启用了Redo Log之后必须启用CacheEnginehigh
Redo Log(DolphinDB)概念类比与预写式日志(Write-ahead logging, WAL)概念类似high
Redo Log(DolphinDB)核心思想/写入顺序只有在描述更改的日志记录刷新到持久化存储以后,才对数据库文件进行修改high
Redo Log崩溃恢复能力数据库宕机时可使用日志恢复;尚未应用的更改可从日志记录重做high
Redo Log主要好处减少磁盘写入次数:事务提交时只需将日志文件刷新到磁盘,而不是刷新事务涉及的所有文件high
Redo Log顺序写入优势顺序写入性能更好;当表列数多且每列单独存文件时差异更明显medium
Redo Log回收机制两种回收机制:定期回收;大小到限度时回收(均有对应参数设置)high
Redo Log引入目的解决断电、数据库系统宕机等极端情况下的数据一致性问题high
无Redo Log时的代价提交后刷盘要求若仍要保证一致性,需要每次提交事务后调用fsync将所有内存数据刷到磁盘,导致性能急剧下降high
Redo Log对fsync的影响引入后只需对个别log文件进行fsync;数据文件异步写入,有利于整体写入性能high
Redo Log适用场景建议主要用于数据库实时写入场景;若仅用于历史数据分析可考虑不开启Redo Logmedium
Redo Log性能影响(资源)增加磁盘负载(额外写Redo Log文件)并增加内存使用(缓存未写入磁盘的数据文件)high
Redo Log写入性能下降幅度(一般情况)写入性能会下降,一般在20%左右(与实际数据有关)medium
Redo Log启动时间影响启动时可能增加:需要对上次遗留的Redo Log进行重做;重做过程中DFS数据库不可用high
Redo Log(集群模式)配置位置Redo Log只在数据节点上需要配置;只对数据库的数据存部分做Redo,不涉及主节点high
主节点与Redo Log原因说明主节点只存储DFS数据库的元数据,与Redo Log无关high
dataSync 参数功能与取值控制是否使用Redo Log功能;取值1代表开启Redo Log;默认值0表示不启用high
redoLogDir 参数作用与默认位置控制Redo Log文件存放位置;默认在homeDir(由home参数决定)下的log/redoLog目录high
redoLogDir 参数性能建议一般建议设置到SSD上以获取最佳性能medium
redoLogDir(集群模式)目录配置注意事项不同数据节点应分别设置不同目录,避免使用相同目录造成写入错误high
redoLogPurgeLimit 参数含义/单位/默认值控制Redo Log文件占用最大空间;单位GB;默认值4;超过该值自动开始回收high
redoLogPurgeInterval 参数含义/单位/默认值控制Redo Log自动回收周期;单位秒;默认值30(每30秒回收一次)high
CacheEngine(DolphinDB)定义一种数据写入缓存机制,用于解决数据表列数过多时写入性能急剧下降的问题high
DolphinDB列式存储文件组织一个分区内每一列数据单独存放在一个文件中high
列数过多场景示例示例描述物联网场景下同时记录几千个指标;每次写入要操作几千个物理文件(打开/写入/关闭等)medium
CacheEngine写入流程写入操作先写入缓存;达到阈值后异步将缓存数据写入磁盘high
CacheEngine性能逻辑批量写入原因写1行与写1000行时间基本相等,主要耗时在打开/关闭文件;缓存多次小写入并批量IO可提升整体写入性能medium
CacheEngine 与 Redo Log数据可靠性要求使用CacheEngine时,为防止断电/宕机导致缓存数据丢失,需要配合Redo Loghigh
Redo Log 与 CacheEngine回收依赖关系Redo Log垃圾回收依赖CacheEngine垃圾回收;回收某事务日志前需向CacheEngine确认该事务已不在缓存中(已被回收)high
CacheEngine缓存区过大风险事务长期滞留缓存导致Redo Log无法回收、空间持续增长;可能占满磁盘导致后续写入失败;也可能恢复时重做大量事务导致重启时间过长high
CacheEngine性能影响(资源与收益)减少磁盘负载(写入次数减少、批次写入);增加内存占用(缓存未写入磁盘数据);提高写入性能(列数增多时尤为明显)high
chunkCacheEngineMemSize 参数含义/单位/类型/默认值代表CacheEngine最大滞留数据大小;单位GB;类型double;默认0.0表示不使用CacheEnginehigh
chunkCacheEngineMemSize 参数触发回收阈值当CacheEngine占用内存大于该值的30%时,会主动开始异步回收high
CacheEngine垃圾回收频率周期数据库每分钟会对CacheEngine进行一次垃圾回收high
purgeCacheEngine 函数作用与限制可手动清空缓存;只有已完成的事务会被清空,未提交事务不会被清空high
getCacheEngineStat 函数作用查看CacheEngine状态high
getCacheEngineMemSize 函数作用查看CacheEngine已使用的内存大小high
DolphinDB集群启动流程启动顺序先启动master节点,然后启动各agent节点,最后启动数据节点high
集群启动时间过长可能原因(总体)可能因上一次运行遗留的Redo Log过多medium
Redo Log遗留过多的原因原因1Redo Log配置的磁盘空间太大,导致Redo Log文件一直没有回收high
Redo Log遗留过多的原因原因2Redo Log配置的回收周期太长,导致一直没有触发回收high
Redo Log遗留过多的原因原因3CacheEngine配置的内存太大,导致CacheEngine一直没有回收,阻塞了Redo Log的回收high
避免启动慢的参数建议需合理配置的参数redoLogPurgeLimit、redoLogPurgeInterval、chunkCacheEngineMemSizehigh
redoLogDir存储介质对重启速度影响与建议Redo Log存储在机械硬盘会导致启动读取耗时较多;建议将redoLogDir配置到SSD以加快重启速度medium
Raft定义分布式系统中维持多副本一致性的协议high
一致性集群性质(Raft描述)一致性含义同一时刻所有结点对存储在其中的某个值都有相同结果(对共享存储保持一致)high
Raft集群可用性描述自动恢复与失效影响少数结点失效不影响正常工作;大多数结点失效则停止服务(不会返回错误结果)medium
DolphinDBRaft用途引入Raft协议完成元数据高可用,即控制节点高可用high
DolphinDB控制节点保存内容与风险控制节点保存分布式文件系统元数据;若控制节点宕机,系统会处于不可用状态high
Raft支持的高可用(DolphinDB)工作方式可同时开启多个控制节点保存相同元数据信息;只要大多数节点可用,系统可用high
元数据高可用参考资料链接https://link.zhihu.com/?target=https%3A//github.com/dolphindb/Tutorials_CN/blob/master/ha_cluster_deployment.md%233-%25E5%2585%2583%25E6%2595%25B0%25E6%258D%25AE%25E9%25AB%2598%25E5%258F%25AF%25E7%2594%25A8high
实时数据写入且要求可靠性场景必须使用的日志/组件必须开启Redo Log和CacheEnginehigh
DFS表列数特别多的数据写入场景必须使用的日志/组件必须开启Redo Log和CacheEnginehigh
DFS数据库高可用场景必须使用的日志必须开启RaftLoghigh
总体写入性能优化建议介质配置建议(概述)将元数据存放目录以及Redo Log存放目录配置到SSD上;有条件使用工业级SSDmedium
dfsMetaDir用途与配置文件/建议介质控制节点元数据存储目录;在controller.cfg设置;建议SSDhigh
chunkMetadir用途与配置文件/建议介质数据节点元数据存储目录;在cluster.cfg设置;建议SSDhigh
rodoLogDir(原文拼写)用途与配置文件/建议介质设置到SSD;在cluster.cfg设置medium
persistenceDir用途与配置文件/建议介质流数据存储路径;在cluter.cfg(原文拼写)中设置;建议SSDmedium
logFile用途与配置文件/建议介质各节点运行日志(状态/错误信息);可写到HDD;在controller.cfg、agent.cfg、cluster.cfg中设置high
batchJobDir用途与配置文件/建议介质批处理任务日志目录(如submiJob提交任务日志);可写到HDD;在cluster.cfg中设置medium
jobLogFile用途与配置文件/建议介质各节点query日志(记录query执行情况);可写到HDD;在cluster.cfg中设置high
Redo Log配置建议内存大小与回收周期一般建议内存不超过4G、不低于1G;回收周期配置为60秒medium
CacheEngine配置建议内存大小上限最大不超过数据节点内存配置的1/4high
CacheEngine配置建议常见内存范围与调整因素1~4G适合大部分情况;具体结合机器资源与写入速率决定medium