mysql-通用优化配置详解
此处只是将通用优化配置项进行解释说明,再具体的优化需要根据自己业务需求进行相应配置
transaction_isolation = READ-COMMITTED
解读:事务隔离级别:Oracle、SQL Server等商业数据库默认级别为READ-COMMITTED,MySQL默认为REPEATABLE-READ,它利用自身独有的Gap Lock解决了"幻读",但也因次相比于READ-COMMITTED级别的Record Lock,REPEATABLE-READ的事务并发插入性能受到很大的限制
设置:隔离级别的选择取决实际的业务需求(安全和性能的权衡)。如果不是金融、电信等事务级别要求很高的业务,建议设置成:transaction_isolation = READ-COMMITTED
innodb_buffer_pool_size = xx[M|G]
解读:InNoDB缓冲池大小,它决定mysql可以在内存中缓存多少数据和索引,而不是每次都从磁盘上读取
设置:如果是专用mysql服务器,一般设置为操作系统内存的75%,但至少保留2G内存用于操作系统维护和MySQL异常事务处理
innodb_buffer_pool_instances = xx
解读:InnoDB缓冲池实例个数,InnoDB缓冲池是通过一整个链表的方式来管理页面(段、簇、页)的,由于互斥锁的存在(保护链表中的页面),高并发事务下,页面的读取和写入就需要锁的竞争和等待。通过设置innodb_buffer_pool_instances,将一整个链表划分为多个,每个缓冲池实例管理自己的页面和互斥,从而提高效率
设置:如果缓冲池比较大(8G以上),可以按照innodb_buffer_pool_size / innodb_buffer_pool_instances = 1G进行设置,但如果缓冲池特别大(32G以上),可以按照每个实例2~3G进行划分,实例数不是越多越好,多实例代表多线程,线程的开销(CPU、MEM)也得考虑
innodb_log_file_size = xxM
解读:InnoDB日志文件大小(Redo Log),它将事务对InnoDB表的修改记录保存在ib_logfile0、ib_logfile1中。innodb_log_file_size越大,缓冲池中的脏数据需要检查点(checkpoint)进行刷盘的频率就越少,从而减少磁盘