亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > regex > 正文

解決正則表示式匹配($regex)引起的一次mongo數據庫cpu占用率高的問題

2020-01-20 21:33:33
字體:
來源:轉載
供稿:網友

某一天,監控到mongo數據庫cpu使用率高了很多,查了一下,發現是下面這種語句引起的:

db.example_collection.find({ "idField" : { "$regex" : "123456789012345678"} , "dateField" : { "$regex" : "2019/10/10"}})

通常,遇到這種情況,我第一反應是缺少相關字段的索引,導致每執行一次這種語句都會全表掃描一次。

但是我用explain( )語句分析了下,發現上面所涉及的兩個字段idField、dateField是有索引的,并且該語句也是有使用到索引的。如下為explain( )的結果:

mgset-11111111:PRIMARY> db.example_collection.find({ "idField" : { "$regex" : "123456789012345678"} , "dateField" : { "$regex" : "2019/10/10"}}).explain("queryPlanner"){    "queryPlanner" : {        "plannerVersion" : 1,        "namespace" : "example_db.example_collection",        "indexFilterSet" : false,        "parsedQuery" : {            "$and" : [                {                    "idField" : {                        "$regex" : "123456789012345678"                    }                },                {                    "dateField" : {                        "$regex" : "2019/10/10"                    }                }            ]        },        "winningPlan" : {            "stage" : "FETCH",            "inputStage" : {                "stage" : "IXSCAN",                "filter" : {                    "$and" : [                        {                            "idField" : {                                "$regex" : "123456789012345678"                            }                        },                        {                            "dateField" : {                                "$regex" : "2019/10/10"                            }                        }                    ]                },                "keyPattern" : {                    "idField" : 1,                    "dateField" : 1                },                "indexName" : "idField_1_dateField_1",                "isMultiKey" : false,                "multiKeyPaths" : {                    "idField" : [ ],                    "dateField" : [ ]                },                "isUnique" : false,                "isSparse" : false,                "isPartial" : false,                "indexVersion" : 2,                "direction" : "forward",                "indexBounds" : {                    "idField" : [                        "[/"/", {})",                        "[/123456789012345678/, /123456789012345678/]"                    ],                    "dateField" : [                        "[/"/", {})",                        "[/2019/10/10/, /2019/10/10/]"                    ]                }            }        },        "rejectedPlans" : [ ]    },    "ok" : 1}


查看mongo的日志發現,這種語句執行一次就要800~900ms,的確是比較慢。除非數據庫cpu核數很多,要不然只要這種語句每秒并發稍微高一點,cpu很快就被占滿了。

之后搜索了下,發現有可能是正則表達式的問題。原來,雖然該語句的確是使用了索引,但是explain( )語句的輸出中還有一個字段"indexBounds",表示執行該語句時所需掃描的索引范圍。說實話,上面那個輸出中,我始終沒看明白它那個索引范圍。上面的語句對idField、dateField這兩個字段都進行了普通的正則表達式匹配,我猜測它應該是掃描了整個索引樹,所以導致索引并未實際提升該語句的查詢效率。

我看了下數據庫里面的數據,發現idField、dateField這兩個字段完全沒有必要進行正則匹配,進行普通的文本匹配就行。將正則匹配操作$regex去掉之后,再分析一下,結果是這樣的:

mgset-11111111:PRIMARY> db.example_collection.find({ "idField" : "123456789012345678", "dateField" : "2019/10/10"}).explain("queryPlanner"){    "queryPlanner" : {        "plannerVersion" : 1,        "namespace" : "example_db.example_collection",        "indexFilterSet" : false,        "parsedQuery" : {            "$and" : [                {                    "idField" : {                        "$eq" : "123456789012345678"                    }                },                {                    "dateField" : {                        "$eq" : "2019/10/10"                    }                }            ]        },        "winningPlan" : {            "stage" : "FETCH",            "inputStage" : {                "stage" : "IXSCAN",                "keyPattern" : {                    "idField" : 1,                    "dateField" : 1                },                "indexName" : "idField_1_dateField_1",                "isMultiKey" : false,                "multiKeyPaths" : {                    "idField" : [ ],                    "dateField" : [ ]                },                "isUnique" : false,                "isSparse" : false,                "isPartial" : false,                "indexVersion" : 2,                "direction" : "forward",                "indexBounds" : {                    "idField" : [                        "[/"123456789012345678/", /"123456789012345678/"]"                    ],                    "dateField" : [                        "[/"2019/10/10/", /"2019/10/10/"]"                    ]                }            }        },        "rejectedPlans" : [ ]    },    "ok" : 1}

可以看到,仍然使用到了索引,并且索引掃描范圍是僅限于一個值的。

后來跟開發人員確認了下,該語句確實沒必要使用正則匹配,就讓他把正則匹配去掉了。之后就沒有再出現問題了,mongo慢日志中也未再出現該語句。

總結

以上所述是小編給大家介紹的解決正則表示式匹配($regex)引起的一次mongo數據庫cpu占用率高的問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久中文字幕久久av| 日本三级韩国三级久久| 欧美成人久久久| 日韩精品中文字幕在线观看| 亚洲欧美日韩一区二区三区在线| 久久精品国产亚洲一区二区| 久久天天躁狠狠躁老女人| 日韩欧美一区二区三区久久| 精品精品国产国产自在线| 欧美午夜美女看片| 国产精品成人在线| 国产精品 欧美在线| 亚洲xxxx3d| 欧美做受高潮电影o| 成人免费网站在线看| 中文字幕国产精品| 17婷婷久久www| 成人黄色生活片| 亚洲国内精品在线| 国产精品麻豆va在线播放| 国内精品久久久久久久| 国内精品久久久久久久| 亚洲老板91色精品久久| 欧美国产日韩一区二区| 91美女片黄在线观看游戏| 亚洲毛片在线免费观看| 日韩一区二区三区国产| 欧美极品少妇全裸体| 国产精品678| 91亚洲精品久久久久久久久久久久| 91精品久久久久久久久久久久久久| 国产999在线观看| 国产69精品久久久久9| 久久久99久久精品女同性| 性亚洲最疯狂xxxx高清| 国产视频观看一区| 69视频在线播放| 国产亚洲精品久久久| 欧美插天视频在线播放| 欧美国产日本高清在线| 91精品久久久久| 亚洲午夜色婷婷在线| 日本久久中文字幕| 国产精品视频26uuu| 国产精品www色诱视频| www日韩中文字幕在线看| 欧美午夜片在线免费观看| 亚洲欧美色婷婷| 青青青国产精品一区二区| 日本中文字幕不卡免费| 91人人爽人人爽人人精88v| 韩国精品美女www爽爽爽视频| 久久偷看各类女兵18女厕嘘嘘| 91国产美女在线观看| 国产欧美日韩精品丝袜高跟鞋| 国产精品精品久久久| 久久精品99久久香蕉国产色戒| 欧美精品久久久久久久免费观看| 成人免费淫片aa视频免费| 亚洲欧美制服综合另类| 韩国视频理论视频久久| 国产一区二区三区四区福利| 国内外成人免费激情在线视频网站| 欧美国产日产韩国视频| 欧美孕妇性xx| 欧美国产极速在线| 久久久久免费精品国产| 国产精品h在线观看| 中文字幕欧美日韩va免费视频| 成人黄色在线免费| 欧美激情二区三区| 国产91在线播放九色快色| 在线看国产精品| 91久久国产婷婷一区二区| 精品一区二区电影| 欧美亚洲一区在线| 国产裸体写真av一区二区| 91精品国产自产在线| 九九九热精品免费视频观看网站| 国产精品国产三级国产专播精品人| 欧美日韩综合视频| 日韩精品视频免费专区在线播放| 亚洲xxxx3d| 国产欧美精品日韩精品| 正在播放欧美一区| 国产精品久久久久久久午夜| 国产91精品久久久久久久| 91在线网站视频| 久久久综合av| 日韩精品免费在线视频| 亚洲a级在线观看| 日韩精品视频在线观看网址| 欧洲精品毛片网站| 国产一区香蕉久久| 亚洲奶大毛多的老太婆| 亚洲综合日韩中文字幕v在线| 精品国产福利在线| 欧美与黑人午夜性猛交久久久| 麻豆乱码国产一区二区三区| 精品成人在线视频| 久久久久久久久久久免费精品| 久久精品中文字幕电影| 国产精品视频免费在线| 丝袜情趣国产精品| 中文字幕久久精品| 8x海外华人永久免费日韩内陆视频| 97在线精品国自产拍中文| 91香蕉亚洲精品| 欧美成人在线免费| 久久久在线观看| 欧美性猛交xxxx乱大交| 91亚洲va在线va天堂va国| 国产一区二区在线免费| 日韩欧美在线字幕| 国产成人亚洲综合91| 久久久久日韩精品久久久男男| 国产精品久久久久久久久免费看| 亚洲国产成人在线播放| 俺去啦;欧美日韩| 欧美激情中文字幕在线| 国产啪精品视频网站| 91tv亚洲精品香蕉国产一区7ujn| 亚洲综合中文字幕68页| 另类专区欧美制服同性| 成人激情视频小说免费下载| 日韩电视剧在线观看免费网站| 久久精品91久久香蕉加勒比| 成人情趣片在线观看免费| 欧美精品电影免费在线观看| 欧美一级电影免费在线观看| 亚洲国产精品高清久久久| 国产精品久久久久久久av电影| 欧美激情18p| 中国日韩欧美久久久久久久久| 亚洲一区二区三区视频播放| 欧美亚洲一级片| 精品美女国产在线| 97精品在线观看| 久久人人97超碰精品888| 精品中文字幕在线观看| 91网站免费看| 精品亚洲一区二区三区在线观看| 国产精品久久久久秋霞鲁丝| 国产91热爆ts人妖在线| 久久精品中文字幕免费mv| 亚洲精品国产suv| 亚洲欧美日韩网| 日韩在线不卡视频| 欧美亚洲另类激情另类| 国产国语刺激对白av不卡| 国产精品久久久久久一区二区| 日韩精品中文字| 日韩在线视频网| 国产精品高精视频免费| 中文字幕av一区二区| 国产亚洲精品久久久优势| 亚洲精品视频免费在线观看| 911国产网站尤物在线观看| 日韩中文字幕在线播放| 日韩精品在线免费观看视频| 亚洲人成亚洲人成在线观看| 亚洲欧美在线免费| 在线电影av不卡网址| 日韩福利伦理影院免费|