全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
云数据库 MongoDB 版

连接数问题

更新时间:2017-11-01 17:10:20

用户可通过DMS或Mongo shell连接MongoDB云数据库,以下场景都基于用户使用Mongo shell连接数据库。

如何查看当前连接数?

  • 根据您购买的MongoDB实例规格不同最大连接数也不同,具体的最大连接数请参考实例规格
  • 使用Mongo shell连接实例,执行如下命令,其中current代表当前已经建立的连接数,available代表当前可用连接数,internal*的连接用于内部管理,用户可忽略。

    1. mongo-test:PRIMARY> db.serverStatus().connections
    2. {
    3. "current" : 0,
    4. "available" : 2000,
    5. "internal_current" : 3,
    6. "internal_available" : 497,
    7. "totalCreated" : NumberLong(21)
    8. }

如何查看当前连接主要来自哪些ECS机器?

Mongo shell或DMS(如果连接数已满,则只能通过DMS来登录查看)连接实例时,执行db.runCommand({currentOp: 1, $all: true}),输出所有跟该实例建立的所有连接情况,其中client字段包含了ECS的ip地址信息。

  1. > db.runCommand({currentOp: 1, $all: true})
  2. {
  3. "inprog" : [
  4. {
  5. "desc" : "conn20",
  6. "threadId" : "140353731274496",
  7. "connectionId" : 20,
  8. "client" : "10.1.2.7:28788",
  9. "active" : false
  10. },
  11. ...

有了上述结果,您就可以根据来源ip做进一步的分析,得出各个ECS跟实例分别建立了多少连接信息。

生产环境连接数快满了,如何限制每个ECS到实例的连接数量?

基本所有的MongoDB driver都支持通过Connection String URI来连接实例来连接实例,云数据库的连接URI已为用户在控制台上生成好,加上密码信息就能直接使用。

如果采用URI来连接实例的,在URI末尾加上&maxPoolSize=xx来限制到实例的连接数即可。比如你有10台ECS并发访问实例,实例的最大连接数为1000,那么每个ECS上的连接池的数量要控制在100以内。

不同语言的客户端封装了不通的连接方式,但也一定有方法指定连接池的数量限制,具体参考各语言客户端的api文档。

本文导读目录