问题汇总

本文汇总了在使用Lindorm宽表引擎时可能会遇到的常见问题及其解决方案。

问题汇总

连接问题

小版本升级

升级宽表小版本有什么影响?需要多久?

存储相关(Compaction等)

数据管理

数据查询

监控

HBase相关

连接

使用Lindorm-cli连接宽表引擎失败是什么原因?

请根据以下内容逐一排查:

宽表引擎常见的端口号有哪些?

端口号

说明

30060

SQL端口(Avatica协议)

33060

SQL端口(MySQL协议)

30020

宽表端口(HBase兼容协议、Java访问方式)

9042

CQL端口(Cassandra协议兼容)

小版本升级

升级宽表小版本有什么影响?需要多久?

升级宽表小版本可能导致单个节点短暂断开连接,每个Server滚动重启,升级期间Region会下线再上线。升级完成后,系统会重新平衡负载。

影响评估:对低负载实例影响较小;对高负载或时延敏感实例可能有一定影响,建议在业务低峰期进行。

耗时估算:每个节点约需5~30分钟,具体时间取决于Region数量及负载。

存储相关(Compaction)

Compaction操作相关

Compaction操作的作用是什么?

清理过期数据(TTL)、清理删除操作的遗留标记(deleteMarker)、归档冷热数据、压缩数据减少空间占用。

Compaction操作的自动触发周期是多久?

系统默认的自动触发周期为20天。在TTL场景下,默认周期为 min(TTL值, 20天)。您可以通过以下两种方式修改自动触发周期:min(ttl,20天)。您可以通过以下方式修改自动触发周期:

Compaction操作是否可以手动触发?

可以,您可以通过SQL语句执行Major Compaction

重要

实例负载过高的情况下手动触发可能会有风险,请谨慎使用。

Compaction操作对业务有什么影响?

业务影响

系统通常会自动分配多个线程执行Compaction操作,不同规格默认使用的线程数量不同,规格越高处理执行效率越高,相反,则可能出现大量任务排队的情况。同时,Compaction操作处理数据时会消耗CPU,CPU资源充足时Compaction操作对业务没有太大的影响,反而有助于提升读性能、释放存储空间、压缩数据等。

负载监控

您可以通过实例监控查看宽表引擎指标-集群负载中的Compaction队列长度(个),如果该数值持续增长或始终持平,则说明Compaction队列可能存在大量排队任务。更多介绍可以参考集群负载中的Compaction队列长度(个)说明。

优化建议

如果CPU利用率小于40%,宽表2.6.5以上版本支持自动根据load调整参数,直接升级小版本即可。如果CPU利用率大于40%,建议您增加宽表引擎节点数量

如何查看Compaction操作任务的状态?

通过实例监控查看宽表引擎指标-集群负载中的Compaction队列长度(个)。如果该数值在持续减少,或周期性地增加之后开始减少,并不是始终增长或一直持平状态(大于一天持续增加或持平),则为正常状态,反之为不正常状态。

已设置了TTL,但是存储还在持续上涨是什么原因?

您可以通过实例监控查看宽表引擎指标-集群负载中的Compaction队列长度(个),确认是否存在任务积压情况,如果积压较多就会出现数据清理滞后的现象。如果CPU利用率小于40%,宽表2.6.5以上版本支持自动根据load调整参数,直接升级小版本即可。如果CPU利用率大于40%,建议您增加宽表引擎节点数量

如果队列无任务则说明Compaction操作正常执行中。如果此时读写(I/O负载)较低,可以手动执行Compaction操作或调整major compaction周期,例如将自动触发周期修改为2天:ALTER TABLE <tableName> SET 'COMPACTION_MAJOR_PERIOD'='172800000';

说明

COMPACTION_MAJOR_PERIOD单位为毫秒(ms)。

系统周期默认为20天。在TTL场景下,默认周期为min(ttl,20天)

如何通过设置压缩算法和编码方式来减少存储空间?

您可以将表的压缩算法COMPRESSION设置为ZSTD,编码方式DATA_BLOCK_ENCODING设置为INDEX,并执行major compact以减少存储空间。

重要

如果您是通过SQL方式创建的表,则默认已设置,无需重复设置。

具体如下:

磁盘(存储空间)达到容量上限该如何处理?

您可以通过以下方式处理:

重要

请勿使用DELETE直接删除数据,原因如下:

Lindorm为充分发挥写入性能,删除操作并非是先读取再删除,而是直接写入删除标记以确保这些数据不再被查询到,等到下次触发Compaction操作才会被彻底清理。触发周期请参见Compaction操作的自动触发周期

为什么磁盘(存储空间)达到容量上限后无法删除数据?

请勿使用DELETE直接删除数据,原因如下:

Lindorm为充分发挥写入性能,删除操作并非是先读取再删除,而是直接写入删除标记(Delete Marker)以确保需删除的数据不再被查询到,等到下次触发Compaction操作这些数据才会被彻底清理。触发周期请参见Compaction操作的自动触发周期

同时,磁盘达到容量上限后系统将禁止所有数据的写入,包括删除标记。删除标记无法写入将导致需删除的数据无法通过Compaction操作清理,因此该操作无法立即释放空间。

宽表引擎支持变更节点数量、扩缩容磁盘吗?

变更节点数量是引擎级别的操作,扩缩容磁盘为实例级别的操作。

数据管理

常用表属性的单位有哪些需要注意?

  • major compaction周期:COMPACTION_MAJOR_PERIOD参数用于设置major compaction周期,单位为毫秒(ms),支持在建表时指定Major Compaction周期

  • 时间戳:单位为毫秒(ms),HINT中可能会使用秒(s)作为单位,例如/*+ _l_ts_(%s) */

  • 数据有效期TTL:单位为秒(s),可以在建表时指定数据有效期

建表时NUMREGIONS参数应该如何设置?

不指定NUMREGIONS时,默认为1个分区,建议初始将NUMREGIONS设置为Server节点数 * 4个。单个分区中的数据达到8 GB时,分区将会自动分裂,或底层数据读写QPS总和达到1000以上,系统将自动识别热点并判断是否需要分裂分区。

建议您升级小版本至宽表引擎2.4.x以上版本,热点自愈功能将更加完善。

通过ALTER TABLE修改表属性有什么影响?

通过ALTER TABLE修改表属性会使表的所有Region均关闭再开启,基本无影响。如果您的业务对读性能较敏感,例如需达到毫秒级,请在业务低峰期进行操作。

写入的列超过最大写入限制是什么原因?

写入的列超过最大写入限制时会报错:

com.alibaba.lindorm.client.exception.IllegalDataException: Column [xxx] is too big, max length is 2097152 bytes but has 7621168 bytes.

针对VARBINARY类型的列长度无限制,但对于大小是否存在限制请参考配额与限制

单个Cell默认不能超过2 MB,您同时还需要考虑实例的负载和存储空间大小,负载不大的情况下可以通过SQL语句临时修改非主键列最大写入限制(不推荐):ALTER TABLE <tablename> SET 'MAX_NONPK_LEN'='4194304';(单位为字节)。

重要

如果需要修改非主键列最大写入限制,建议您参考以下说明升配:

  • 如果节点内存为32 GB,建议MAX_NONPK_LEN最大不超过5 MB。

  • 如果节点内存为64 GB,建议MAX_NONPK_LEN最大不超过10 MB。

删除数据的方式和注意事项有哪些?

目前Lindorm仅支持通过TRUNCATE TABLE清空表中数据或指定完整主键删除部分数据。删除完成后,如果对读RT要求较敏感请手动执行major compact,如果业务对读RT不敏感,您可以等待Compaction周期定期清理。

说明

指定完整主键的删除操作不支持范围删除,需要先查询出完整的主键再通过等值条件进行删除。

如何验证数据是否已进入冷存储?

  • 您可以先指定主键查询全部待验证的数据,再指定相同的主键通过HINT仅查询热数据。对比查询结果,如果查询结果相同则说明数据未进入冷存储。如果查询全部数据和通过HINT仅查询热数据结果不同,且查询全部数据时查不到冷数据,则表示数据已进入冷存储。

  • 您可以提前通过集群管理系统(Lindorm Insight)概览查看表的冷存储热存储的大小,与数据归档后冷存储与热存储的大小进行对比。

为什么数据没有进入冷存储?

您可以参考为什么执行compaction操作后,数据还未进入冷存储

主要原因可能如下:

  • 未执行flush操作

    请先执行flush操作将数据刷写至磁盘上,再执行Compaction操作。

  • Compaction积压

    您可以通过扩容升配来增加CPU资源,以解决Compaction积压的问题。

    说明

    是否出现Compaction积压可以通过查看监控信息中的宽表引擎指标——集群负载 > Compaction队列长度(个)来确定。如果持续大于0且个数不断增加,则说明已出现Compaction积压。

  • 数据指定了时间戳

数据查询

为什么二级索引查询不到为null的数据?

在使用主键重排和多列索引的情况下,第一个非主键列值为NULL时不会构建二级索引,因此仅非主键列中存在具体的值才能在索引表中查询到。

查询结果不符合预期是什么原因?

查询结果不符合预期的常见原因

监控

监控上冷存token指标的含义是什么?

冷存储适用于读取较少的数据归档场景,因此建议尽量少读取冷数据。冷存Token指标是针对冷存储限流的监控,冷存Token数值持续减少表示有部分请求被限流了。

监控配置建议有哪些?

您可以参考监控报警最佳实践进行配置。

HBase相关

HBase增强版是否支持SQL?

云数据库HBase增强版是由Lindorm宽表引擎(兼容HBaseCassandra)提供的,使用方式与Lindorm宽表引擎一致,支持SQL使用方式。您可以通过Lindorm-cli连接并使用宽表引擎

./lindorm-cli -url jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060 -username xxx -password xxx
# 连接以后执行
lindorm:default> show databases;
说明

连接前请确保网络畅通,您可以使用telnet命令检测Lindorm端口连通性。同时,您需要将客户端IP加入白名单。

开源HBase客户端用户需要注意什么?

使用开源HBase客户端不支持鉴权,不支持多可用区。连接宽表引擎前,请安装HBase SDK