原则:
MySQL确实有大量可以修改的参数,通常只需要修改少量配置项【比方说innodb buffer pool和日志文件缓存等】,大部分使用默认值,应该将更多的时间和精力放到库表设计、索引设计和查询优化上面。
8.1 MySQL配置的工作原理
[root@wqfserver ~]# which mysqld
/usr/sbin/mysqld
[root@wqfserver ~]# /usr/sbin/mysqld --verbose --help | grep -A 1 'Default option'
2020-11-13 22:24:50 0 [Note] /usr/sbin/mysqld (mysqld 5.6.35) starting as process 5953 ...
2020-11-13 22:24:50 5953 [Note] Plugin 'FEDERATED' is disabled.
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
2020-11-13 22:24:50 5953 [Note] Binlog end
8.2 常用配置文件参数解释
1 query_cache_size变量是全局性的,代表的是开启缓存的大小。
show global variables where variable_name like '%query_cache%';
2 key_buffer_size用来控制Myisam存储引擎的缓冲区大小,一般在创建的时候不会立刻分配,而是在使用的时候才真正分配。默认大小为8m
3 sort_buffer_size只会在查询的需要排序的时候才会为该缓存分配参数指定大小的全部内存。一般建议在会话级别可以设置该参数稍大一点,在全局参数建议使用默认值
show variables where variable_name like '%sort_buffer_size%'
4 open_files_limit用来控制打开文件的句柄数
show global variables where variable_name like '%open_files_limit%';
8.3 获取状态的命令
mysqladmin ext -ri3 -c5 -uroot -p111111 | grep Handler_read_key
pt-mext -r -- mysqladmin ext -i3 -c 5 -uroot -p111111 > Handler_read_key.txt
两种方式展示效果不同
8.4 配置MySQL的IO行为
innodb使用日志来减少提交事务的开销,因为日志中已经记录了事务,就无需再每个事务提交的时候把缓冲池的脏块刷新到磁盘中,数据修改的数据和索引都会衍射到表空间的随机位置,所以刷新这些随机IO比顺序IO昂贵的多,因为一个IO请求需要时间把磁头移到正确的位置,然后等待磁盘上读出需要的数据,在转到开始位置。
整体的日志文件大小受控于innodb_log_file_size和innodb_log_files_in_group。当innodb变更任何数据的时候,会写一条变更记录到内存日志缓冲区。当缓冲区满的时候,事务提交的时候,或者每一秒,innodb都会刷写缓冲区的内容到磁盘日志文件,无论上述的三个条件那个先到达。常用的参数为innodb_flush_log_at_trx_commit
配置innodb的方法行为参数为 innodb_thread_concurrency。
针对text或者blob优化的:如果一张表有很多大字段,最好是把它们组合起来单独的存在一个列里面,比方说用xml格式进行存储。有时候可以把大字段用compress压缩后再存为blob