Redis中有哪些可以替代KEYS命令这样的慢操作,实现对键值对的模糊查询呢? 当我们利用KEYS命令查询时,如果数据过大,KEYS操作会阻塞后续的读写请求。Redis提供了SCAN,以及针对集合类型的SSCAN、HSCAN等可以根据设定的数量参数,返回固定指定的数量,可以避免像KEYS命令一样同时返回所有匹配的数据,不会导致Redis变慢。 如何查找Redis的bigkey? 在应用中,我们需要尽量避免使用bigkey,因为Redis主线程在操作bigkey时,会被阻塞,但是如果业务中我们使用了bigkey,那么应该如何排查呢?Redis可以执行rediscli命令时带上bigkeys选项(rediscli h p a bigkeys。),执行该命令后,它会对整个数据库中的键值大小进行统计分析,会输出每种数据类型中最大的bigkey信息,比如String类型,会输出最大的字节长度的bigKey,而对于集合类型来说,会输出最多元素个数的bigkey。但需要注意的是:对于集合类型的bigkey来说,元素最多的集合,不一定是占用内存最大的集合。 此外也可以通过redisrdbtools(Redis RDB快照文件分析的开源工具)来分析实例中所有key的内存占用情况。 如何查找Redis的hotkey? Redis 4.0版本起,rediscli客户端提供了hotkeys参数(rediscli h p a hotkeys)来查询分析当前运行期间的热key。注:使用hotkeys参数的前提是需要redis实例使用LFU内存淘汰策略。 如何判断是否存在内存碎片? Redis是内存数据库,内存利用率的高低关系到redis运行效率,为了能监控到实时的内存使用情况,redis提供了info memory命令,可以查询内存的使用情况,其中memfragmentationratio指标展示的就是内存碎片率,这个内存碎片率是usedmemoryrss和usedmemory相除的结果,其中一个用户实际使用的内存大小,另一个是已经分配的内存大小,例如一个key实际使用了6个字节的内存空间,但是redis内存机制是分配了8字节的大小。控制台在指标监控中有展示内存碎片率指标,可以支持查询历史内存碎片率。
操作须知 DTS迁移过程一般包含四个阶段:预检查阶段、结构迁移阶段、全量阶段、增量阶段。为了确保同步各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。 如迁移对象为表级别,则单次迁移任务仅支持迁移最多10000张表。当超出数量限制,任务会在提交后会请求报错。如果遇到这种情形,建议您拆分待迁移的表,分批配置成多个任务,或者配置为整库迁移。 源数据库GTID状态建议为开启状态,源数据库实例没有开启GTID的情况下DTS不支持主备HA切换,因为DTS任务会因为位点不续接而中断导致无法恢复。 目标库关联RDS数据库的字符集必须与源数据库一致。 目标库若已存在行数据,DTS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。 MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。 在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为7天。否则DTS在增量迁移时可能因无法获取Binlog而导致任务失败。由于您所设置的Binlog日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。 目标实例及关联RDS实例的运行状态必须正常,若关联RDS实例是主备实例,复制状态也必须正常。 标库关联RDS实例必须有足够的磁盘空间,建议至少为待迁移数据量的2.5倍。(全量数据迁移会并发执行 INSERT 操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大,且会产生大量的BINLOG,占用大量空间)。 由于DTS不迁移USER信息,因此在调用目标库的视图、存储过程和函数时需要对调用者授予读写权限。 在任务进入增量迁移阶段之前,不建议对源数据库做DDL操作,这样可能会引起任务迁移失败。 迁移过程中,请勿修改、删除提供给DTS连接访问的源库和目标库及用户名、密码、权限,或修改源库和目标库的端口号;若用户源库、目标库的密码发生变化,请先暂停任务再修改DTS配置的连接源库、目标库的密码。 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。 增量迁移场景下,不支持源数据库进行恢复操作。 增量迁移场景下,支持无主键表的数据增量迁移。 增量迁移时,必须设置MySQL源数据库的serverid。如果源数据库版本小于或等于MySQL5.6,serverid的取值范围在2-4294967296之间;如果源数据库版本大于或等于MySQL5.7,serverid的取值范围在1-4294967296之间。 当将MySQL5.x同步到MySQL5.7,如源端数据库的引擎类型为MyISAM时,请您先手工将源端的MyISAM存储引擎改为InnoDB再进行同步。 当将MySQL5.x迁移到MySQL8.x,如源端数据库的引擎类型为MyISAM时,DTS自动将目标库的引擎类型转换为innoDB。 当您在迁移数据时包含了触发器(TRIGGER),可能会因为DTS写入目标端的增量数据触发TRIGGER导致源库和目标库数据不一致。为避免数据不一致的问题,DTS会在迁移时在触发器对象头部加入触发控制语句,示例代码如下所示: 源库触发器: CREATE TRIGGER testtrigger BEFORE INSERT ON test1 FOR EACH ROW BEGIN UPDATE test SET num num 1 WHERE id 1; END; 目标库触发器: CREATE TRIGGER testtrigger BEFORE INSERT ON test1 FOR EACH ROW BEGIN IF (SELECT @