You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何调整TDengine数据库参数?——taos shell数据库参数的最佳实践配置指南

TDengine参数调整方法及最佳实践指南

嗨,针对你的两个问题——怎么调整TDengine数据库参数,以及如何优化show databases里显示的那些配置,我来一步步给你讲清楚:

一、调整TDengine参数的两种常用方式

TDengine的数据库参数可以在创建库时指定,也可以修改已有库的配置,具体操作如下:

  1. 创建数据库时直接配置参数
    CREATE DATABASE命令创建库的时候,直接跟上你要设置的参数就行,比如:
    CREATE DATABASE test 
    DAYS 30  -- 数据默认保留30天
    KEEP 3650  -- 数据最长保留10年
    CACHE 32  -- 缓存设为32MB
    COMP 2;  -- 开启高压缩
    
  2. 修改已有数据库的参数
    对于已经建好的库,用ALTER DATABASE命令调整(注意:像replicavgroups这类参数创建后就改不了,得提前规划好):
    ALTER DATABASE test 
    DAYS 60  -- 把默认保留天数改成60天
    CACHE 64;  -- 缓存升级到64MB
    

二、关键参数的最佳配置建议

结合你给出的show databases输出,我把每个参数的作用和适合不同场景的配置建议列出来:

1. days & keep/keep0,keep1,keep(D)

  • 核心作用days是数据的默认保留天数,keep(或keep0/keep1)是数据的最长保留时间,优先级比days高。
  • 怎么配
    • 如果是IoT监控、实时运维这类场景:days设7-30天(满足近期高频查询),keep设180-3650天(长期归档历史数据);
    • 如果是临时测试库:直接把keep设成7天以内,避免占存储;
    • 要是不需要长期存数据,dayskeep设成一样就行。

2. cache(MB)

  • 核心作用:给数据库分配的内存缓存,用来加速查询热数据。
  • 怎么配
    • 要是你的库查询特别频繁:把缓存设成服务器可用内存的10%-20%(比如32G内存的服务器,设32-64MB就行,别贪多,不然容易OOM);
    • 要是以写入为主、很少查:设16-32MB就够,省内存给其他服务。

3. blocks

  • 核心作用:每个虚拟节点(VNode)的存储块数量,每个块对应一个磁盘文件。
  • 怎么配
    • 默认值6适合绝大多数场景;如果你的单库数据量特别大(比如超过10TB),可以调到8-12,减少单个文件的大小,提升磁盘IO效率;
    • 小数据量的库就别改了,不然生成一堆小文件,磁盘管理反而麻烦。

4. minrows & maxrows

  • 核心作用:控制单个数据块的行数范围,minrows是最小行数,maxrows是最大行数。
  • 怎么配
    • 高频率写入场景(比如每秒上万条数据):把maxrows设成4096-8192,减少磁盘写入的次数;
    • 低频率写入场景minrows设200-500,避免生成太多空数据块;
    • 一般情况用默认的100(minrows)和4096(maxrows)就够了。

5. comp

  • 核心作用:数据压缩级别,0=不压缩,1=轻量压缩,2=高压缩。
  • 怎么配
    • 时序数据(比如传感器数值、监控指标)强烈建议设成2!时序数据的压缩率超高,几乎不影响写入速度,但能省超多存储空间;
    • 要是你追求极致写入速度(比如超高速采集场景),可以设成1,平衡压缩率和写入性能。

6. wallevel & fsync

  • 核心作用wallevel是写日志的级别(0=无日志,1=本地日志,2=同步到副本);fsync是日志刷盘的间隔(毫秒)。
  • 怎么配
    • 生产环境必须设wallevel=1(单节点)或2(多副本集群),不然数据丢了哭都来不及;
    • fsync默认3000毫秒(3秒)够用,要是你需要强一致性(不能丢任何一条写入),可以改成1000毫秒,但写入速度会稍微降一点;
    • 测试环境可以设wallevel=0提升速度,但生产绝对不能这么干!

7. cachelast

  • 核心作用:要不要缓存每个表的最后一行数据,0=不缓存,1=缓存。
  • 怎么配
    • 要是你经常查最新数据(比如看设备当前状态),设成1,这类查询速度会快很多;
    • 很少查最新数据的话,保持0就行,省缓存空间。

8. precision

  • 核心作用:数据库的时间戳精度,支持ms(毫秒)、us(微秒)、ns(纳秒)。
  • 怎么配
    • 跟着你的数据精度走:IoT设备大多是毫秒级,设ms;高精度传感器(比如微秒采样)设us
    • 别盲目开高精度,会额外占存储空间。

9. replica & vgroups

  • 核心作用replica是副本数,保证数据可用性;vgroups是虚拟节点数,影响并行处理能力。
  • 怎么配
    • 生产环境建议replica=23(根据集群大小),单节点测试设1就行;
    • vgroups的数量建议等于集群CPU核心数的1-2倍(比如8核服务器设8-16),提升并行读写能力——这个参数创建后改不了,建库前一定要想好!

最后总结一下

参数调整的核心就是结合业务场景平衡性能、存储和可靠性

  • 写入密集型:优先保写入速度,适当降缓存、选合适的压缩级别;
  • 查询密集型:加大缓存、开cachelast
  • 生产环境:优先保数据安全,合理设副本数和日志级别;
  • 测试环境:可以放宽限制,提升效率。

内容的提问来源于stack exchange,提问作者Alex

火山引擎 最新活动