生产环境索引创建的太多,导致dml操作效率低下,需要清理一部分索引
操作时首先创建索引,防止索引删除后造成查询性能下降,等待主库索引创建完成,执行索引删除命令,此时Mongo副本集全部锁死,应用无法进行增删改查操作,通过客户端可以登录主库,正常进行增删改。
后期通过ycsb复盘,总结出以下几点:
软件信息 |
---|
Mongo 3.6.23 |
Redhat 7.6 |
YCSB 0.17.0 |
因为是副本集,测试时YCSB连接信息配置如下:
admin:admin1234表示用户名密码
authSource为数据库
replicaSet表示副本集
mongodb.url=mongodb://admin:admin1234@192.168.124.30:27017,192.168.124.30:27018,192.168.224.30:27019/?authSource=admin&replicaSet=Repl01
压测过程未记录,如下是压测结果:
- 索引会等待主库创建完,从库才会开始创建
- 后台索引未创建完成,会阻塞当前集合的操作,不会阻塞其他集合的操作
从库索引未创建阶段删除其他集合的索引,未造成死锁 - 副本集阻塞后,将副本集hiden,重启压测工具,可正常提供服务
压测工具没有重连机制,生产环境需要确认应用是否能重连,不能重连可能需要重启应用 - 尝试kill副本集创建索引的线程,直接导致副本集进程crash