mysql缓冲池怎么调 mysql缓冲池 多大( 七 )


mysql 缓冲池 设置 多大innodb_buffer_pool_instances 参数 , 将 buffer pool 分成几个区,每个区用独立的锁保护,这样就减少了访问 buffer pool 时需要上锁的粒度,以提高性能 。准备一个空数据库,在这里我们将 performance_schema_events_waits_history_long_size 调大,是为了让之后实验数据能采集的更多,在此不多做介绍 。使用 sysbench,准备一些数据,
对数据进行预热 60s,可以看到预热期间的性能会不太稳定,预热后会比较稳定,
设置 performance_schema , 这次我们将仅开启观察项(生产者)hash_table_locks,并开启 waits 相关收集端(消费者) 。(相关介绍参看 实验 03)
为什么我们知道观察项应该选择 hash_table_locks?在 performance_schema.setup_instruments 表中,列出了所有观察项,但我们很难从中选出我们应观察哪个观察项 。这时候,可以将所有观察项都启用,然后设计一些对比实验,比如使用几种不同的 SQL,观察这些操作影响了哪些观察项,找到共性或者区 。还有一种高效的方式是搜索别人的经验,或者阅读 MySQL 源码 。本例中 hash_table_locks 隐藏的比较深,使用了阅读 MySQL 源码和对比试验结合的方法 。
MySQL性能调优 – 你必须了解的15个重要变量前言:
MYSQL 应该是最流行了 WEB 后端数据库 。虽然 NOSQL 最近越来越多的被提到,但是相信大部分架构师还是会选择 MYSQL 来做数据存储 。本文作者总结梳理MySQL性能调优的15个重要变量,又不足需要补充的还望大佬指出 。
1.DEFAULT_STORAGE_ENGINE
如果你已经在用MySQL 5.6或者5.7,并且你的数据表都是InnoDB,那么表示你已经设置好了 。如果没有,确保把你的表转换为InnoDB并且设置default_storage_engine为InnoDB 。
为什么?简而言之,因为InnoDB是MySQL(包括Percona Server和MariaDB)最好的存储引擎 – 它支持事务,高并发 , 有着非常好的性能表现(当配置正确时) 。这里有详细的版本介绍为什么
2.INNODB_BUFFER_POOL_SIZE
这个是InnoDB最重要变量 。实际上 , 如果你的主要存储引擎是InnoDB , 那么对于你,这个变量对于MySQL是最重要的 。
基本上 , innodb_buffer_pool_size指定了MySQL应该分配给InnoDB缓冲池多少内存 , InnoDB缓冲池用来存储缓存的数据,二级索引,脏数据(已经被更改但没有刷新到硬盘的数据)以及各种内部结构如自适应哈希索引 。
根据经验,在一个独立的MySQL服务器应该分配给MySQL整个机器总内存的80% 。如果你的MySQL运行在一个共享服务器,或者你想知道InnoDB缓冲池大小是否正确设置,详细请看这里 。
3.INNODB_LOG_FILE_SIZE
InnoDB重做日志文件的设置在MySQL社区也叫做事务日志 。直到MySQL 5.6.8事务日志默认值innodb_log_file_size=5M是唯一最大的InnoDB性能杀手 。从MySQL 5.6.8开始,默认值提升到48M,但对于许多稍繁忙的系统,还远远要低 。
根据经验,你应该设置的日志大小能在你服务器繁忙时能存储1-2小时的写入量 。如果不想这么麻烦,那么设置1-2G的大小会让你的性能有一个不错的表现 。这个变量也相当重要,更详细的介绍请看这里 。
当然,如果你有大量的大事务更改,那么,更改比默认innodb日志缓冲大小更大的值会对你的性能有一定的提高,但是你使用的是autocommit,或者你的事务更改小于几k,那还是保持默认的值吧 。
4.INNODB_FLUSH_LOG_AT_TRX_COMMIT
默认下,innodb_flush_log_at_trx_commit设置为1表示InnoDB在每次事务提交后立即刷新同步数据到硬盘 。如果你使用autocommit,那么你的每一个INSERT, UPDATE或DELETE语句都是一个事务提交 。

推荐阅读