• MySQL 优化--持续整理


    一、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 存储引擎数据文件同步
     
    四、表优化
     
  • 相关阅读:
    learning scala view collection
    scala
    learning scala dependency injection
    learning scala implicit class
    learning scala type alise
    learning scala PartialFunction
    learning scala Function Recursive Tail Call
    learning scala Function Composition andThen
    System.Threading.Interlocked.CompareChange使用
    System.Threading.Monitor的使用
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/10796146.html
Copyright © 2020-2023  润新知