“MemSQL is a next generation database that removes the most common bottleneck most applications hit today: disk.”
一 下载&安装
MemSQL 安装过程相当容易,不过需要留意的是MemSQL所要求的OS系统版本较高,如CentOS 6.0.
MemSQL属于商业软件,下载时,需在官网输入注册信息,注册完成,官网会生成下载link,供下载如:
http://download.memsql.com/98215169d6d34898847c4a332292e819/memsqlbin_amd64.tar.gz
安装过程中的指令:./check_system 会检查MemSQL所依赖的所有系统包,若lib版本过低,也会提示是否需升级,整个过程完全自动化,安装体验很不错.
为更易了解MemSQL的使用方法及性能,测试服务器同时安装有MemSQL与MySQL: MySQL使用默认端口: 3306 ; MemSQL使用端口:3307
安装完成,启动MemSQL: ./memsqld --port 3307
启动时,可能会遇到以下错误提示,导致服务启动失败:
[ERROR] Fatal error: Please run MemSQL as a non-root user or specify -u root on the command line.
根据ERROR提示,指明root用户即可: ./memsqld -uroot --port 3307
二 导入数据进MemSQL
可使用mysqldump来导入数据进MemSQL,为测试MemSQL的使用方法及性能,同时将DB:AreaID导入到同一Server的MemSQL与MySQL中:
> mysql -h 127.0.0.1 -u root -P 3307 < AreaID_20120804.sql
三 MemSQL 测试
MemSQL兼容MySQL的大部分命令集。同样可使用MySQL Client登录MemSQL:
> mysql -h 127.0.0.1 -u root -P 3307
测试过程中MemSQL与MySQL均使用默认配置,导入相同测试数据库AreaID. 在默认配置,未做特殊优化的情况下,MemSQL的表现对比MySQL,未见有明显性能提升。
在首次SQL操作时,表现尤其明显,相信是由于MemSQL的编译特性导致,如以下测试数据:
mysql> select count(*) from cb_route_info;
+----------+
| count(*) |
+----------+
| 4158 |
+----------+
1 row in set (8.69 sec)
mysql> select count(*) from cb_route_info;
+----------+
| count(*) |
+----------+
| 4158 |
+----------+
1 row in set (0.00 sec)
首次查询耗时 8.69 sec 这种查询速度,在实际生产环境中是完全无法接受的,不过再次查询时,耗时0.00sec,应该从内存中直接读出,速度非常理想。
根据MemSQL监控日志显示,MemSQL在编译SQL执行语句时花费时间过长:
1084678615 2012-08-04 12:15:56 INFO: Query AreaID.'select * from cb_route_info' compiled in 13944 miliseconds
再次执行此SQL查询语句时,即使数据库中数据发生变化时,MemSQL后台日志监控,未见重编译日志,表明MemSQL中,同样的SQL语句,只在首次执行时进行编译。
对比MemSQL,MySQL查询相同的DB,首次查询,耗时明显低于MemSQL,再次执行同样的SQL查询语句,耗时与MemSQL相差无几,甚至更快,相信MySQL这是在数据量不大的情况下充分利用了Query_cache机制。
实际耗时对比:
在MemSQL与MySQL中重复执行相同查询语句: select * from areaID_20120607;
首次查询:
MemSQL: 38980 rows in set (37.80 sec)
MySQL: 38980 rows in set (0.11 sec)
再次查询:
MemSQL: 38980 rows in set (0.11 sec)
MySQL: 38980 rows in set (0.12 sec)
可见,MemSQL中SQL语句的首次执行,耗时相当恐怖.
四 结论
若在生产环境中使用MemSQL,一定要注意数据(SQL)预热,否则MemSQL非常容易由于编译耗时成为故障点.
若非必要,针对当前版本MemSQL,不推荐使用。数据放进内存是当前DB发展趋势,MySQL的Cache机制,功能相对完善,开源产品有更多的参考资源与优化空间.
Sky
QQ: 343025026