# the number of worker threads (for write requests)
open_files_limit = 65535
# to allow handlersocket accept many concurrent connections
#make open_files_limit as large as possible.
这里增加的这些主要是针对handlersocket的配置,它有2个端口,9998用来读数据,9999读写均可,但是通过9998来读的效率更高。这里我们设置处理读写的线程数均为16个,另外为了处理更多的并发连接,设置能打开的文件描述符个数为65535。
四、安装MySQL授权表并启动数据库:
[root@localhost mysql558]# bin/mysqld_safe --user=mysql &
五、登录MySQL安装HandlerSocket Plugin:
mysql> install plugin handlersocket soname 'handlersocket.so';
Query OK, 0 rows affected (0.01 sec)
通过以下命令查看也可见handlersocket已经成功安装到MySQL中:
mysql> show plugins;
测试结果:
一、写操作
成功写入500万条记录,共耗时4300秒,平均每秒写入数据1163笔。
写入过程中,服务器比较稳定,CPU使用率平稳,Idle值稳定在70到72之间,等待时间稳定在14到19之间。内存分配上的变化较大,free部分从1.3G下降到25M,buffer部分从630M下降到65M,cache部分从1.5G上升到2.9G,虚拟内存从0上升到376K,但是没有交换区到内存的换入换出。磁盘IO表现平稳,每秒写入的块数稳定在10000到12000之间。
二、读操作
成功读出500万条记录,共耗时193秒,平均每秒读出数据25906笔。
读数据过程中没有发生磁盘IO。CPU较繁忙,Idle在39到51之间,等待CPU资源的进程一直在1到6个之间。内存表现平稳没有波动。
通过以上测试结果可以说明,写入的数据完全缓存到了文件系统中,所以cache部分占用的内存大量增加,这也是读取数据的时候没有发生磁盘IO的原因。
总结:
要说明的是,虽然这是一份真实的测试数据,但是并不一定具有普遍意义。因为应用场景是千差万别的,服务器的资源配置、数据记录的多少、单条数据的大小、读写的比例、客户端程序的质量等因素都会影响测试结果,甚至差别会非常大,对我们来说,更重要的是了解这个NoSQL产品的特性,知道它的适用场景,并且能够根据自己实际的应用场景针对性的进行测试,这样才能做到针对性的选型,只有最适合自己需求的产品才是最好的产品。