IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

InnoDB select性能拐点测试

DBA@Taobao 2009-10-18 11:11:51 累计浏览 3,724 次
本机暂存

    传说InnoDB的数据量到了一定程度就会有一个很大的下滑。那么这个阙值究竟是是多少?来做一下测试吧!

    1、调整my.cnf的参数如下:

    innodb_file_per_table = 0

    innodb_flush_log_at_trx_commit = 2

    innodb_buffer_pool_size = 8G

    innodb_file_io_threads = 4

    重启服务器,启动mysqld

    2、在test库上建表:

    CREATE TABLE `test` (

     `ID` bigint(20) NOT NULL auto_increment,

     `INT_A` int(11) default NULL,

     `INT_B` int(11) default NULL,

     `INT_C` int(11) default NULL,

     `STRING_A` varchar(50) default NULL,

     `STRING_B` varchar(250) default NULL,

     `STRING_C` varchar(700) default NULL,

     PRIMARY KEY (`ID`),

     KEY `IDX_TEST_IA` (`INT_A`),

     KEY `IDX_TEST_IB` (`INT_B`),

     KEY `IDX_TEST_SA` (`STRING_A`,`INT_C`)

    ) ENGINE=InnoDB DEFAULT CHARSET=gbk

    3、50个线程并发,各执行以下SQL 2万次:

    insert into test(INT_A, INT_B, INT_C, STRING_A, STRING_B, STRING_C) values(CEIL(RAND()*100000), CEIL(RAND()*100000), CEIL(RAND()*100000), random_string(CEIL(50*RAND())), random_string(CEIL(250*RAND())), random_string(CEIL(700*RAND())))

    4、50个线程并发,各执行以下SQL 20万次:

    select count(test.INT_A) from test, (select CEIL(RAND()*100000) as rand_zyy) b where test.INT_A = b.rand_zyy

    在此期间,每10秒记录一次com_select的变化

    5、如果test内的数据量小于3000万,则跳转至3;反之结束压测。

     结果得到了30张图,在这里就不贴了。可以看出,每秒能够执行的select量从12000(数据量100万)缓步下降到7800(数据量3000万)。这个性能下降主要是因为每次查询可以得到的数据越来越多造成的,如果将SQL换成按主键索引,是否出现这种性能下降仍未可知。但是可以肯定的是,按照主键索引来查询数据,即使出现性能下降也会比二级索引要更缓慢。

     由于每条记录都比较小,所以本次实验的数据基本上全部在内存中。在3000万数据的范围内,未出现所谓的性能拐点。初步猜想,前人的实验结果出现性能拐点,是因为内存耗尽,MySQL需要从磁盘上读取数据引起的。而这种性能拐点与MySQL本身的实现机制无关。

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,252)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,399)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  4. Mysql监控指南 (累计阅读 21,351)
  5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  6. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,058)
  7. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  8. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,908)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,708)
  10. 深入浅出INNODB MVCC机制与原理 (累计阅读 9,693)