MySQL-LINUX下,MYSQL数据库文件是否会完全缓存进内存?
假设
一台服务器物理内存18G。 MySQL的test数据库5G。
在MySQL启动后,linux会将文件直接放到内存中执行。
是否可以将 MySQL数据库文件 完全缓存进物理内存。
然后MySQL进行查询操作时,通过linux的机制,直接从物理内存中读取MySQL文件,进行查询?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
http://www.taobaodba.com/html/552_mysql_avoid_swap.html
我给个链接
局部表放到内存还比较靠谱,完全把整个MYSQL数据都放到内存中怎么听起来不是特别靠谱
方法:
1. mysql用heap表
2. echo 0 > /proc/sys/vm/swappiness
3. mysql带 -memlock 参数,不过内存不够mysql立刻退出
4. 安装linux时不分 swap区
5. 把数据文件拷贝到linux ramdisk上。
你想把数据缓存到内存加快执行的思想是正确的,毕竟IO(网卡、硬盘)非常耗时。
还需要考虑以下几点:
1.CPU访问IO虽然耗时,但现在不是CPU完全参与IO操作的时代了,已经经过中断->DMA->IO通道的发展了。
2.可以使用异步IO模型读取数据。读取IO时,可以做些其它的事。
3.MySQL数据库内部进行的优化是相当多的,它要是认为把数据全部读入内存快早就装入了。
往往DB中会有一个精密的内存管理机制,缓存最近使用的数据库页。一般是时钟替换算法。而且保存了用户以前执行的查询的编译结果,为相似查询节约了编译时间。甚至有些数据库如SQL-Server还会统计使用这些内存,消耗的CPU和IO代价,然后作调整。
4.服务器上的性能优化不是单单针对IO的优化,还有共享锁、吞吐率、内核调用、进程线程切换等。把全部数据缓存进内存,很有可能使得操作系统其它的性能降低。
5.数据完全缓冲入内存,若突然断电或死机,数据都会丢失。