知识大全 Mysql Innodb引擎优化(参数篇)

Posted 分配

篇首语:不畏过往,不惧将来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Mysql Innodb引擎优化(参数篇)相关的知识,希望对你有一定的参考价值。

Mysql Innodb引擎优化(参数篇)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  介绍

  InnoDB给MySQL提供了具有提交 回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎 InnoDB锁定在行级并且也在SELECT语句 提供一个Oracle风格一致的非锁定读 这些特色增加了多用户部署和性能 没有在InnoDB中扩大锁定的需要 因为在InnoDB中行级锁定适合非常 小的空间 InnoDB也支持FOREIGN KEY强制 在SQL查询中 你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来 甚至在同一个查询中也可以混合

  Innodb 的创始人 Heikki Tuuri

  Heikki Tuuri在Innodb的Bug社区里也是很活跃的 如果遇到Bug也可以直接提到社区 得到作者的解答

  为什么要学习Innodb的调优

  目前来说 InnoDB是为Mysql处理巨大数据量时的最大性能设计 它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的 在数据量大的网站或是应用中Innodb是倍受青睐的

  另一方面 在数据库的复制操作中Innodb也是能保证master和slave数据一致有一定的作用

  参数调优内容

   内存利用方面

   日志控制方面

   文件IO分配 空间占用方面

   其它相关参数

  1 内存利用方面

  首先介绍一个Innodb最重要的参数

  innodb_buffer_pool_size

  这个参数和MyISAM的key_buffer_size有相似之处 但也是有差别的 这个参数主要缓存innodb表的索引 数据 插入数据时的缓冲 为Innodb加速优化首要参数

  该参数分配内存的原则 这个参数默认分配只有 M 可以说是非常小的一个值 如果是一个专用DB服务器 那么他可以占到内存的 % % 这个参 数不能动态更改 所以分配需多考虑 分配过大 会使Swap占用过多 致使Mysql的查询特慢 如果你的数据比较小 那么可分配是你的数据大小+10% 左右做为这个参数的值 例如 数据大小为50M 那么给这个值分配innodb_buffer_pool_size=64M

  设置方法

  innodb_buffer_pool_size= G

  这个参数分配值的使用情况可以根据show innodb status\\G;中的

  

  BUFFER POOL AND MEMORY

  

  Total memory allocated ;

  去确认使用情况

  第二个

  innodb_additional_mem_pool

  作用 用来存放Innodb的内部目录

  这个值不用分配太大 系统可以自动调 不用设置太高 通常比较大数据设置 M够用了 如果表比较多 可以适当的增大 如果这个值自动增加 会在error log有中显示的

  分配原则

  用show innodb status\\G;去查看运行中的DB是什么状态(参考BUFFER POOL AND MEMORY段中) 然后可以调整到适当的值

  

  BUFFER POOL AND MEMORY

  

  Total memory allocated ; in additional pool allocated

  参考 in additional pool allocated

  根据你的参数情况 可以适当的调整

  设置方法

  innodb_additional_mem_pool= M

  2 关于日值方面

  innodb_log_file_size

  作用 指定日值的大小

  分配原则 几个日值成员大小加起来差不多和你的innodb_buffer_pool_size相等 上限为每个日值上限大小为 G 一般控制在几个LOG文件相加大小在2G以内为佳 具体情况还需要看你的事务大小 数据大小为依据

  说明 这个值分配的大小和数据库的写入速度 事务大小 异常重启后的恢复有很大的关系

  设置方法

  innodb_log_file_size= M

  innodb_log_files_in_group

  作用 指定你有几个日值组

  分配原则  一般我们可以用2-3个日值组 默认为两个

  设置方法

  innodb_log_files_in_group=

  innodb_log_buffer_size

  作用 事务在内存中的缓冲

  分配原则 控制在 M 这个值不用太多的 他里面的内存一般一秒钟写到磁盘一次 具体写入方式和你的事务提交方式有关 在Oracle等数据库了解这个 一般最大指定为3M比较合适

  参考 Innodb_os_log_written(show global status 可以拿到)

  如果这个值增长过快 可以适当的增加innodb_log_buffer_size

  另外如果你需要处理大理的TEXT 或是BLOB字段 可以考虑增加这个参数的值

  设置方法

  innodb_log_buffer_size= M

  innodb_flush_logs_at_trx_mit

  作用 控制事务的提交方式

  分配原则 这个参数只有3个值 0 1 2请确认一下自已能接受的级别 默认为1 主库请不要更改了

  性能更高的可以设置为0或是2 但会丢失一秒钟的事务

  说明

  这个参数的设置对Innodb的性能有很大的影响 所以在这里给多说明一下

  当这个值为 时 innodb 的事务LOG在每次提交后写入日值文件 并对日值做刷新到磁盘 这个可以做到不丢任何一个事务

  当这个值为 时 在每个提交 日志缓冲被写到文件 但不对日志文件做到磁盘操作的刷新 在对日志文件的刷新在值为 的情况也每秒发生一次 但需要注意的 是 由于进程调用方面的问题 并不能保证每秒100%的发生 从而在性能上是最快的 但操作系统崩溃或掉电才会删除最后一秒的事务

  当这个值为 时 日志缓冲每秒一次地被写到日志文件 并且对日志文件做到磁盘操作的刷新 但是在一个事务提交不做任何操作 mysqld进程的崩溃会删除崩溃前最后一秒的事务

  从以上分析 当这个值不为1时 可以取得较好的性能 但遇到异常会有损失 所以需要根据自已的情况去衡量

  设置方法

  innodb_flush_logs_at_trx_mit=

    文件IO分配 空间占用方面

  innodb_file_per_table

  作用 使每个Innodb的表 有自已独立的表空间 如删除文件后可以回收那部分空间

  分配原则 只有使用不使用 但DB还需要有一个公共的表空间

  设置方法

  innodb_file_per_table=

  innodb_file_io_threads

  作用 文件读写IO数 这个参数只在Windows上起作用 在LINUX上只会等于4

  设置方法

  innodb_file_io_threads=

  innodb_open_files

  作用 限制Innodb能打开的表的数据

  分配原则 如果库里的表特别多的情况 请增加这个 这个值默认是300

  设置方法

  innodb_open_files=

  请适当的增加table_cache

   其它相关参数

  这里说明一个比较重要的参数

  innodb_flush_method

  作用 Innodb和系统打交道的一个IO模型

  分配原则 Windows不用设置

  Unix可以设置 fsync() or O_SYNC/O_DSYNC

  如果系统可以禁止系统的Cache那就把他禁了

  Linux可以选择 O_DIRECT

  直接写入磁盘 禁止系统Cache了

  设置方法

  innodb_flush_method=O_DIRECT

  innodb_max_dirty_pages_pct

  作用 控制Innodb的脏页在缓冲中在那个百分比之下 值在范围 默认为

  这个参数的另一个用处 当Innodb的内存分配过大 致使Swap占用严重时 可以适当的减小调整这个值 使达到Swap空间释放出来 建义 这个值最大在90% 最小在15% 太大 缓存中每次更新需要致换数据页太多 太小 放的数据页太小 更新操作太慢

  设置方法

  innodb_max_dirty_pages_pct=

  动态更改需要有Super权限

  set global innodb_max_dirty_pages_pct= ;

  总结

cha138/Article/program/MySQL/201311/29325

相关参考

知识大全 巧用MySQL InnoDB引擎锁机制解决死锁问题[1]

巧用MySQLInnoDB引擎锁机制解决死锁问题[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 MySQL性能优化的参数有哪些

MySQL性能优化的参数有哪些?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  此文章主要向大家

知识大全 mysql集群表优化

  我们知道MySQLCluster产品用的主要的引擎为NDB很多人说对于NDB来说执行SQL语句的性能很差但是我觉得主要是没有仔细的探索  对于数据库来说要判断他的性能如何无非是要看两点  对于数据

知识大全 MySQL数据库存储引擎详解

MySQL数据库存储引擎详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  存储引擎是什么?  

知识大全 如何选择合适的MySQL存储引擎

如何选择合适的MySQL存储引擎  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  MySQL有多种

知识大全 用Java+MySQL+PHP轻松构建跨平台的搜索引擎

用Java+MySQL+PHP轻松构建跨平台的搜索引擎  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 MySQL 5.1.41 发布

MySQL5.1.41发布  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!该版本对InnoDB存储引

知识大全 MySQL优化简明指南浅析

MySQL优化简明指南浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一在编译时优化MySQ

知识大全 MySQL数据库优化(一)

MySQL数据库优化(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据库优化是一项很复杂

知识大全 MySQL性能优化实战

MySQL性能优化实战  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这段时间由于线上数据库经常