查看MySQL参数,可以使用show variables和show status命令查看,前者查看服务器静态参数,即在数据库启动后不会动态更改的值,比如缓冲区、字符集等。后者查看服务器的动态运行状态信息,即数据库运行期间动态变化的信息,比如锁,当前连接数等。
1.max_connections = 3000MySQL允许最大的进程连接数,个人觉得没必要加大此值 .
2 .table_cache = 614指示表调整缓冲区大小。
table_cache 参数设置表高速缓存的数目。每个连接进来,都会至少打开一个表缓存。因 table_cache 的大小应与 max_connections 的设置有关。
当 Mysql 访问一个表时,如果该表在缓存中已经被打开,则可以直接访问缓存;如果没有被缓存,但是在 Mysql 表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区;如果表缓存满了,则会按照一定的规则将当前未用的表释放,或者临时扩大表缓存来存放。使用表缓存的好处是可以更快速地访问表中的内容。执行 flush tables 会#清空缓存的内容。
table_cache 计算方式:
查看Open_tables 与 Opened_tables的值:
mysql> show global status like 'open%_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 256 |
| Opened_tables | 922 |
+---------------+-------+
Open_tables :正在打开的表数量。
Opened_tables :已经打开的表数量。
如果Open_tables的值已经接近table_cache的值,且Opened_tables还在不断变大,则说明mysql正在将缓存的表释放以容纳新的表,此时可能需要加大table_cache的值。对于大多数情况,比较适合的值:
Open_tables / Opened_tables >= 0.85
Open_tables / table_cache <= 0.95
如对此参数的把握不是很准:把MySQL数据库放在生产环境中试运行一段时间,然后把参数的值调整得比Opened_tables的数值大一些,并且保证在比较高负载的极端条件下依然比Opened_tables略大。
3.innodb_flush_log_at_trx_commit =2mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_flush_log%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_timeout | 1 |
| innodb_flush_log_at_trx_commit | 1 |
+--------------------------------+-------+
磁盘写日志的操作 (默认1 )
为1时:会在每个事务提交后会执行往磁盘写日志的操作。
为0表示每秒往磁盘写一次日志。
2表示每次事务都往内存提交日志,但每秒往磁盘仅写入一次。
set global innodb_flush_log_at_trx_commit=2; 临时改为 2
强烈建议改为 2
4.innodb_buffer_pool_size数据库缓冲池大小innodb_buffer_pool 中 主要包括:
数据缓存 (InnoDB数据页面)
索引缓存 (索引数据)
缓冲数据 (在内存中修改尚未刷新(写入)到磁盘的数据)
建议设置为 系统物理内存的80% (机器上只运行MySql的话 )。innodb_buffer_pool_size = innodb_buffer_pool_instances * innodb_buffer_pool_chunk_size
5.innodb_buffer_pool_instances 缓冲池划分的区域数此选项仅在将innodb_buffer_pool_size设置为1GB或更大时生效。总大小将在所有缓冲池中划分。为获得最佳效率,需指定innodb_buffer_pool_instances和innodb_buffer_size大小的组合,以便每个缓冲池实例至少为1 GB。
在mysql 5.6.6之前,默认值是1。从mysql 5.6.6开始,默认值为8,除了32位windows系统,默认值取决于innodb_buffer_pool_size的值。
如果innodb_buffer_pool_size大于1.3gb,innodb_buffer_pool_instances的默认值是innodb_buffer_pool_size/128mb,每个块都有单独的内存分配请求。选择1.3GB作为边界,在该边界处,32位windows 系统可能无法分配单个缓冲池所需的连续地址空间。
否则,默认值为1。
6.innodb_file_per_table 表空间独立表空间: 每个表空间包含单个数据和文件索引,并存储在它自己的文件系统当中。
系统表空间:所有数据和文件索引都放到了一个文件中,但一个文件可以分成N个小文件,但多个表的索引混乱。
建议开启。
7.key_buffer_size 索引缓冲区的大小 ( 只对 MAISAM 有效)它决定索引处理的速度
key_reads :从硬盘读取key到缓存中(未命中的索引请求)
Key_read_requests :从缓存的请求key的总数量(全部请求数量)
若 key_reads / key_read_requests <= 0.1% 左右 , 表示健康状况尚好 。
若 key_reads / key_read_requests > 0.1% , 则需加大 key_buffer_size 值。
mysql> show global status like 'key_read%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Key_read_requests | 466968 |
| Key_reads | 2563 |
+-------------------+-------+
其他配置后续继续添加~