小试MemSQL (The World’s Fastest Database?)-编程之家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

转载于:https://blog.51cto.com/smsgrp/954346