一、innodb体系结构优化:

1、IO优化

IO能力不足时

innodb_io_capacity 应该降低

innodb_max_dirty_pages_pct 应该降低

innodb_max_dirty_pages_pct_lwm 如果设置了应该考虑降低

innodb_read_io_threads

innodb_write_io_threads

2、Purge Thread

innodb_purge_threads   设置purge线程个数,用于undo页回收

innodb_purge_batch_size   设置Purge undo 的页数量,默认300

innodb_max_purge_lag

控制undo log history list的长度,0表示不对history list 做任何限制。当大于0时,就会

延缓DML的操作。延缓对象是行。

innodb_max_purge_lag_delay     用来控制delay的最大毫秒数。

3、内存池buffer pool

innodb_buffer_pool_size          内存池大小设置

innodb_buffer_pool_instances  多内存池设置

4、LRU List、Free List和Flush List

innodb_old_blocks_pct       设置新页放到LRU List位置   mid位置

innodb_old_blocks_time      mid位置后的页,要多久能被加入到LRU列表的热端

5、Redo Log

innodb_log_buffer_size        redo buffer 的大小

三种情况刷新日志缓冲

1)master thread 每秒刷

2)事务提交时刷

3)日志空间小于1/2刷

6、Page Cleaner

innodb_io_capacity

合并插入缓冲时,合并的数量为innodb_io_capacity的5%

刷新脏页时,刷新的数量为innodb_io_capacity

innodb_max_dirty_pages_pct

innodb_max_dirty_pages_pct_lwm

innodb_adaptive_flushing  自适应刷新

InnoDB刷新脏页的规则是在如下三种情况下才会把InnoDB_Buffer_Pool的脏页刷入磁盘:

当超过innodb_max_dirty_pages_pct设定的值时。

重做日志ib_logfile文件写满了以后。

机器空闲的时候。

当写操作很频繁的时候,重做日志ib_logfile切换的次数就会很频繁,只要有一个写满了,就会将脏页大批量地刷入磁盘,而这会对系统的整体性能造成不小的影响。为了避免过大的磁盘I/O,innodb_adaptive_flushing会自适应刷新,它使用了一个全新的算法,以便根据重做日志ib_logfile生成的速度和刷新频率来将脏页刷入磁盘,这样重做日志ib_logfile还没有写满时,也可以刷新一定的量。

7、insert buffer(change buffer)

innodb_change_buffering                 changebuffer 支持的类型 insert、update、delete等

innodb_change_buffer_max_size     insert buffer 的大小,占innodb_buffer_pool的百分比(默认25%,最大50%)

8、double write 两次写

show status like 'innodb_dblwr%';

如果Innodb_dblwr_pages_written:Innodb_dblwr_writes远小于64:1说明系统压力很小

9、自适应哈希索引

10、异步IO(AIO)

innodb_use_native_aio    应打开异步IO

用户发布一个IO请求后,可以立即再发出另一个IO请求,当全部IO请求发送完毕,等待所有

IO操作完成。

AIO还可以进行IO Merge 操作。

11、刷新临近页

innodb_flush_neighbors    根据系统IO能力调整,如果是IO处理能力和高,需要关闭

12、

二、索引优化:

1、打开Multi-Range Read功能(5.6新功能)

它的作用针对基于辅助/第二索引的查询,减少随机IO,并且将随机IO转化为顺序IO,提高查询效率。

1)打开

set optimizer_switch='mrr=on mrr_cost_based=on'; #mrr_cost_based表示开启mrr后,优化器是否根据cost来决定是否使用mrr

set oprimizer_switch='mrr=off';

2)MRR内存设置

对于MRR,参数read_rnd_buffer_size用来控制键值缓冲区的大小。

2、打开Index Condition Pushdown功能(5.6新功能)

set optimizer_switch = 'index_condition_pushdown=off';

set optimizer_switch = 'index_condition_pushdown=on';

2、Index Condition Pushdown(ICP)

Index Condition Pushdown(ICP)是针对mysql使用索引从表中检索行数据时的一种优化方法。
ICP(index condition pushdown)是mysql利用索引(二级索引)元组和筛字段在索引中的where条件从表中提取数据记录的一种优化操作。ICP的思想是:存储引擎在访问索引的时候检查筛选字段在索引中的where条件(pushed index condition,推送的索引条件),如果索引元组中的数据不满足推送的索引条件,那么就过滤掉该条数据记录。ICP(优化器)尽可能的把index condition的处理从server层下推到storage engine层。storage engine使用索引过过滤不相关的数据,仅返回符合index condition条件的数据给server层。也是说数据过滤尽可能在storage engine层进行,而不是返回所有数据给server层,然后后再根据where条件进行过滤。
三、文件
1、binlong(二进制日志)
首先,我们知道在MySQL中,二进制日志是server层的
max_binlog_size                binlog最大值,默认1G
binlog_cache_size             binlog缓存大小,默认32K,基于绘画的参数
查看binglog_cache设置是否合理

sync_binlog

sync_binlog=1,表示提交一次写一次binlog。

当一个事务发出commit动作之前,由于sync_binlog=1,因此会将二进制日志立即写入磁盘。

如果这时已经写入了二进制日志,但是提交没有发生,并且此事发生了宕机,那么在Mysql

数据库下次启动时,由于commit操作并没有发生,这个事务会被回滚掉。但是,二进制日志

已经记录了该事务信息,不能被回滚。这个问题由参数innodb_support_xa 来解决,

innodb_support_xa= 1 保证二进制日志和InnoDB 存储引擎数据文件同步。

binlog-do-db/binlog-ignore-db

log-slave-update

binlog_format

expire_logs_days

innodb_support_xa = 1 保证二进制日志和InnoDB 存储引擎数据文件同步
 
四、表优化
 

MySQL 优化--持续整理的更多相关文章

  1. 关于MYSQL优化(持续更新)

    *利用MYSQL数据缓存提高效率,注意事项: 1.应用环境:不经常改变的表及对此表相同的查询 2.不适用于服务器端编写的语句 3.根据数据使用频率,合理分解表 4.合理使用默认条件,提高命中率 5.统 ...

  2. MYSQL优化之碎片整理

    MYSQL优化之碎片整理   在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作--MySQL数据 ...

  3. MySQL优化整理

    一.SQL优化 1.show status查看各种sql的执行频率   SHOW STATUS 可以根据需要显示 session 级别的统计结果和 global级别的统计结果.   显示当前sessi ...

  4. 整理的网上的MySQL优化文章总结

    MySQL优化 Linux优化 IO优化 调整Linux默认的IO调度算法. IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调 ...

  5. [转] MySql 优化 大数据优化

    一.我们可以且应该优化什么? 硬件 操作系统/软件库 SQL服务器(设置和查询) 应用编程接口(API) 应用程序 ------------------------------------------ ...

  6. mysql优化案例

    MySQL优化案例 Mysql5.1大表分区效率测试 Mysql5.1大表分区效率测试MySQL | add at 2009-03-27 12:29:31 by PConline | view:60, ...

  7. MySQL优化聊两句

    原文地址:http://www.cnblogs.com/verrion/p/mysql_optimised.html MySQL优化聊两句 MySQL不多介绍,今天聊两句该如何优化以及从哪些方面入手, ...

  8. mysql 优化

    1.存储过程造数据 CREATE DEFINER=`root`@`localhost` PROCEDURE `generate_test_data`(`n` int) begin declare i ...

  9. MySQL优化概述

    一. MySQL优化要点 MySQL优化是一门复杂的综合性技术,主要包括: 1 表的设计合理化(符合 3NF,必要时允许数据冗余) 2.1 SQL语句优化(以查询为主) 2.2 适当添加索引(主键索引 ...

随机推荐

  1. Eclipse设置每行的最大字符数

    Eclipse默认宽度是 120 个字符.如下图所示(提示:格式化快捷键Ctrl + Shift + F): 设置步骤如下: 菜单栏倒数第二项,选择Window 下拉栏最后一项,选择Preferenc ...

  2. PAT(B) 1072 开学寄语(Java)统计

    题目链接:1072 开学寄语 (20 point(s)) 题目描述 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使 ...

  3. linux学习之路(一)--centos7安装JDK

    一.卸载centos自带jdk 1.rpm -qa | grep java 查看包含“java”关键字的安装包. 2.然后通过    rpm -e --nodeps   后面跟系统自带的jdk名    ...

  4. 表单送件前的Check(二) (未完)

    #region 新增表单前的Check动作 public static void NewFormRequestCheck(string _FormID, string _VocaEmpID, stri ...

  5. Python之(scrapy)爬虫

    一.Scrapy是Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸 ...

  6. 在Linux上安装Zookeeper集群

    xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.——这才是真正的堪称强大!! - ...

  7. J.U.C之重入锁:ReentrantLock

    此篇博客所有源码均来自JDK 1.8 ReentrantLock,可重入锁,是一种递归无阻塞的同步机制.它可以等同于synchronized的使用,但是ReentrantLock提供了比synchro ...

  8. springboot mvc自动配置(目录)

    对于长时间基于spring框架做web开发的我们,springmvc几乎成为了开发普通web项目的标配.本系列文章基于快速启动的springboot,将从源码角度一点点了解springboot中mvc ...

  9. stm32 触摸屏 XPT2046

    引脚功能描述 控制字的控制位命令 控制字节各位描述 单端模式输入配置 差分模式输入配置 时序 前8个时钟用来通过DIN引脚输入控制字节,接着的12个时钟周期将完成真正的模数转换,剩下的3个多时钟周期将 ...

  10. mysql表设计注意点

    [原创]面试官:讲讲mysql表设计要注意啥 需要设计一个主键 因为你不设主键的情况下,innodb也会帮你生成一个隐藏列,作为自增主键.所以啦,反正都要生成一个主键,那你还不如自己指定一个主键,在有 ...