最近2周时间, 对于MYSQL 5.5.15-log Windows XP版本,进行了各种测试和优化。目前mysql的许多单表数据已经超过了1亿条记录,MYSQL在经过各种优化后,处理上亿条记录非常轻松,性能远比想象的要好的多。

目前, 硬件情况是 intel Q9300 CPU 2.5G 4核心 775针的老CPU, 内存是2.6G DDR2, 硬盘是5900转2T的希捷节能硬盘, 都是很普通廉价的硬件。

MYSQL的各数据表全部采用innodb引擎,开始使用autocommit, 相当于每一条语句都提交,测试的QPS是:单机2.4万qps,后来修改为取消autocommit, 并且修改代码,缓存了部分中间数据,大幅度减少了一些重复简单的SELECT的命令数量,并且多条记录一次性提交,测试情况是大约 5000 QPS,实际上5000 QPS的等效性能更好一些,因为基本上都是insert和update命令。

中间还测试了memory引擎,定时也测试过,随时插入memory, 定时从memory写到innodb,想这样实现更高的性能,思路是利用内存数据库的高性能,结果不理想, 本来想将insert先插入到memory引擎缓冲,结果,非常失望,memory引擎的并发能力非常有限,偶然会出现插入错误,只好取消了这个思路。 现在看memory引擎的表锁,有时不能给其他进程等待的机会,对于我的应用,本来的思路是先缓冲到memory引擎,满1000条记录,再集中插入innodb, 定时时间设置为30秒,60秒,300秒测试都一样,一旦从memory向innodb写记录,基本其他进程的insert Memory就可能失败,期望是有一个等待的机会,实际测试不行,即使只有几百条记录的缓冲也会锁死, 结果,出现部分插入失败,写入log日志中, 其它进程不能得到应该容忍的等待时间,问题在哪里, 估计是memory只使用表锁,造成的问题。 总之,这个思路受困于Memory差劲的并发能力。

主要的优化:

# 设定默认的事务隔离级别.可用的级别如下:

# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE

# 默认是REPEATABLE_READ,  查看你的程序是否可以运行在READ-COMMITED 隔离模式下,如果可以,

# 这个选项有一些性能的优势,特别是在5.0,5.1版和行级别的复制方面.

# 设置隔离等级, 默认是REPEATABLE-READ

transaction_isolation=READ-COMMITTED

#*** INNODB Specific options ***

innodb_use_sys_malloc =0

# 系统默认 innodb_use_sys_malloc =1, 表示使用操作系统自带的,

#*** INNODB Specific options ***

innodb_use_sys_malloc =0

# 系统默认 innodb_use_sys_malloc =1, 表示使用操作系统自带的,

innodb_data_home_dir      = "E:/mysql/data/"

innodb_data_file_path=ibdata1:20G

innodb_log_group_home_dir = "R:/"

# 设置log文件到虚拟内存盘中去,这样可以提高性能,同时设置innodb_fast_shutdown=0,

# 可以保证关机前数据全部保存到硬盘,这个是最牛的设置,这样等于REDO日志的性能和内存是一样快的。

#innodb_log_arch_dir      = "C:/mysqllog/"

innodb_log_files_in_group=2

innodb_autoextend_increment = 32

innodb_additional_mem_pool_size=8M

innodb_flush_log_at_trx_commit=2

innodb_log_buffer_size=1M

innodb_buffer_pool_size=640M

innodb_log_file_size=63M

innodb_file_io_threads=4

# InnoDB 中的文件 I/O 线程。 通常设置为 4,

# 但是在 Windows 下可以设定一个更大的值以提高磁盘 I/O。

innodb_max_dirty_pages_pct=75

# 默认为75%, 感觉太高了点,以前的默认值更高位90.

innodb_fast_shutdown=0

# 默认为允许快速关闭=1, innodb_fast_shutdown影响着innodb表的行为,该参数可设置为0,1,2

#0 表示当MySQL关闭时,InnoDB需要完成所有的full purge和merge insert buffer操作。耗时比较长。

#1 是默认值。表示不需要完成full purge和merge insert buffer操作,但是在缓冲池中的一些数据脏页会刷新到磁盘。

#2 不完成full purge和merge insert buffer操作,不将缓冲池中的数据脏页写回到磁盘,将日志写入到日志文件。MySQL下次启动执行恢复操作。

# close double write, 默认是打开的

# innodb_doublewrite=0

# 不关闭校验和检查(提供更好的性能)

# innodb_checksums=0

# 不打开单表空间

#innodb_file_per_table = 0

innodb_io_capacity=100

innodb_read_io_threads=1

innodb_open_files=300

innodb_max_purge_lag=2000000

#innodb_import_table_from_xtrabackup=1

innodb_support_xa=0

##如果使用复制, 那么一定要innodb_support_xa=1, 即默认参数

innodb_thread_sleep_delay=40

设置thread延迟sleep时间为40微秒,默认为10000,这个我与默认参数的分歧很大。

innodb_thread_concurrency=4

# InnoDB 会试图将 InnoDB 服务的使用的操作系统进程小于或等于这里所设定的数值。

# 此参数默认值为 8。如果计算机系统性能较低或 innodb_monitor 显示有很多线程等侍信号,

# 应该将这个值设小一点。如果你的计算机系统有很多处理器与磁盘系统,则可以将这个值设高一点以充分利用你的系统资源。建议设值为(处理器数目+ 磁盘数目)*2。默认是建议设置为10,我设置为4,这个经过测试,对于本机同时跑20个spider进程的情况下,设置为4的性能最好。

[mysqldump]

# 不要在将内存中的整个结果写入磁盘之前缓存. 在导出非常巨大的表时需要此项

quick

max_allowed_packet = 16M

最后修改于 2012-07-01 23:45

阅读(?)评论(0)

mysql qps提升_上亿数据MYSQL的innodb优化 QPS轻松过5000相关推荐

  1. mysql单表存放上亿数据,查询依旧很快。

    引子 hello,各位小伙伴,大家好,这篇是mysql的第三篇了,还没看过前两篇的小伙伴可以去看看,对理解这一篇有很大的帮助哦. 废话不多说,我们直接开始正文,作为一名java后端开发工程师,我们都知 ...

  2. 上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB

    面试题 & 真实经历 面试题:在数据量很大的情况下,怎么实现深度分页? 大家在面试时,或者准备面试中可能会遇到上述的问题,大多的回答基本上是分库分表建索引,这是一种很标准的正确回答,但现实总是 ...

  3. mysql 大量数据 更改索引_一文看懂ICP原理--MySQL用索引去表里取数据的一种优化...

    概述 今天主要介绍一下mysql的ICP特性,可能很多人都没听过,这里用一个实验来帮助大家加深一下理解. 一.Index_Condition_Pushdown Index Condition Push ...

  4. 查询a表有但是b表没有的数据_牛逼!一个上亿数据的报表竟然能做到秒查~

    数据背景 首先项目是西门子中国在我司实施部署的MES项目,由于项目是在产线上运作(3 years+),数据累积很大.在项目的数据库中,大概上亿条数据的表有5个以上,千万级数据的表10个以上,百万级数据 ...

  5. 耗时3天,上亿数据如何做到秒级查询?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:sohu.gg/jIp59N 最近在忙着优化集团公司的一个报 ...

  6. 耗时 3 天,上亿数据如何做到秒级查询?

    最近在忙着优化集团公司的一个报表.优化完成后,报表查询速度由从半小时以上(甚至查不出)到秒查的质变.从修改 SQL 查询语句逻辑到决定创建存储过程实现,花了我 3 天多的时间,在此总结一下,希望对朋友 ...

  7. 实战上亿数据,如何实现秒查!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者:J ...

  8. 前端如何展示一个有上亿数据的树结构

    需求描述 数据上亿,有数千个从属于根节点的一级子节点: 每个一级子节点有数个到数万个二级子节点: 二级子节点可能有三级子节点: 子节点的最多层深不定(即,也许可能有 10 层): 需求分析 当面临一个 ...

  9. 实战:上亿数据如何秒查

    作者:blog.csdn.net/chenleixing/article/details/44994571 最近在忙着优化集团公司的一个报表.优化完成后,报表查询速度有从半小时以上(甚至查不出)到秒查 ...

最新文章

  1. C++中为什么要引入抽象基类和纯虚函数?
  2. stdthread(6)并发lockGuard
  3. SQL存储过程实例具体解释
  4. jsf 后台参数到页面_JSF:直接从页面将参数传递给JSF操作方法,这是JavaEE 6+的一个不错的功能...
  5. Python采集知乎小姐姐图片,打造颜颜值排行榜!
  6. MySQL学习笔记:三种组内排序方法
  7. configure: error: Please reinstall the libcurl distribution - easy.h should be ……
  8. 注册登录时本地图片验证码
  9. 第二章 身份验证——跟我学习springmvc shiro mybatis
  10. linux windows市场占有率,Windows 10市场份额罕见倒退:Win7也跌了 Linux暴增111%
  11. 分布式文件系统MinIO
  12. party_bid_core总结
  13. Linux LCD 驱动调色板原理
  14. Unity 网络请求
  15. vi 常用复制与粘帖技巧
  16. 【2023 · CANN训练营第一季】昇腾AI入门课(PyTorch)第一章学习笔记——Hi Ascend
  17. 人工智能行业,就业方向和研究领域的简单介绍
  18. 计算机往届生考研失败找工作,往届生考研心路:更多坎坷 更多回忆
  19. UVALive 5739|User Names|模拟
  20. R语言基础入门(学习笔记通俗易懂版)

热门文章

  1. Django从理论到实战(part50)--使用模型来处理上传的文件
  2. 回归树与基于规则的模型(part4)--基于规则的模型
  3. python与正则表达式(part8)--compile对象及match对象的属性方法
  4. 机器学习中的参数调整
  5. 解决 Angular 官网下载的库 Schematics 在 windows 环境不支持 .. 的临时解决方案
  6. SAP UI5 应用开发教程之五:视图控制器初探
  7. Angular应用里setTimeout被如何被monkey patched的
  8. SAP Spartacus的开发人员来自全球各地
  9. 关于SAP Spartacus ManageUnitsListComponent的一些试错
  10. Error: <spyOn> : handleError() method does not exist