ITPub博客

首页 > 数据库 > MySQL > MySQL innodb buffer pool

MySQL innodb buffer pool

原创 MySQL 作者:哎呀我的天呐 时间:2015-09-29 23:24:29 0 删除 编辑
1.InnoDB缓存池
      InnoDB缓存池(InnoDB  buffer pool)是InnoDB性能提升的核心,它既可以缓存数据还可以缓存索引,甚至其他管理数据(例如元数据信息,行级锁信息)。使用MySQL命令”show variables like 'innodb%pool%';“可以查看InnoDB缓存池的相关参数信息。

    InnoDB_buffer_pool_size:用于设置InnoDB缓存池(InnoDB_buffer_pool)的大小。InnoDB缓存池的大小对InnoDB整体性能影响较大,如果当前的MySQL服务器专门用于提供MySQL服务,应尽量增加InnoDB_buffer_pool_size的大小,把频繁访问的数据都放到内存中来,尽可能减少InnoDB对硬盘的访问,争取将InnoDB最大化成为一个内存型存储索引的访问,争取将InnoDB最大化成为一个内存存储引擎。
    InnoDB_buffer_pool_instances=8:默认值是8,表示InnoDB缓存池被划分到一个区域。适当地增加该参数(例如将该参数值设置为2),此时InnoDB被划分成为两个区域,可以提升InnoDB的并发性能。如果InnoDB缓存池被划分成多个区域,建议每个区域不小于1GB的空间。
    InnoDB_additional_mem_pool_size=16M:这个参数用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小。应用程序里的表越多,你需要在这里分配越多的内存。对于一个相对稳定的应用,这个参数的大小也是相对稳定的,也没有必要预留非常大的值。如果 InnoDB 用光了这个池内的内存, InnoDB 开始从操作系统分配内存,并且往 MySQL 错误日志写警告信息。当发现错误日志中已经有相关的警告信息时,就应该适当的增加该参数的大小。类似于Oracle的library cache。这不是一个强制参数,可以被突破。
    innodb_log_file_size=200M:此参数确定数据日志文件的大小,以M为单位,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间。
    innodb_log_files_in_group:
    innodb_log_file_size:这是 InnoDB 存储引擎的事务日志所使用的缓冲区。类似于 Binlog Buffer,InnoDB 在写事务日志的时候,为了提高性能,也是先将信息写入 Innofb Log Buffer 中,当满足 innodb_flush_log_at_trx_commit 参数所设置的相应条件(或者日志缓冲区写满)之后,才会将日志写到文件(或者同步到磁盘)中。可以通过 innodb_log_buffer_size 参数设置其可以使用的最大内存空间。
    innodb_flush_log_at_trx_commit (这个很管用):抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。 
    innodb_lock_wait_timeout:在管理ORACLE的工作中,经常发现因为锁等待的原因导致应用宕机了。Mysql考虑到自身的性能和架构等因素,InnoDB数据库引擎增加了该参数,避免在资源有限的情况下产生太多的锁等待。
    innodb_sync_spin_loops:参数是自旋锁的轮转数,可以通过show engine innodb status来查看。相较于系统等待,自旋锁是低成本的等待;不过它是一个活跃的等待,会浪费一些cpu资源。因此如果看到大量的自旋等待和自旋轮转,则很显然它浪费了很多cpu资源。浪费cpu时间和无谓的上下文切换之间可以通过该值来平衡。
    https://www.percona.com/blog/2011/12/02/kernel_mutex-problem-or-double-throughput-with-single-variable/ 
    https://www.percona.com/blog/2011/07/28/how-innodb-contention-may-manifest-itself/
    innodb_max_dirty_pages_pct:Buffer_Pool中Dirty_Page所占的数量,直接影响InnoDB的关闭时间。参数innodb_max_dirty_pages_pct可以直接控制了Dirty_Page在Buffer_Pool中所占的比率,而且幸运的是innodb_max_dirty_pages_pct是可以动态改变的。所以,在关闭InnoDB之前先将innodb_max_dirty_pages_pct调小,强制数据块Flush一段时间,则能够大大缩短MySQL关闭的时间。
    innodb_support_xahttp://www.woqutech.com/?p=769
    innodb_thread_concurrency:http://www.itnose.net/detail/6186430.html
    innodb_thread_sleep_delay
    innodb_file_io_threads在MySQL5.1.x版本中使用参数:innodb_file_io_threads:作用后台线程处理数据页上的读写IO请求数量;而在MySQL5.5.x中用2个innodb_read_io_threads和Innodb_write_io_threads取代此版本之前参数,该参数值之和=2*cpu个数*cpu核数;如果你的系统读>写,可以设置innodb_read_io_threads值相对大点;反之,也可以.
    innodb_concurrency_tickets

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29990276/viewspace-1812034/,如需转载,请注明出处,否则将追究法律责任。

下一篇: MySQL的数据类型
请登录后发表评论 登录
全部评论
从事Oracle/MySQL工作多年,11g OCM,擅长Oracle/MySQL SQL Tuning & DB Performance,高可用方案架构

注册时间:2014-10-30

  • 博文量
    252
  • 访问量
    1825273