测试环境
操作系统:windows server 2003
CPU:Intel(R) Xeon(TM) CPU 3.00GHz,4核
内存:2G,主要运行MySQL服务
硬盘:cciss 37G
文件系统:NTFS,支持大文件
数据库版本:SQL Server 2000 sp3
网卡:100M
网络环境:100M交换局域网
测试方法
数据规模分为1万条、10万条、100万条和1000万条记录级别。
在每种数据规模下分别执行2000次随机查询,这样可以防止数据库直接从缓存中返回查询结果,更加接近真实的查询情况。以系统时间为随机种子,在现有的记录范围内随机执行查询操作。
查询类型分为:单表select、双表select、insert、update、delete。
每个执行条目都为单次查询的平均执行时间,单位为微妙。如果要看整体执行时间,则乘以2000即可。
由于脚本插入数据很慢,采用sql server客户端工具测试效率很低且不能保证足够的随机性,所以插入数据和测试性能都是自己编写相应的程序来完成。
开启二进制更新日志。
测试记录
测试数据
本地查询操作平均执行时间(单位:微秒)
项目记录数 | 单表select | 双表select | insert | update | delete |
1万条 | 295 | 2249 | 16292 | 2552 | 2681 |
10万条 | 302 | 134658 | 16406 | 2689 | 2790 |
100万条 | 524746 | 691188 | 16832 | 546313 | 501983 |
1000万条 | 49000000 | 103000000 | 16882 | 49100000 | 49100000 |
跨主机查询操作平均执行时间(单位:微秒)
项目记录数 | 单表select | 双表select | insert | update | delete |
1万条 | 986 | 3143 | 16431 | 3608 | 3497 |
10万条 | 1076 | 125462 | 17248 | 4087 | 3825 |
100万条 | 525524 | 709991 | 17514 | 552526 | 526370 |
1000万条 | 49002000 | 103003000 | 18882 | 49102000 | 49104000 |
到了千万条记录的规模,sql server查询及其缓慢,内存占用高达1.7G。
查询过于缓慢,导致测试效率极低,无法进行2000次随机查询,只能查询3次求平均值。
性能比较
由于百万和千万条的查询时间与1万和10万条悬殊过大,图例很难正常显示。
这里就只提供表格数据,以供比较参考。
SQL Server本地查询操作平均执行时间(单位:微秒)
项目记录数 | 单表select | 双表select | insert | update | delete |
1万条 | 295 | 2249 | 16292 | 2552 | 2681 |
10万条 | 302 | 134658 | 16406 | 2689 | 2790 |
100万条 | 524746 | 691188 | 16832 | 546313 | 501983 |
1000万条 | 49000000 | 103000000 | 16882 | 49100000 | 49100000 |
MySQL MyISAM引擎本地查询操作平均执行时间(单位:微秒)
项目记录数 | 单表select | 双表select | insert | update | delete |
1万条 | 178 | 247 | 694 | 141 | 170 |
10万条 | 195 | 271 | 705 | 157 | 186 |
100万条 | 3055 | 5164 | 746 | 4308 | 12373 |
1000万条 | 8665 | 15259 | 803 | 11033 | 17224 |
SQL Server跨主机查询操作平均执行时间(单位:微秒)
项目记录数 | 单表select | 双表select | insert | update | delete |
1万条 | 986 | 3143 | 16431 | 3608 | 3497 |
10万条 | 1076 | 125462 | 17248 | 4087 | 3825 |
100万条 | 525524 | 709991 | 17514 | 552526 | 526370 |
1000万条 | 49002000 | 103003000 | 18882 | 49102000 | 49104000 |
MySQL MyISAM引擎跨主机查询操作平均执行时间(单位:微秒)
项目记录数 | 单表select | 双表select | insert | update | delete |
1万条 | 358 | 484 | 1188 | 269 | 298 |
10万条 | 375 | 505 | 1227 | 283 | 322 |
100万条 | 3174 | 5293 | 1242 | 4142 | 7981 |
1000万条 | 12302 | 19920 | 1261 | 12355 | 20449 |
性能分析
1、 从图表看出,在普通PC服务器上,sql server在执行大规模100万条记录以上的查询效率就很低,到了1000万条规模业务几乎无法开展,单条查询都40多秒。
2、SQL Server插入数据性能受数据规模影响较小,这点与MySQL类似。
主要原因是,插入数据都是从尾部插入的,跟前面的数据规模关系更不大。
3、数据规模越大,MySQL和SQL Server性能差别就越大。
4、MySQL的性能随着数据规模增大线性递减,而SQL Server几乎是指数递减。
5、由于在MySQL 5.0以后MyISAM引擎和InnoDB引擎的性能差别不大,所以就选择了MyISAM引擎来和SQL Server来比较。
6、在低配置服务器和PC机上运行数据库,建议采用Linux加MySQL。
7、