有关于drds索引的问题记录
一、前提概述
1、操作:因业务需要,有将用户相关的数据表从 mysql 迁移至 drds。
2、drds简介(PolarDb-X 1.0 整合了drds):
RDS:阿里云关系型数据库(Relational Database Service,简称 RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。
DRDS:分布式关系型数据库服务(Distributed Relational Database Service,简称 DRDS)是阿里巴巴致力于解决单机数据库服务瓶颈问题而自主研发推出的分布式数据库产品,解决了一些传统单库 RDS 数据库的痛点。
DRDS的主要功能:
1、分布式SQL引擎
· 将数据按照某一个字段值(字符串为hash值)mod进行分库。
· 如同单个RDS的体验,兼容90%MySql的SQL。
2、读写分离
· 配合RDS 只读实例,让读权重配比动态化,从而实现读流量的准实时调整。
3、自主运维
· 分布式数据库从接入到运维(DDL,DML)如同单个数据库体验。
4、平滑扩容
· 可逐个添加RDS实例完成分布式数据库扩容(需要手动配置)。
5、全局唯一ID
· 保持全局唯一但不递增,高可用。
mysql分表:需要自己维护一套分表规则,例如按季度分表、用户评论数据按用户id与500取余等,数据量不大,是能满足日常需求的。但是当数据量越来越大,需要扩容的时候,就非常头痛,扩容是mysql分表的一大痛点,这个时候选择drds就非常便捷了。
drds分表:不用人为的控制分表规则,可以做到平滑扩容,drds有自己的计算节点和存储节点。drds的查询需要注意索引,数据量太大不建议直接查询主库,可查询从库,避面对主库造成影响,例如CPU占用率太大,影响内存等。
二、问题描述
1、问题现象:
游客系统数据表凌晨迁移完成后,当天下午18点多,drds报警,计算节点的CPU跑满。
2、影响时间:
1小时
3、问题原因:
每天下午18点,有1个定时脚本执行,脚本是向3天内有签到,但今天还没有签到的用户发送签到通知。脚本内逻辑会使用 lasted_sign 和 created_at 两个字段查询符合条件的数据,迁表前(mysql)是单表状态,这两个字段没有索引,虽然执行慢,但不会有太大影响。数据表迁移到drds后,因为drds的特性,导致计算节点的CPU跑满。
4、解决方案:
目前只是先暂停了脚本,让产品和运营观看后台签到数据和埋点,对比脚本暂停期间签到数据是否有较大波动。
根据数据,再确定具体方案:如果有波动此逻辑将转交给大数据处理;如果没有波动将停止脚本。(后续方案为将逻辑交由大数据处理)
5、后续注意事项:
将数据表从MySQL迁移至drds时,要注意drds索引的使用,日常中测试也可以提醒开发。
三、文档参考
drds使用点滴文档:https://blog.csdn.net/cuiwenjun/article/details/90598622
PolarDB-X介绍:https://help.aliyun.com/document_detail/322818.html