mysql qps提升_上亿数据MYSQL的innodb优化 QPS轻松过5000
最近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相关推荐
- mysql单表存放上亿数据,查询依旧很快。
引子 hello,各位小伙伴,大家好,这篇是mysql的第三篇了,还没看过前两篇的小伙伴可以去看看,对理解这一篇有很大的帮助哦. 废话不多说,我们直接开始正文,作为一名java后端开发工程师,我们都知 ...
- 上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB
面试题 & 真实经历 面试题:在数据量很大的情况下,怎么实现深度分页? 大家在面试时,或者准备面试中可能会遇到上述的问题,大多的回答基本上是分库分表建索引,这是一种很标准的正确回答,但现实总是 ...
- mysql 大量数据 更改索引_一文看懂ICP原理--MySQL用索引去表里取数据的一种优化...
概述 今天主要介绍一下mysql的ICP特性,可能很多人都没听过,这里用一个实验来帮助大家加深一下理解. 一.Index_Condition_Pushdown Index Condition Push ...
- 查询a表有但是b表没有的数据_牛逼!一个上亿数据的报表竟然能做到秒查~
数据背景 首先项目是西门子中国在我司实施部署的MES项目,由于项目是在产线上运作(3 years+),数据累积很大.在项目的数据库中,大概上亿条数据的表有5个以上,千万级数据的表10个以上,百万级数据 ...
- 耗时3天,上亿数据如何做到秒级查询?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:sohu.gg/jIp59N 最近在忙着优化集团公司的一个报 ...
- 耗时 3 天,上亿数据如何做到秒级查询?
最近在忙着优化集团公司的一个报表.优化完成后,报表查询速度由从半小时以上(甚至查不出)到秒查的质变.从修改 SQL 查询语句逻辑到决定创建存储过程实现,花了我 3 天多的时间,在此总结一下,希望对朋友 ...
- 实战上亿数据,如何实现秒查!
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者:J ...
- 前端如何展示一个有上亿数据的树结构
需求描述 数据上亿,有数千个从属于根节点的一级子节点: 每个一级子节点有数个到数万个二级子节点: 二级子节点可能有三级子节点: 子节点的最多层深不定(即,也许可能有 10 层): 需求分析 当面临一个 ...
- 实战:上亿数据如何秒查
作者:blog.csdn.net/chenleixing/article/details/44994571 最近在忙着优化集团公司的一个报表.优化完成后,报表查询速度有从半小时以上(甚至查不出)到秒查 ...
最新文章
- C++中为什么要引入抽象基类和纯虚函数?
- stdthread(6)并发lockGuard
- SQL存储过程实例具体解释
- jsf 后台参数到页面_JSF:直接从页面将参数传递给JSF操作方法,这是JavaEE 6+的一个不错的功能...
- Python采集知乎小姐姐图片,打造颜颜值排行榜!
- MySQL学习笔记:三种组内排序方法
- configure: error: Please reinstall the libcurl distribution - easy.h should be ……
- 注册登录时本地图片验证码
- 第二章 身份验证——跟我学习springmvc shiro mybatis
- linux windows市场占有率,Windows 10市场份额罕见倒退:Win7也跌了 Linux暴增111%
- 分布式文件系统MinIO
- party_bid_core总结
- Linux LCD 驱动调色板原理
- Unity 网络请求
- vi 常用复制与粘帖技巧
- 【2023 · CANN训练营第一季】昇腾AI入门课(PyTorch)第一章学习笔记——Hi Ascend
- 人工智能行业,就业方向和研究领域的简单介绍
- 计算机往届生考研失败找工作,往届生考研心路:更多坎坷 更多回忆
- UVALive 5739|User Names|模拟
- R语言基础入门(学习笔记通俗易懂版)
热门文章
- Django从理论到实战(part50)--使用模型来处理上传的文件
- 回归树与基于规则的模型(part4)--基于规则的模型
- python与正则表达式(part8)--compile对象及match对象的属性方法
- 机器学习中的参数调整
- 解决 Angular 官网下载的库 Schematics 在 windows 环境不支持 .. 的临时解决方案
- SAP UI5 应用开发教程之五:视图控制器初探
- Angular应用里setTimeout被如何被monkey patched的
- SAP Spartacus的开发人员来自全球各地
- 关于SAP Spartacus ManageUnitsListComponent的一些试错
- Error: <spyOn> : handleError() method does not exist