设为首页 收藏本站
查看: 641|回复: 0

[经验分享] mysql内存和IO优化一些重要参数

[复制链接]

尚未签到

发表于 2018-9-29 06:36:34 | 显示全部楼层 |阅读模式
  1、innodb_flush_log_at_trx_commit
  0:日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。
  1:在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新。
  2:在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。对日志文件每秒刷新一次。
  默认值是 1,也是最安全的设置,即每个事务提交的时候都会从 log buffer 写到日志文件(buffer log),而且会实际刷新磁盘,但是这样性能有一定的损失。
  如果可以容忍在数据库崩溃的时候损失一部分数据,那么设置成 0 或者 2 都会有所改善。
  设置成 0,则在数据库崩溃的时候会丢失那些没有被写入日志文件的事务,最多丢失 1 秒钟的事务,这种方式是最不安全的,也是效率最高的。
  设置成 2 的时候,因为只是没有刷新到磁盘,但是已经写入日志文件,所以只要操作系统没有崩溃,那么并没有丢失数据 ,比设置成 0 更安全一些。
  在 mysql 的手册中,为了确保事务的持久性和复制设置的耐受性、一致性,都是建议将这个参数设置为 1 的。
  2、innodb_log_file_size
  日志组中的每个日志文件的大小(单位 MB)。如果 n 是日志组中日志文件的数目,那么理想的数值为 1M 至下面设置的缓冲池(bufferpool)大小的 1/n。
  较大的值,可以减少刷新缓冲池的次数,从而减少磁盘 I/O。但是大的日志文件意味着在崩溃时需要更长的时间来恢复数据。一般用512M左右,具体取决于服务器的空间。
  3、innodb_log_buffer_size
  InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 8M左右。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。
  因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。
  4、innodb_buffer_pool_size
  InnoDB用来高速缓冲数据和索引内存缓冲大小。更大的设置可以使访问数据时减少磁盘I/O。在一个专用的数据库(inndb专用)服务器上可以将它设置为物理内存的80 %,
  和key_buffer相同,如果数据量比较小也不怎么增加,那么不要把这个值设太高也可以提高内存的使用率。因为物理内存的使用竞争可能会影响操作系统的页面调用。
  5、innodb_additional_mem_pool_size
  InnoDB 用来存储数据字典(data dictionary)信息和其它内部数据结构(internal data structures)的存储器组合(memory pool)大小。理想的值为 2M,
  如果有更多的表你就需要在这里重新分配。如果 InnoDB 用尽这个池中的所有内存,它将从操作系统中分配内存,并将错误信息写入 MySQL 的错误日志中。
  6、innodb_file_io_threads
  InnoDB 中的文件 I/O 线程。 通常设置为 4。
  7、sync_binlog
  二进制日志(binary log)同步到磁盘的频率。binary log 每写入sync_binlog 次后,刷写到磁盘。如果 autocommit 开启,每个语句都写一次 binary log,否则每次事务写一次。
  默认值是 0,不主动同步,而依赖操作系统本身不定期把文件内容 flush 到磁盘
  设为 1 最安全,在每个语句或事务后同步一次 binary log,即使在崩溃时也最多丢失一个语句或事务的日志,但因此也最慢。
  大多数情况下,对数据的一致性并没有很严格的要求,所以并不会把 sync_binlog 配置成 1,为了追求高并发,提升性能,可以设置为 100 或直接用 0。
  8、write/read thread
  异步IO线程数
  innodb_write_io_threads=16
  innodb_read_io_threads=16
  (该参数需要在配置文件中添加,重启mysql实例起效)脏页写的线程数,加大该参数可以提升写入性能
  9、innodb_max_dirty_pages_pct
  最大脏页百分数,当系统中脏页所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中。默认75,一般现在流行的SSD硬盘很难达到这个比例。可依据实际情况在75-80之间调节
  10、innodb_io_capacity=5000
  从缓冲区刷新脏页时,一次刷新脏页的数量。根据磁盘IOPS的能力一般建议设置如下:
  SAS 200
  SSD 5000
  PCI-E 10000-50000
  11、innodb_flush_method=O_DIRECT(该参数需要重启mysql实例起效)
  控制innodb 数据文件和redo log的打开、刷写模式。有三个值:fdatasync(默认),O_DSYNC,O_DIRECT。
  fdatasync模式:写数据时,write这一步并不需要真正写到磁盘才算完成(可能写入到操作系统buffer中就会返回完成),真正完成是flush操作,buffer交给操作系统去flush,并且文件的元数据信息也都需要更新到磁盘。
  O_DSYNC模式:写日志操作是在write这步完成,而数据文件的写入是在flush这步通过fsync完成。
  O_DIRECT模式:数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲,在大量随机写的环境中O_DIRECT要比fdatasync效率更高些,顺序写多的话,还是默认的fdatasync更高效。
  12、innodb_adaptive_flushing
  设置为 ON (使刷新脏页更智能)
  13、innodb_max_dirty_pages_pct
  这个参数据控制脏页的比例如果是innodb_plugin或是MySQL5.5以上的版本,建议这个参数可以设制到75%-90%都行。如果是大量写入,而且写入的数据不是太活跃,可以考虑把这个值设的低一点。 如果写入或是更新的数据也就是热数据就可以考虑把这个值设为:95%


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-603447-1-1.html 上篇帖子: winxp+apache_2+php-4.4.0+mysql+ZendOptimizer安装 下篇帖子: Flask与MySQL的配置操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表