首页 技术 正文
技术 2022年11月14日
0 收藏 947 点赞 2,347 浏览 2701 个字

硬件配置:

3台服务器:192.168.23.168,  192.168.23.169,  192.168.23.170

硬盘:230G

内存:16G

Linux内核:Linux geoserver.csdb.cn 2.6.32-131.17.1.el6.x86_64 #1

操作系统:Scientific Linux release 6.1 (Carbon)

软件工具:

Mysql5.1 (存储引擎Myisam)

Mysqlslap(测试工具)

数据库和表

CREATE DATABASE myisamtest;

CREATE TABLE `t1_disk` (

`f1` int(10) NOT NULL AUTO_INCREMENT,

`f2` datetime DEFAULT NULL,

`f3` varchar(200) DEFAULT NULL,

PRIMARY KEY (`f1`)

) ENGINE=myisam

AUTO_INCREMENT=1000001 DEFAULT CHARSET=gbk;

字段f1有索引,f3无索引

数据记录:

1亿条记录

2亿条记录

一 数据插入测试

测试场景:

定义一个插入10000条记录的存储过程,如下:

DELIMITER $$

DROP PROCEDURE IF EXISTS `p_test_t1_disk` $$

CREATE DEFINER=`root`@`%` PROCEDURE `p_test_t1_disk`()

BEGIN

declare i int default 0;

test: loop

insert into ndbtest.t1_disk(f2,f3) values(sysdate(),md5(rand()));

set i=i+1;

if i>=10000 then

leave test;

end if;

end loop;

END $$

DELIMITER ;

然后使用测试工具mysqlslap执行测试:

mysqlslap –concurrency=200 –iterations=1 –query=”call myisamtest.p_test_t1_disk;” –number-of-queries=10000 -uroot -p1234 -h 192.168.23.168 –create-schema=myisamtest

测试用例

1亿

2亿

开200个并发线程同时插入数据

每线程执行50次存储过程(200*50*10000记录)

用时10212.541 seconds(约2小时50分)

每线程执行100次存储过程(200*100*10000记录)

用时20125.405 seconds(约5小时35分)

二 数据查询单线程测试

直接执行测试例SQL语句测试:

测试用例

1亿

2亿

select * from t1_disk where f1=70000000

在int类型主键字段上做查询

<100ms

<100ms

select * from t1_disk limit 100 offset 70000000

在int类型主键字段上做分页查询

12.516s

13.141s

select * from t1_disk where

f3=’060a5524f33ac10345ce187df848c56e’

在varchar类型字段上做查询,查询某条记录

19.625s

41.094s(因为没有索引,应该是把数据表从头到尾扫描了一次,因为查询任何一条记录时间都跟这差不多)

select * from t1_disk where f3 like ‘42663%’

返回101条记录,用时19.843s

返回187条记录,用时42.656s

select * from t1_disk where f3 like ‘f45ce016bb84dac06%’   条件字串加长

返回1条记录,用时19.391s

返回1条记录,用时40.953s

select * from t1_disk where f3 like ‘%16bb84%’

返回167条记录,用时46.438s

返回330条记录,用时100.859s

结论:

  1. f1是主键字段,做了唯一索引,1亿条和2亿条的查询区别不大。
  2. f3字段是varchar类型,没有做索引,每次查询都把数据表从头到尾扫描了一次,因为查询任何一条记录(无论第1条或者最后一条记录)时间都差不多。
  3. 前缀like查询(‘aaa%’)跟精确查询性能差不多,都是从头到尾扫描一次,而且条件字符串加长性能不受影响。
  4. 双端like查询(‘%aaa%’),性能下降很快。

三 数据查询并发测试

使用测试工具mysqlslap执行测试:

mysqlslap –concurrency=100 –iterations=1 –query=” select * from t1_disk where f1=7000000

;” –number-of-queries=100 -uroot -p1234 -h 192.168.23.168 –create-schema=myisamtest

测试用例

1亿

2亿

select * from t1_disk where f1=70000000

100并发查询

<100ms

458ms

select * from t1_disk limit 100 offset 70000000

100并发查询

返回100条记录,用时319.812s

返回100条记录,用时313.973s

select * from t1_disk where

f3=’060a5524f33ac10345ce187df848c56e’

100并发查询

519.735s

1014.375s

select * from t1_disk where f3 like ‘42663%’

100并发查询

返回101条记录,用时518.078s

返回187条记录,用时1068.359s

select * from t1_disk where f3 like ‘%16bb84%’

100并发查询

返回167条记录,用时1188.484s

返回330条记录,用时2417.360s

结论:按主键精确查询性能与单线程比较变化不大,主健分页、varchar查询性能下降厉害。

四 数据双机集群测试

将192.168.23.168设置在master机,192.168.23.169设置成slave机,调用插入测试语句

mysqlslap –concurrency=100 –iterations=1 –query=”call myisamtest2.p_test_t1_disk;” –number-of-queries=1000 -uroot -p1234 -h 192.168.23.168 –create-schema=myisamtest2

100个并发在master机上插入1000万条记录,用时1932.188秒

同时,slave机同步插入了1000万记录,几乎没有延时

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,089
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,566
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,415
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,187
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,823
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,906