Mysql内存表的用处
文章出自:http://blog.csdn.net/hitzhang/article/details/5994639
个人最欣赏mysql的地方就是他存储引擎的多样性和可扩展性,这样mysql也能拥有多种多样的个性,嘿嘿!
那今天说说内存表的用处吧:
- 说实话mysql的myisam引擎在查询、插入等方面和内存表引擎基本上是不相伯仲的,所以第一个建议还是能用myisam的地方还是选择myisam引擎
- 但是最近遇到一个比较麻烦的问题,一个用来存储信息的维表,需要频繁的查询、插入以及较频繁的更新操作,并且这个维表非常的大,先是采用myisam引擎并进行数据的分表,拆分成1000个小表,性能也是不错。但是随着数据量的增加和并发度的增加,由于这些表上都有大量的索引,当插入的并发度比较大的时候,mysql的对于磁盘的使用骤然升高,造成系统对于磁盘io的等待,异常的高。
- 由于查询的需求,索引有不能drop掉,所以最开始着手于修改mysql的参数,来提高系统的性能(比如delay
insert、batch insert等等),但是效果均不是很理想 - 后来考虑到机器的内存尚有结余,最后采用了内存表的方式,解决了这个问题,基本上消除了磁盘io的等待,系统的负载也基本上下降了一倍
但是这种方式还是有不少问题的:
- 内存表一旦mysql重启,将造成数据丢失,还好这个维表对于数据安全性要求不高,可以允许部分数据丢失,补救方式就是每天在系统负载低的时候进行备份
- 内存表删除后,内存的释放问题:
- 最开始遇到一个很纠结的问题,将建立的这1000个内存引擎小表drop后,系统竟然没有回收内存,先是怀疑mysql存在内存泄露,经过几天对mysql内存引擎源代码的阅读,确定不是内存泄露的问题,后来经过查看linux
malloc相关文档,才发现是glibc没有将这些内存交还给系统内核,由于分表后这1000个表都相对较小,gblic的free函数并没有立即将内存sbrk给内核(以备以后的再次malloc),造成这部分内存无法被内核回收 - 这样的话会造成mysql的内存占用异常的高,如果这时候有另外一个程序需要大耗内存的话,可能会有风险。(这块还需要详细测试一下)
- 最开始遇到一个很纠结的问题,将建立的这1000个内存引擎小表drop后,系统竟然没有回收内存,先是怀疑mysql存在内存泄露,经过几天对mysql内存引擎源代码的阅读,确定不是内存泄露的问题,后来经过查看linux
小结一下咯:
对于mysql的用户,如果对数据表的内容安全性要求不高,而对于数据的查询和插入的并发度都很大,并且磁盘io成为瓶颈的话,可以使用内存引擎试一试了,也许会有不错的效果
版权声明:本文为博主原创文章,未经博主允许不得转载。
Mysql内存表的用处的更多相关文章
- MySQL内存表的特性与使用介绍 -- 简明现代魔法
MySQL内存表的特性与使用介绍 -- 简明现代魔法 MySQL内存表的特性与使用介绍
- MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录
MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录 MySQL内存表(MEMORY)说明
- 关于mysql内存表的一个帖子(转载)
地址:http://bbs.csdn.net/topics/360030699 引用楼主 zgycsmb 的回复:问:1mysql的内存表性能怎么样2mysql的内存表与system v 这种共享内存 ...
- MySql 内存表使用
MySql 内存表使用 内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库,但是使用上受到一些限制,以下是蓝草使用的一些感受. 1.heap对所有用户的连接是可见的,这 ...
- MySQL内存表-临时表
HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引.但如果MySQL或者服务器重新启动,表中数据将会丢失.用法:如论坛的在线人数统计,这种表的数据应该是无关紧要的,就几个简单的字 ...
- MySQL内存表的特性与使用介绍
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- mysql 内存表
show variables like 'max_%'; max_heap_table_size 16777216 max_tmp_tables 32 show variables l ...
- MySQL的内存表(转)
说明:MySQL内存表可以提升一些临时业务的查询,比如做Session的共享,一些类似缓存的数据等. “内存表”顾名思义创建在内存中的表,真是这样吗?其实不然,MySQL的内存表,表结构创建在磁盘上, ...
- mysql的内存表和临时表
内存表: session $ mysql -uroot root@(none) ::>use test Database changed root::>CREATE TABLE tmp_m ...
随机推荐
- spring集成Apache的ActiveMQ
1.直接看优秀的博客 http://www.open-open.com/lib/view/open1435496659794.html
- 17.1.1.3 Creating a User for Replication 创建一个用于用于复制:
17.1.1.3 Creating a User for Replication 创建一个用于用于复制: 每个slave 连接到master 使用一个MySQL 用户名和密码, 因此必须有一个用户账户 ...
- TeeChart中Axis的CalcIncrement属性
private void Init() { tChart = new TChart(); panel1.Controls.Add(tChart); tChart.Aspect.View3D = fal ...
- [FJSC2014]圈地
[题目描述] 2维平面上有n个木桩,黄学长有一次圈地的机会并得到圈到的土地,为了体现他的高风亮节,他要使他圈到的土地面积尽量小.圈地需要圈一个至少3个点的多边形,多边形的顶点就是一个木桩,圈得的土地就 ...
- JSOI2008 火星人prefix
1014: [JSOI2008]火星人prefix Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2918 Solved: 866[Submit][ ...
- 基础题:HDU 5122 K.Bro Sorting
Matt's friend K.Bro is an ACMer.Yesterday, K.Bro learnt an algorithm: Bubble sort. Bubble sort will ...
- EF中执行存储过程,获取output返回值
EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...
- linux下jdk的卸载与安装
JDK的卸载 1.检查jdk的是否安装,显示如下表示安装: [root@localhost ~]# rpm -aq|grep java tzdata-java-2010l-1.el6.noarch j ...
- Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子
Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...
- [SDOI2015]权值
问题描述: 有一个长度为n的实数序列,,下标从1开始,其中第k个位置的实数为p · (sin(a · k + b) + cos(c · k + d) + 2),sin和cos采用弧度制,其中p,a,b ...