mongodb CPU占用过高

问题描述

  • 机器配置:2核2G
  • 环境配置:python3.7 asyncio爬虫使用morto读取写入数据库
  • 问题字段:account_id在数据库中设置为 唯一索引键。当清洗数据后,通过字段account_id检测重复,cpu就会占用极高,而且占用cpu的程序不是mongod服务,是我自己的爬虫程序

解决过程

  • 初步判断是因为程序在空转for循环。导致cpu持续不下来
  • 问题已经明确定位在自己的爬虫程序上
  • 每次只运行一条操作数据库sql,确认问题sql
  • 最后经过排查,是因为async并发量太高,数据回来之后,都在此处等待着检测重复逻辑,因为任务都等待在这,async内部会不断的轮询检测already的task,但是任务又一直在等待!
  • 对于我的程序来说,降低并发量并不太现实,只能在mongo的collection设计上做出改变,因为我检测逻辑是唯一索引,每次查询或者写入,都是需要锁表的,导致这些任务都在这阻塞,通过新建一个collection,不做任何索引,数据来了就异步写入,这样就不会导致ascync内部的检测循环一直空转,导致cpu过高

你可能感兴趣的:(mongodb CPU占用过高)