logo资料库

MongoDB疑难杂症分析及优化.pdf

第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
资料共27页,剩余部分请下载后查看
开源数据库 MongoDB 专场 MongoDB疑难杂症分析及优化 阿⾥里里云数据库技术 张友东(林林⻘青)2016.10.15
关于我 { Name: “张友东”, Company: “阿⾥里里云”, Position: “技术专家”, Projects: [“TFS”, “Redis”, “MongoDB”] Contacts: { Email: “linqing.zyd@alibaba-inc.com”, Weibo: “@HUST张友东” } }
主要内容 • Driver 使⽤用问题 • 连接池⼤大⼩小如何配置? • 如何⼲干掉⻓长(慢)请求? • 复制集问题 • 如何连接复制集? • 备同步为什什么跟不不上? • 备节点阻塞很⻓长时间? • Shared Cluster 问题 • 什什么时候该分⽚片? • 为什什么分⽚片负载不不均衡? 案例例均源⾃自 MongoDB 云数据库 扫码了了解更更多…
慎⽤用 local、admin • local:存储节点⾃自身配置信息,数据不不会被同步,重要的数据不不 要存储在 local 数据库,避免数据丢失 • admin:存储⽤用户、⻆角⾊色等管理理信息,写⼊入时会加 DB 级别互斥写 锁,业务数据不不要存储在 admin 数据库,影响性能 database admin other lock DB 锁 ⽂文档锁 insert / s 13500 42600 wiredtiger 引擎 sysbench 16线程 insert https://yq.aliyun.com/articles/7424
合理理配置连接数 • thread per connection ⽹网络服务模型 • 每个线程需要1MB 的栈空间 • ⼤大量量连接时,线程切换开销⼤大 • 限制连接数资源 client client client mongod thread thread thread • mongod 配置 net.maxIncomingConnections 参数 • Driver通过 Connection String URI 的 maxPoolSize 参数来配 置连接池⼤大⼩小 https://yq.aliyun.com/articles/59283
避免使⽤用短连接 connect connect connect auth request1 request2 requestN close auth auth request1 request2 close close • 短连接增加额外的 connect、auth、 close、线程创建及销毁开销 • MongoDB 鉴权性能问题,优化后性能提 示10+倍 https://yq.aliyun.com/articles/35148
⼲干掉⻓长(慢)请求 • 客户端发起耗时请求,如遍历 集合、建索引、mapreduce、 aggregation 等,主动断开连 接后,后端的请求仍然在执⾏行行 • currentOp + killOp 中⽌止后端正 在运⾏行行的请求 killOp原理理:⻓长时间执⾏行行的请求会设置检 查点,发现有 kill 操作就会主动退出 killOp 后,请求执⾏行行到 checkForInterrupt()就会退出 while (!createIndexFinished) { createIndexForOneElement(); checkForInterrupt(); } https://yq.aliyun.com/articles/6647
控制集合数量量 • wiredtiger引擎特性 • 每个集合对应⼀一个物理理⽂文件,每个索引对应⼀一个物理理⽂文件 • listDatabases 时,需要遍历所有的集合及索引,逐个获取物理理⽂文件⼤大⼩小信息 • 问题及优化 • 物理理⽂文件太多,数据库管理理开销增加,影响性能,建议启⽤用 storage.directoryPerDB选项,尽量量让物理理⽂文件分散到多个⽬目录。 • listDatabases 开销太⼤大,导致监控系统⽆无法正常⼯工作,还可能影响到主备同步 (全量量同步时,会先 listDatabases 拉取 DB 列列表,设置的超时时间为30s) • 如果⼀一定需要⼤大量量的集合,可考虑使⽤用 mmapv1或 rocksdb 引擎 https://yq.aliyun.com/articles/58531
分享到:
收藏