mysql5资源共享

 找回密码
 立即注册
查看: 77|回复: 6

[其他数据库] 【MongoDB】MongoDB首次查询很慢的怎么办

[复制链接]

1

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2017-4-20 09:37:31 | 显示全部楼层 |阅读模式
我在项目中遇到一个MongoDB的问题,好多天了还是没能得到解决,希望得到大牛的指点。
具体问题是:长时间不访问数据库的情况下,第一次查询数据库所需的时间很长,但是之后的查询就会很快。
具体情况:
①整个数据库大小大概在1.9TB左右;
②我查询的collection的数据大致为700万条;
③我查询一次得到的数据为23万条左右;
④服务器内存为120GB;
⑤已按照查询条件建立了索引,索引数据大小为600MB左右;
⑥第一次查询所用时间20s左右,之后的查询在1s以内。
目前考虑的原因:
由于MongoDB不负责内存的管理,所以,当长时间未访问数据库时,内存中的数据即为冷数据,操作系统的内存管理程序就会将这部分冷数据释放,导致下次查询时,需要重新加载数据到内存,所以比较费时。目前,不能够确定是加载索引比较费时,还是加载数据比较费时。MongoDB虽然提供了touch命令(该命令能够指定将某个collection的索引数据或者用户数据加载到内存中),但是我使用的是WiredTiger存储引擎,该命令不支持该存储引擎。
需要得到的帮助:
①是不是以上原因导致的该问题?
②如果是该原因导致的,如何确定是加载索引费时还是加载数据费时?
③有什么比较好的解决方案么?

注:由于该collection最大会达到25GB左右,而且整个数据库还有其他很多collection,所以将该collection的所有数据存储到内存是不可取的。如果能够确认是加载索引费时的话,倒是可以考虑定期将索引加载到内存,但是对于WiredTiger存储引擎,没有支持该功能的方法,这又是一个问题。
回复

使用道具 举报

20

主题

1072

帖子

2190

积分

金牌会员

Rank: 6Rank: 6

积分
2190
发表于 2017-4-27 10:41:34 | 显示全部楼层
如果对这么大数据必须要这么强的实时性可以考虑用内存引擎替换wiredtiger
回复

使用道具 举报

0

主题

3

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2017-12-4 14:06:46 | 显示全部楼层
楼主解决了吗,同样遇到类似的问题,时间长不访问第一次访问速度很慢。然后再访问速度就正常了
回复

使用道具 举报

6

主题

18

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2018-4-27 15:12:19 | 显示全部楼层
mark一下我也发现这个问题了因为我是web访问的数据所以我一直以为是浏览器的问题看来是mongo的问题
回复

使用道具 举报

0

主题

57

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2018-4-29 22:20:04 | 显示全部楼层
系统启动开始自动进行一次随机一个数据的查询不行吗?
回复

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2018-5-2 17:13:17 | 显示全部楼层
每天来个预热查询吧。
                                                       
                                                               
回复

使用道具 举报

0

主题

3

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2019-7-18 13:56:29 | 显示全部楼层
我目前也遇到这个问题,使用explain查询语句发现首次查询需要saveState和restoreState大量数据,第二次这个数据就会小很多,请问楼主这个问题解决了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2019-10-23 00:10 , Processed in 0.046298 second(s), 18 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

快速回复 返回顶部 返回列表