mysql性能优化篇
来源:互联网 发布:淘宝怎么用支付宝付款 编辑:程序博客网 时间:2024/05/16 05:41
1 慎用auto increment主键
原因1;当表数据量很大的时候,auto increment主键的性能会急剧下降,,,原因是,auto increment用的唯一性索引,,,,mysql维护唯一性索引的代价是很高的,每次插入,,,都需要做一次唯一性的判断,,
参考 http://kccoder.com/mysql/uuid-vs-int-insert-performance/
2 innodb_flush_log_at_trx_commit
所以InnoDB有一个特别的参数用于设置这两个缓存的刷新: innodb_flush_log_at_trx_commit。
默认,innodb_flush_log_at_trx_commit=1,表示在每次事务提交的时候,都把log buffer刷到文件系统中去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。这样的话,数据库对IO的要求就非常高了,如果底层的硬件提供的IOPS比较差,那么MySQL数据库的并发很快就会由于硬件IO的问题而无法提升。
为了提高效率,保证并发,牺牲一定的数据一致性。innodb_flush_log_at_trx_commit还可以设置为0和2。
innodb_flush_log_at_trx_commit=0时,每隔一秒把log buffer刷到文件系统中去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。这样的话,可能丢失1秒的事务数据。
innodb_flush_log_at_trx_commit=2时,在每次事务提交的时候会把log buffer刷到文件系统中去,但是每隔一秒调用文件系统的“flush”操作将缓存刷新到磁盘上去。如果只是MySQL数据库挂掉了,由于文件系统没有问题,那么对应的事务数据并没有丢失。只有在数据库所在的主机操作系统损坏或者突然掉电的情况下,数据库的事务数据可能丢失1秒之类的事务数据。这样的好处就是,减少了事务数据丢失的概率,而对底层硬件的IO要求也没有那么高(log buffer写到文件系统中,一般只是从log buffer的内存转移的文件系统的内存缓存中,对底层IO没有压力)。MySQL 5.6.6以后,这个“1秒”的刷新还可以用innodb_flush_log_at_timeout 来控制刷新间隔。
4.2. sync_binlog
这个问题就跟上一个innodb_flush_log_at_trx_commit的问题类似了。MySQL提供一个sync_binlog参数来控制数据库的binlog刷到磁盘上去。虽然binlog也有binlog cache,但是MySQL并没有控制binlog cache同步到文件系统缓存的相关考虑。所以我们这里不涉及binlog cache。
默认,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。
如果sync_binlog>0,表示每sync_binlog次事务提交,MySQL调用文件系统的刷新操作将缓存刷下去。最安全的就是sync_binlog=1了,表示每次事务提交,MySQL都会把binlog刷下去。这样的话,在数据库所在的主机操作系统损坏或者突然掉电的情况下,系统才有可能丢失1个事务的数据。但是binlog虽然是顺序IO,但是设置sync_binlog=1,多个事务同时提交,同样很大的影响MySQL和IO性能。虽然可以通过group commit的补丁缓解,但是刷新的频率过高对IO的影响也非常大。
所以很多MySQL DBA设置的sync_binlog并不是最安全的1,而是100或者是0。这样牺牲一定的一致性,可以获得更高的并发和性能。
生产环境下,如果不是支付的系统,,
innodb_flush_log_at_trx_commit 设置成2, 而sync_binlog为默认值
- mysql 性能优化篇
- mysql性能优化篇
- 【mysql 性能优化篇】优化MySQL服务器
- 【mysql 性能优化篇】性能配置
- 【mysql 性能优化篇】优化子查询
- 【mysql 性能优化篇】优化数据库结构
- Mysql系统参数优化性能篇
- 性能优化之--MySql优化
- Mysql性能优化-查询优化
- 性能优化之MySQL优化
- MySQL性能优化
- MySQL性能优化
- MySQL 性能优化
- mysql 性能优化
- MySQL 性能优化
- MySQL性能优化
- MySQL 性能优化
- MySQL性能优化TIPS
- 剑指offer 面试题21:包含min函数的栈
- 生成不带BOM头的UTF-8文件
- 猜中游戏
- 线程机制实习报告_Nachos Lab1
- 产品经理七个局——破局之术
- mysql性能优化篇
- 三层起步终结
- hdu1233还是畅通工程(prim)
- Java反射机制总结之一
- C++中的静态数据成员和静态成员函数
- 常见web服务器一览
- Complied VS Interpreted Language编译型语言与解释型语言
- android应用Theme(一)
- error LNK1123: 转换到 COFF 期间失败