LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1215|回复: 1

一个关于MySQL高速缓冲的设想,Linux下如何实现?

[复制链接]
发表于 2005-11-15 18:53:17 | 显示全部楼层 |阅读模式
网站的MySQL数据库大约1G(预计增长最大不超过1.5G),SELECT占95%以上,UPDATE和INSERT基本上没有。服务器的内存很大,有4G,然而要命的是只有一个7200转的SATA硬盘,并且不支持NCQ功能,一遇到多个并发查询时就慢的像蜗牛!
我有个不增加任何投资的改善性能的想法,大家看看如何实现?
专门划出1.5G内存来建立一个data目录的镜象,读取时只从内存中读取(不访问硬盘),写入时同时更新内存和硬盘,这样硬盘就变成一个“只写”存储器。
由于写操作很少,这样可以有效的避免硬盘操作从而提高效率,而剩余的2.5G内存也不算小。
大家说说看这个如何实现呢?
问题的关键在于如何保证读取的时候只访问内存,而写入的时候同时更新内存和硬盘。
不用ShareMemery和RamDisk的原因在于不能保证实时刷新硬盘,这样万一掉电的话,就要哭死了~
================
补充说明
================
query-cache的用处不大,因为想要这样做最初的一个原因是受到了sql查询攻击,攻击者利用网站在用户注册时必须遍历库以确定是否有重复的用户名,然后不停的提交随机生成的用户名进行查询,这样每次查询的语句都不一样,所以query-cache再大也没有用,硬盘还得拼命的转~
当然也可以通过建立索引来避免遍历,但这里只是为了说明问题而举的例子,因为某些查询始终是无法避免遍历的,比如提取大于平均值的记录。
这个想法的本意是在用内存的高速度代替硬盘的低速度,同时又要有较强的抗风险能力[掉电或内存崩溃时丢失的数据不会超过崩溃前的2秒]
================
一种可能的实现
================
为每张表建立两个版本,一个放在硬盘上(innoDB),一个放在内存里(HEAP)。
修改程序,使SELECT仅操作HEAP表,UPDATE和INSERT同时操作innoDB和HEAP表。
评价:麻烦,需要大量修改现有程序!
================
有没有更好的实现方案呢?各路英雄豪杰,请踊跃发言!
比如从操作系统层着手,或者使用其他技术?
发表于 2005-11-22 14:01:44 | 显示全部楼层

我也有过这样的想法

  我也有过类似的想法,但后来改变了。
  第一,感觉没必要这样做。
  对于一台计算机,要让它运行得快,必然就想把很多放在硬盘上的数据放直接放在内存中。一台有着4G内存的计算机,往往其上的数据库要大于4G;反言之,数据库没那么大,也没必要花钱用那么好的计算机了。
  第二,数据库缓冲应该由开发数据库服务器的人来实现。一个良好的数据库服务器就应该有较大的弹性,能够充分利用现有内存来提升性能。操作系统运行一段时间后就有不少系统缓存。
  所以,还是为买服务器省点钱吧,配SATA的RAID可能比加内存更划算。
回复 支持 反对

使用道具 举报

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

本版积分规则

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