《MongoDB疑难杂症的分析和优化(26页).pdf》由会员分享,可在线阅读,更多相关《MongoDB疑难杂症的分析和优化(26页).pdf(26页珍藏版)》请在三个皮匠报告上搜索。
1、开源数据库 MongoDB 专场MongoDB疑难杂症分析及优化阿里云数据库技术 张友东(林青)2016.10.15关于我 Name:“张友东”,Company:“阿里云”,Position:“技术专家”,Projects:“TFS”,“Redis”,“MongoDB”Contacts:Email:“linqing.zydalibaba-”,Weibo:“HUST张友东”慎用 local、admin local:存储节点自身配置信息,数据不会被同步,重要的数据不要存储在 local 数据库,避免数据丢失 admin:存储用户、角色等管理信息,写入时会加 DB 级别互斥写锁,业务数据不要存储在
2、admin 数据库,影响性能databaselockinsert/sadminDB 锁13500other文档锁42600wiredtiger 引擎 sysbench 16线程 inserthttps:/ per connection 网络服务模型 每个线程需要1MB 的栈空间 大量连接时,线程切换开销大 限制连接数资源 mongod 配置 net.maxIncomingConnections 参数 Driver通过 Connection String URI 的 maxPoolSize 参数来配置连接池大小https:/ clientclientclientthreadthreadthrea
3、dmongod避免使用短连接短连接增加额外的 connect、auth、close、线程创建及销毁开销 MongoDB 鉴权性能问题,优化后性能提示10+倍connectauthrequest1request2requestNcloseconnectauthrequest1closeconnectauthrequest2closehttps:/ 等,主动断开连接后,后端的请求仍然在执行 currentOp+killOp 中止后端正在运行的请求killOp 后,请求执行到 checkForInterrupt()就会退出 while(!createIndexFinished)createIndex
4、ForOneElement();checkForInterrupt();killOp原理:长时间执行的请求会设置检查点,发现有 kill 操作就会主动退出https:/ 每个集合对应一个物理文件,每个索引对应一个物理文件 listDatabases 时,需要遍历所有的集合及索引,逐个获取物理文件大小信息 问题及优化 物理文件太多,数据库管理开销增加,影响性能,建议启用storage.directoryPerDB选项,尽量让物理文件分散到多个目录。listDatabases 开销太大,导致监控系统无法正常工作,还可能影响到主备同步(全量同步时,会先 listDatabases 拉取 DB 列表,
5、设置的超时时间为30s)如果一定需要大量的集合,可考虑使用 mmapv1或 rocksdb 引擎https:/ 会缓存结果数据,可能占用大量内存,默认10分钟后 cursor 超时释放 优化方法 设置更小的 cursor timeout 如无需遍历,find 时设置 singleBatch 选项 find:userData,filter:latlng:$near:116.34642045073839,39.87082232130999 ,$maxDistance:0.90 ,ntoreturn:1000$near位置查询示例https:/ 自动故障检测、切换 多节点同时提供服务正确连接复制集P
6、rimarySecondarySecondaryDriverPrimarySecondarySecondaryDriverisMasterisMaster直连 Primary Driver指定多个节点连接复制集,强烈建议跟所有节点保持心跳,Primary 故障时,Client 联系新的 Primary 读写Primary 故障时,不可读写https:/ oplogPrimarySecondarydataoplogdataoplog12345op1op2op3opNoplog是固定大小集合,按时间戳排序,满了时自动删除最老的数据oplog 问题(1)Secondary 网络断开,或者停机维护,恢