免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12617 | 回复: 10
打印 上一主题 下一主题

Mysql的MEMORY引擎的性能 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-27 12:30 |只看该作者 |倒序浏览
大家好,今天做了一个mysql的MEMORY数据引擎的测试,发现其速度并不比MyISAM引擎快,我建了两个表结构一模一样的表,一个id是自增长的,另外两个字段一个是string,一个是bigint,测试结果是:
都插入500000条记录,两个引擎用的时间都是34分钟左右。
奇怪的是查询效率,两种引擎查询的条件是一样的,运行的每条语句也一模一样,但结果是效率几乎相同。

下面是我用来查询的脚本,插入的也类似:
  1. #!/bin/bash
  2. for ((i=100;i<=600;i++))
  3. do
  4.     echo "select * from testTable where intB > $i;" | mysql -uroot -ptest test > /dev/null
  5. done
复制代码
我的问题是:
1. mysql插入50万的数据用半个多小时,感觉效率不是很快,这个有人做过类似测试吗?
2. 理论上讲,MEMORY引擎应该快很多,但为啥感觉没什么效果?
3. 查询效率理论上讲在MEMORY里面的应该快很多,但没看到区别,那MEMORY重启mysql还丢数据,这个引擎到底优势在哪里呢?
4. 谁有my.cnf文件的配置原则类的文档?我想可能调优一下能好些?

多谢各位指点。

论坛徽章:
0
2 [报告]
发表于 2010-06-27 12:31 |只看该作者
对了,忘了说一下我机器的配置,Intel I7的cpu,12G内存

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
3 [报告]
发表于 2010-06-28 15:45 |只看该作者
memory 快在数据的获取避免的 从磁盘load的过程,也就避免的机械硬盘寻道这么一个比较慢的操作。更白话一点就是 普通硬盘和固态硬盘的速度差距。

论坛徽章:
5
荣誉会员
日期:2011-11-23 16:44:17CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-09-18 15:15:45未羊
日期:2014-02-25 14:37:19射手座
日期:2014-12-26 22:55:37
4 [报告]
发表于 2010-06-28 16:03 |只看该作者
memory 快在数据的获取避免的 从磁盘load的过程,也就避免的机械硬盘寻道这么一个比较慢的操作。更白话一点 ...
cenalulu 发表于 2010-06-28 15:45

太简单化了,SDD再快能快过内存?内存带宽都是以GB/S来计算,你后面恐怕要用USP-V DS8000配SSD外加主机插几十块HBA卡才可能到这个带宽。更不用说延迟,内存延迟是ns级别,IO怎么也是ms级别(包括上OS下文切换,中断,等等带来)。

论坛徽章:
5
荣誉会员
日期:2011-11-23 16:44:17CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-09-18 15:15:45未羊
日期:2014-02-25 14:37:19射手座
日期:2014-12-26 22:55:37
5 [报告]
发表于 2010-06-28 16:05 |只看该作者
大家好,今天做了一个mysql的MEMORY数据引擎的测试,发现其速度并不比MyISAM引擎快,我建了两个表结构一模一 ...
HappyWin 发表于 2010-06-27 12:30

我记得DEFAULT情况下,HEAP表有大小限制,好像不超过128M。如果你没改那个my.cf,超过这个限制,好像自己动变成myisam表。
MEMORY tables are never converted to disk tables. To ensure that you
don’t accidentally do anything foolish, you can set the max_heap_table_size
system variable to impose a maximum size on MEMORY tables. For individual tables,
you can also specify a MAX_ROWS table option in the CREATE TABLE statement
你自己检查一下。

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
6 [报告]
发表于 2010-06-28 17:14 |只看该作者
太简单化了,SDD再快能快过内存?内存带宽都是以GB/S来计算,你后面恐怕要用USP-V DS8000配SSD外加主机插 ...
wolfop 发表于 2010-06-28 16:03



    所以说了是大白话么- -

论坛徽章:
0
7 [报告]
发表于 2010-06-28 21:35 |只看该作者
你试把那个大于号,换成=号,试一下效果.
你的结果集每次太大了.

或是你限制一下结果集大小试一下,加一个limit .

论坛徽章:
0
8 [报告]
发表于 2010-06-28 22:51 |只看该作者
还有你得加上sql_no_cache吧

论坛徽章:
0
9 [报告]
发表于 2010-06-29 13:00 |只看该作者
多谢楼上各位的耐心解答,我已经设置了max_heap_table_size = 1024M, 应该是起作用了,因为我重启msqlservre,这个表的数据会被清空,看起来确实是在memory里面。

至于结果集确实是大了点,但我的疑问是,对于同样大小的结果集,为啥myIsam引擎跟MEMORY引擎性能没看出区别呢?按说应该有区别才对。

sql_no_cache是为了避免mysql对结果进行缓存,对我这个测试有影响吗?可能是测试用的语句echo "select * from testTable where intB > $i;" | mysql -uroot -ptest每次都会重新启动一个process链接数据库对性能有影响,但这些对两种引擎都是一样的啊。

多谢各位,希望有应验的朋友一起分享。

论坛徽章:
0
10 [报告]
发表于 2010-06-29 15:46 |只看该作者
回复 5# wolfop


    不会的,超过限制报错.做全表扫描,我相信memory还是比较快的,还有他的hash索引做等值查询也不错.不过我不喜欢memory表,没想象的那么出色,数据不能持久化等等
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP