MySQL工作中常见的基本参数优化

Cache缓存和buffer缓存

cache缓存的内容一般都是一些频繁访问但是变更较少的数据,如果cache缓存满了,mysql将淘汰最近最久没有使用的page页,然后将正在使用的page页加载到cache缓存。

 

Buuer缓存主要用于缓冲写,缓存的数据是即将被写入硬盘的,用于加速写。

 

全局缓冲  会话缓存 临时缓存

 

超时:连接超时 锁等待超时

 

show variables like '%timeout%';

 

 

 

innodb_rollback_on_timeout 希望整个事务回滚就开启吧少年

如果事务因为行级锁等待超时(innodb_lock_wait_timeout)会回滚上一条语句执行的操作,设置为ON,回滚整个事务的操作

 

 

lock_wait_timeout元数据的超时时间 默认1

 

slave_net_timeout 主从复制超时时间,可以设置为30s,较少网络问题导致的主从同步数据延迟

 

 

delayed_insert_timeout      myisam表的延迟插入超时

 

Mysql连接优化

 

show status like '%connections%';  查看当前服务实例连接的状态

show variables like '%connect%';   连接参数信息

 

max_connect_errors 连接失败过多 并且超过max_connect_errors值  ,可以执行flush hosts

 

 

 show variables like 'thread%';  查看连接线程参数

show status like 'thread%';      查看连接线程状态

 

重点  (Connections-Threads_created/Connections*100% 代表缓存命中率,命中率较低增加thread_cache_size的值

 

 

show status like 'Aborted%';查看连接异常状态信息

 

 

 

Aborted_clients 客户机被异常关闭次数 增大max_allowed_packet 网络原因可以增加wait_timeout或者interactive_timeout

 

 

show status like 'Slow%';查看其它连接状态

 

Slow_launch_threads  改值较大 说明服务器存在过载问题

 

 

 

缓存的优化

查询缓存

show variables like '%query_cache%';

 

show status like 'Qcache%'; 查看查询缓存状态信息,确认query_cache_size值是否合理

查询缓存命中率计算

show status like 'Com_select';

 

Qcache_hits/(Qcache_hits+ Com_select)

 

 

Innodb 排序缓存

 

 

show variables like 'join_buffer_size';   join连接缓存   提升表之间join连接速度

 

 

show variables like 'table%';

 

table_definition_cache  设置了表结构定义缓存表或者视图结构定义frm文件的上限

 

table_open_cache   该值表示设置了表缓存可以缓存表和视图的数量上限

 

 

show variables like '%open%';  当前打开文件数量的上限

 

show open tables;  查看表缓存缓存了那些表

 

 

show variables like '%buffer_size%';  read_rnd_buffer_size  随机扫描   增加该值 提升order by 排序操作的性能

read_buffer_size  做很多全表扫描查询 可以增加该值 不过只对myisam生效

 

 

二进制日志缓存

为了减少硬盘IO次数,更新操作产生的二进制日志不会立即被写入磁盘,首先写入二进制缓存中,更新提交后才会写入磁盘

 

show variables like '%binlog%cache%';

 

 

 

 

 binlog_cache_size 针对innodb做批量更新时可以适当提升

 

binlog_stmt_cache_size  这是针对myisam

 

 

show status like '%binlog%cache%';  查看二进制日志缓存的使用状态

 

Binlog_cache_disk_use    针对innodb、该值较大的话 应当适当提升binlog_cache_size   因为这是由于更新操作产生的日志信息较多,超过了binlog_cache_size 值,就会将缓存的二进制信息写入到一个临时文件

 

重做日志缓存

事务在commit之前会将重做日志写入重做日志缓存,再择机写入ib_logfile0ib_logfile1重做日志文件

 

show variables like 'innodb_log_buffer_size';  查看重做日志缓存大小

 

重点:不过缓存中的重做日志不可能无限增长,这时候大神就出现了   innodb_flush_log_at_trx_commit   特别重要的一个参数   0 1 2的状态    默认是1

 

默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。

 

 

 

show variables like 'innodb_buffer_pool_size';   innodb核心

这个参数对innodb整体性能影响较大,可以增加大小,将频繁访问的数据都放到内存中去,尽可能减少对硬盘的访问。

 

 

Innodb缓存池预热问题

 

Innodb会将经常需要访问的数据访问缓存池,当缓存池特别大的时候,由于某些原因,服务器需要重启,这时候所有缓存再缓存池的数据将会被清空,,所以5.6开始后支持将内存中的热数据保存到硬盘,重启后再将硬盘的热数据加载到缓存池

 

show variables like '%innodb%pool%'

 

show engine innodb status\G

 

你可能感兴趣的:(mysql)