mysql的一个简单的性能测试

本文通过不同规模的数据插入和读取操作,测试MySQL在单核及多核CPU环境下的性能表现,并分析了不同条件下MySQL的写入速度与读取速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql的一个简单的性能测试
 
1. 机器配置
    cpu:
        Intel(R) Pentium(R) D CPU 3.00GHz  
 
        内存:
        类型:  Kingston PC5300
        MemTotal:      2066620 kB

    硬盘:
       类型:希捷 酷鱼7200.9/ST3160812AS
       容量:160G
        转速:7200rpm
        缓存容量:8M    
 
2. 系统版本
         uname -a
         Linux master.test.com 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 i686 i686 i386 GNU/Linux

   Mysql版本:
        mysql  Ver 14.7 Distrib 4.1.12, for redhat-linux-gnu (i386) using readline 4.3
 
3. 测试单条记录的插入和读出

   

测试项目(单位:条)
Threads
表数
CPU
内存
time(ms)
speed
写 500W
1
1
90%
4%
690997
7235.9
写 500W
1
5
90%
4%
677359
7381.6
写 500W
5
5
99.99%
9.50%
348277
14356.4
写 500W
2
5
99.99%
9.50%
328023
15242.8
从 500W写到1000W
2
5
同上
同上
331168
15098.1
写 1000W
2
1
同上
同上
658227
15192.3
从 1000W中随机读3W
1
1
70%
13.60%
5726
5239.2
写 1亿(均分到5个表)
2
5
99.99%
10.00%
6949762
14389.1
从 1亿随机读3W
1
5
14.30%
3.30%
455516
65.9
从 1亿随机读2W
2
5
同上
同上
329657
60.7


   
    表的结构:
        CREATE TABLE `table0000`
            (
              `docid` bigint(20) unsigned NOT NULL,
              `ip` int(4) NOT NULL,
              `port` smallint(2) unsigned NOT NULL,
              `fileid` smallint(2) unsigned NOT NULL,
              `offset` int(4) unsigned NOT NULL,
              `length` int(4) unsigned NOT NULL,
              `attr` int(4) NOT NULL,
              `attr2` int(4) NOT NULL,
              PRIMARY KEY (`docid`),
              UNIQUE KEY `Index_2` (`docid`) USING BTREE
            ) ENGINE=MyISAM DEFAULT CHARSET=gbk


CPU显示可能有些问题,比如写一亿那行,双核的cpu应该显示150%之类的,100多才对。 不过,在top下看,已经是把两个核都用满了。 好像是只能显示到100%以下了。


结论:
    1. mysql的管理是以DB位单位的。想通过增加表的数目增加IO量是错误的。DB的索引应该是统一管理的。
    2. 最高写入速度是1.5W左右。 这个跟socket的长链接的最高握手次数是基本相同的的。
    3. mysql可以利用多核CPU的优势
    4. DB里边的数据量小的情况下,select单条的速度是5000条左右!
    5. 写入速度基本上是相同的。
6. 当数据量上亿以后,读出速度急剧下降。估计是在倒硬盘。


我把mysql的API封装了一下。简单的封装。不支持多字符集的应用。但是对我们的平时的应用估计应该够了!附在后边! 生成库以后,链接的时候只要链接我的头和库文件就好了。 不需要再链接mysql的。 我把它们隐藏了。呵呵!

下载地址:
    http://download.youkuaiyun.com/source/347569

测试的地方如有不对,或者代码有bug请告知。 我做的也是比较匆忙。一块讨论!

### MySQL性能测试工具推荐 对于MySQL性能测试,有多种工具可供选择。以下是几种常用的MySQL性能测试工具及其特点: #### 1. **mysqlslap** `mysqlslap` 是一种内置于MySQL 5.1及以上版本中的基准测试工具[^1]。它能够模拟多客户端并发访问数据库的情况,并提供详细的性能指标报告。通过 `mysqlslap` 可以轻松评估不同存储引擎的性能表现。 - 支持自定义SQL语句或默认生成查询。 - 能够设置不同的并发连接数来模拟真实场景下的负载情况。 - 提供丰富的选项配置,如指定线程数量、重复次数等。 示例命令如下: ```bash mysqlslap --concurrency=50,100 --iterations=3 -u root -p --auto-generate-sql ``` #### 2. **Sysbench** `sysbench` 不仅是一个通用的压力测试工具,还特别适用于OLTP(在线事务处理)工作负载的性能评测[^2]。其支持多种类型的测试模式,包括但不限于只读操作、混合读写操作以及批量插入等复杂业务逻辑仿真。 利用Lua脚本扩展功能强大,可以根据实际需求编写定制化的测试方案。例如下面展示的是运行带有十个表每个大小为十万记录的标准 OLTP 测试实例: ```bash sysbench \ --db-driver=mysql \ --threads=4 \ --time=20 \ --report-interval=5 \ --mysql-host=127.0.0.1 \ --mysql-port=3306 \ --mysql-user=root \ --mysql-password=P@ssword1! \ /usr/share/sysbench/oltp_read_write.lua \ --tables=10 \ --table-size=100000 \ run ``` #### 3. **pt-query-digest (Percona Toolkit)** 来自 Percona 的 pt-query-digest 工具可以从慢日志或者 tcpdump 数据中解析并汇总 SQL 查询信息,帮助识别最耗时的操作从而优化它们。虽然主要用途在于诊断现有系统的瓶颈所在之处而非直接测量吞吐量之类的硬性数值,但对于深入理解应用层面对底层硬件资源消耗的影响仍然非常有价值。 #### 4. **HammerDB** 这是一个跨平台的关系型数据库自动化压力测试解决方案,覆盖范围广泛涵盖了 Oracle Database, Microsoft SQL Server 和 PostgreSQL 等主流产品之外也包含了对 MariaDB/MySQL的支持 。借助图形界面简化了创建复杂的交易流程模型过程的同时保留高度灵活性满足特定项目特殊要求的能力. 综上所述,在挑选适合自己的Mysql性能检测手段之前应该先明确目标是什么样的具体问题需要解决然后再决定采用哪款软件更为合适一些。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值