MySQL优化班13期课后作业,20180906

1、innodb引擎课后作业
针对InnoDB引擎,都有哪些优化的方法
 2、性能监控课程作业
当发现系统已经用到了swap,该怎么处理
已邀请:

aaron8219 - Oracle DBA

赞同来自:

1、innodb引擎课后作业:针对InnoDB引擎,都有哪些优化的方法?
1)参数优化:
innodb_flush_log_at_trx_commit=1,sync_binlog=1(经典双1,从库可以考虑设置为2,0以提高性能,减少延迟)
innodb_buffer_pool_size,设计为物理内存的50%-80%,尽量使数据都能放到缓冲池中
innodb_additional_mem_pool=16M,如果表较多,可以适当增加该参数的值
innodb_buffer_pool_instances,大内建议开启多个缓冲池以提高内存读写性能
innodb_log_files_in_group,设置为3组,可以缓解刷redo日志的压力
innodb_log_file_size,大小根据日志生成的速度进行调整,以满足每5-30min刷新一次为宜
innodb_log_buffer_size=4M,如果有大量的text/blob字段,可以考虑增加该参数值
innodb_file_per_table,开启独立表空间
innodb_open_files,如果库里的表特别多,建议提高该数值(OS层面也要提高ulimit中对应的值)
innodb_flush_method=o_direct,直接写入磁盘,禁用cache缓存
innodb_io_capacity,设置合理的iops
innodb_use_native_aio,启用可以使用linux的异步IO子系统
innodb_max_dirty_page_pct=50,尽量加快刷新脏页的速度
innodb_adaptive_flushing=1,开启可以使用fulsh_list顺序进行刷新,防止突发性的IO抖动
innodb_thread_concurrency,5.6以后,低于64个thread时,建议设置为0,让innodb自动控制并发线程
innodb_lock_wait_timeout=10,设置较低的行锁超时等待事件,提高并发性能

2)字段优化:
单表不建议创建太多字段,实在需要字段过多可以考虑垂直拆分方式进行分表
使用整数类型时应考虑空间(byte)和范围(unsigned)的因素,以够用为佳
时间类型尽量使用timestamp(5.6)或datetime(5.7)
避免使用null字段
避免使用外键
避免使用text/blob大字段,尽量用varchar代替,实在要使用text/blog大字段,有以下几种优化方案:
将其压缩存储在同一个列中,避免多次off-page;
采用dynamic行格式,使大字段列对齐,只存20个字节的指针,利用full-off-page特性提高性能;
将长度最大的列排列组合拆分成多个字表,使每个子表的行长度小于8K,避免off-page

3)索引优化:
一定要有主键,并且最好是业务非相关的
主键尽量采用int/bigint类型
建立合适数量的二级索引,使SQL有效利用覆盖索引进行检索,减少全表扫描
联合索引注意顺序要和查询条件保持一致,且选择性好的字段尽量放在左边
删除不必要的单列索引,避免索引冗余占用额外空间
由于innodb对索引单字段只能取前767bytes(compact/redundent行格式),所以字符串类型字段建议只建前缀索引
为避免隐式转换导致的索引失效问题,字符串一定要加上引号

2、性能监控课程作业,当发现系统已经用到了swap,该怎么处理?
1)使用swapoff -a,直接禁用swap,修改完后用free -h查看swap使用率是否为0
2)echo 'vm.swappiness=5' >> /etc/sysctl.conf && sysctl -p(大内存时可直接设置为0,使系统尽可能使用物理内存)
3)通常情况下,使用到swap时,如果不是参数设置不当的话,应该考虑物理内存是否不够用了,可以考虑给服务器增加更多内存
 

要回复问题请先登录注册