MongoDB 插入更新数据慢,开发问哪的问题? 附带解决方案和脚本

文摘   2024-10-18 06:02   天津  

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2500人左右 1 + 2 + 3 + 4 +5 + 6 + 7)(1 2 3 4 5 群均已爆满,6群超过450人关闭自由申请,新人进7群,准备开8群)

     上一篇关于MongoDB的8个脚本的帖子火了,好多人入群差不多一上午20个吓了我一跳,看来MongoDB的号召力还是比较大,很多人还是有一些MongoDB的困扰和问题的,今天咱们就来一个疑难杂症的解决方案,并且给大家一个解决的脚本。

瞬间成为MongoDB专家,8个脚本都写好了,一用一个不吱声

(顺便说一句,认为脚本有问题的,进群问,不是脚本的问题,是有的脚本为了安全,有的地方你的自己稍微改几个字)

今天的问题是,如果有开发问你,MongoDB插入速度慢,你怎么解决??

     说到这个问题,可能很多人都会有疑问,MongoDB插入慢,不会呀MongoDB插入数据很快呀,怎么会慢,是的MongoDB插入(更新)数据在普通情况上是很快的,不会有什么问题,但你是否留意过以下集中情况。

1  数据库在频繁的进行大量数据的插入,而你的数据插入就会被影响,在同一个collecion。

2  数据库在进行查询(慢查询),而你要进行数据的更新,这二者如果是同一条数据,就有产生锁 

3  副本集中插入数据或更新数据采用了多节点确认的情况或本身副本集中的节点较多,比如5个7个等,而且你选择了write concern,或者确认多个节点写成功后,才能commit的情况下,那必然是慢。

通用的方案中,我们一般采用Mongotop, 来观察MongoDB的总的读取和写入的时间

ns                         total    read    write
application.phonenumber     100ms    60ms    40ms

       但是这样的方案并不解决问题,主要是开发会问到底因为什么慢??你凭上面的东西能说清楚吗?还是你要看慢查询,慢查询解决的了问题吗???

       当然这里有人说,我们用mnogostat 里面有locked 的这个百分比,说明在监控中这个数据库有多长时间在锁定的状态,当然这是一个方案,但参见我们上面的问题,开发问到底是什么锁,锁定的,怎么锁定的。

       你这时就傻眼了,不知道怎么办了,这个帖子的就在这里等你呢, 通过下面的脚本,实时监控你的数据库到底是哪个操作在被锁定,锁定了什么,怎么锁定的,什么锁锁定的。

      下图是脚本执行时的打印,一秒打印一次,如果在一秒中有任何的写入,查询被锁,都会打印出来。脚本是通过Node.js 撰写的,如果对这个部分敢兴趣,Node,js 如何安装等,可以参考,下面文章,里面有一部分关于如何安装Node.JS 和如何运行,当然PG 运行Node.js比MongoDB 要麻烦一些,终究MongoDB 原生支持Node.js.

PostgreSQL 远程管理越来越简单,6个自动化脚本开胃菜

[mongo@mongo4 ~]$ mongosh mongodb://root:1234.Com@192.168.198.100:27027/admin --file checklock.js 
[2021-12-14T21:54:10.374Z] No operations waiting for lock.
[2021-12-14T21:54:11.381Z] No operations waiting for lock.
[2021-12-14T21:54:12.410Z] No operations waiting for lock.
[2021-12-14T21:54:13.426Z] No operations waiting for lock.
[2021-12-14T21:54:14.441Z] No operations waiting for lock.
[2021-12-14T21:54:15.464Z] No operations waiting for lock.
[2021-12-14T21:54:16.481Z] No operations waiting for lock.
[2021-12-14T21:54:17.498Z] No operations waiting for lock.
[2021-12-14T21:54:18.517Z] No operations waiting for lock.
[2021-12-14T21:54:19.530Z] No operations waiting for lock.
[2021-12-14T21:54:20.552Z] No operations waiting for lock.
[2021-12-14T21:54:21.569Z] No operations waiting for lock.
[2021-12-14T21:54:22.613Z] No operations waiting for lock.
[2021-12-14T21:54:23.635Z] No operations waiting for lock.
[2021-12-14T21:54:24.653Z] No operations waiting for lock.
[2021-12-14T21:54:25.665Z] No operations waiting for lock.
[2021-12-14T21:54:26.677Z] No operations waiting for lock.
^CStopping execution...MongoshInterruptedError: execution was interrupted、

var db = connect('mongodb://root:1234.Com@192.168.198.100:27027/admin');


function captureWaitingForLockOperations() {
    while (true) {  
       
        var ops = db.adminCommand({ currentOp: 1, "waitingForLock"true });
        
     
        var timestamp = new Date().toISOString();
        
        if (ops.inprog.length > 0) {
            print("[" + timestamp + "] Waiting for Lock Operations Detected:");
            
        
            ops.inprog.forEach(function(op) {
                printjson({
                    opid: op.opid,
                    ns: op.ns,
                    query: op.query,
                    client: op.client,
                    lockType: op.lockType,
                    secs_running: op.secs_running,
                    waitingForLock: op.waitingForLock
                });
            });
        } else {
            print("[" + timestamp + "] No operations waiting for lock.");
        }
        
     
        sleep(1000);
    }
}


captureWaitingForLockOperations();

这个脚本可以马上投入使用,且来探测你系统中是否有锁频繁的发生,且哪个语句被影响了。


置顶文章

用MySql不是MySQL, 不用MySQL都是MySQL 横批 哼哼哈哈啊啊

PostgreSQL 远程管理越来越简单,6个自动化脚本开胃菜

OceanBase  学习记录 --  开始入门

开发问MySQL 大事务证据,一个脚本堵上他的嘴

撕逼!PostgreSQL 和 MongoDB 开撕,MySQL却躺枪

MongoDB  系统IOPS 告警系统处于崩溃,优化语句从1秒优化到1毫秒解决问题

MongoDB 入门教学贴 从术语到操作 (约束怎么建立  内部培训贴)

MongoDB 谨献给说MongoDB 这不好那不好的“古董”  -- 发展与演进,从3 到 7 的卓越变化

MongoDB 的一张“大字报”  服务客户,欢迎DISS

专访唐建法-从MongoDB中国第一人到TapData掌门人的故事

DBA 失职导致 PostgreSQL 日志疯涨



往期热门文章:


微软 “爱” 上PostgreSQL, PG  “嫁给” 微软!

PostgreSQL 软肋 “最大连接数” 到底是不是问题?

PostgreSQL 具有createdb的用户无法创建数据库的原因(之一)
PostgreSQL 同样的语句 一会快 一会慢到底怎么回事,
云原生数据库是青出于蓝胜于蓝,还是数据库产品的倒退?
MySQL 8.0x 到 9.0均可能崩溃--云厂商开发指责 MYSQL不测试就推新版本?

阿里云数据库--市场营销聊胜于无--3年的使用感受与反馈系列

阿里云数据库产品 对内对外一样的卷 --3年阿里云数据库的使用感受与反馈系列

阿里云数据库使用感受--客户服务问题深入剖析与什么是廉价客户 --3年的使用感受与反馈系列

阿里云数据库使用感受--操作界面有点眼花缭乱 --3年的使用感受与反馈系列

临时工说:DBA 7*24H 给2万的工作,到底去不去?

PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈

PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了

临时工访谈:问金融软件开发总监  哪些业务不用传统数据库
PolarDB  Serverless POC测试中有没有坑与发现的疑问
临时工访谈:PolarDB Serverless  发现“大”问题了  之 灭妖记 续集
临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一
PolarDB for PostgreSQL  有意思吗?有意思呀
PolarDB  Serverless POC测试中有没有坑与发现的疑问

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验

临时工访谈:从国产数据库 到 普罗大众的产品 !与在美国创业软件公司老板对话

PostgreSQL 如何通过工具来分析PG 内存泄露

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
临时工访谈:我很普通,但我也有生存的权利,大龄程序员 求职贴
临时工说: 快速识别 “海洋贝壳类” 数据库方法速递
临时工说:国产 数据库 销售人员  图鉴
临时工说:DBA 是不是阻碍国产数据库发展的毒瘤 ,是不是?从国产DB老专家的一条留言开始 (其实更好看的是文章下方的留言)

感谢 老虎刘 刘老师 对 5月20日 SQL 问题纠正贴 ---PostgreSQL 同一种SQL为什么这样写会提升45%性能

PostgreSQL 同一种SQL为什么这样写会提升45%性能 --程序员和DBA思维方式不同决定

MongoDB 不是软柿子,想替换就替换

PostgreSQL  熊灿灿一句话够学半个月 之 KILL -9

MongoDB  挑战传统数据库聚合查询,干不死他们的

临时工说:国内数据库企业存活   “三板斧”

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一  (阿里云组团PK笔者实录

临时工访谈:金牌 “女” 销售从ORACLE 转到另类国产数据库 到底  为什么?

临时工访谈:无名氏意外到访-- 也祝你好运(管理者PUA DBA现场直播)

临时工说:搞数据库 光凭的是技术,那DBA的死多少次?

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?
临时工说:分析当前经济形势下 DBA 被裁员的根因
PostgreSQL PG_DUMP 工作失败了怎么回事及如何处理
MySQL 八怪(高老师)现场解决问题实录
PostgreSQL 为什么也不建议 RR隔离级别,MySQL别笑
临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
临时工访谈:恶意裁员后,一个国产数据库企业程序员的心声
临时工说:上云后给 我一个 不裁 DBA的理由
PolarDB for PostgreSQL  有意思吗?有意思呀
PostgreSQL   玩PG我们是认真的,vacuum 稳定性平台我们有了
临时工说:裁员裁到 DBA 咋办  临时工教你 套路1 2 3
PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
MONGODB  ---- Austindatabases  历年文章合集
MYSQL  --Austindatabases 历年文章合集
POSTGRESQL --Austindatabaes 历年文章整理
POLARDB  -- Ausitndatabases 历年的文章集合
PostgreSQL  查询语句开发写不好是必然,不是PG的锅
SQL SERVER 如何实现UNDO REDO  和PostgreSQL 有近亲关系吗
MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB  双机热备那篇文章是  “毒”
MongoDB   会丢数据吗?在次补刀MongoDB  双机热备
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB  到底打倒了谁  PPT 分享 (文字版)
PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

Austindatabases 公众号,主要围绕数据库技术(PostgreSQL, MySQL, Mongodb, Redis, SqlServer,PolarDB, Oceanbase 等)和职业发展,国外数据库大会音译,国外大型IT信息类网站文章翻译,等,希望能和您共同发展。

截止今天共发布 1234篇文章

AustinDatabases
关于数据库相关的知识分享
 最新文章