Mysql优化

MySQL的变量分为以下两种:

1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看
2)状态变量:监控MySQL服务器的运行状态,可以用show status查看

系统变量

系统变量按其作用域的不同可以分为以下两种:

1)分为全局(GLOBAL)级:对整个MySQL服务器有效

2)会话(SESSION或LOCAL)级:只影响当前会话

有些变量同时拥有以上两个级别,MySQL将在建立连接时用全局级变量初始化会话级变量,但一旦连接建立之后,全局级变量的改变不会影响到会话级变量。

使用show variables等同于show session variables,查询的是会话变量;
使用show global variables,是全局变量。

几个常用系统变量:

1. max_connections

最多连接数,防止 MySQL: ERROR 1040: Too many connections
Max_used_connections / max_connections * 100%≈85%

mysql> show variables like 'max_connections';


+-----------------+-------+
| Variable_name | Value | +-----------------+-------+
| max_connections | 151 | +-----------------+-------+

1 row in set (0.00 sec)
mysql> set GLOBAL max_connections=16384; Query OK, 0 rows affected (0.00 sec) 
+-----------------+-------+
| Variable_name | Value | +-----------------+-------+
| max_connections | 16384 | +-----------------+-------+
1 row in set (0.00 sec)

2. thread_cache_size

线程cache大小:可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中;如果线程重新被请求,那么请求将从缓存中读取;如果缓存中是空的或者是新的请求,那么这个线程将被重新创建;如果有很多新的线程,增加这个值可以改善系统性能。
建议:按照內存大小來設置, 1G=8, 2G=16, 3G=32, >3G=64

mysql> show variables like 'thread_cache_size'; +-------------------+-------+
| Variable_name | Value | +-------------------+-------+
| thread_cache_size | 0 | +-------------------+-------+
1 row in set (0.00 sec)

mysql> set global thread_cache_size=64;      
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'thread_cache_size'; +-------------------+-------+
| Variable_name | Value | +-------------------+-------+
| thread_cache_size | 64 | +-------------------+-------+
1 row in set (0.00 sec)

3. wait_timeout

缺省情况下,wait_timeout的初始值是28800
超時時間(s),如果連接數比較大,可以減少此參數的值
设置为30分钟

mysql>show variables like 'wait_timeout'; +---------------+-------+
| Variable_name | Value | +---------------+-------+
| wait_timeout | 28800 | +---------------+-------+
1 row in set (0.00 sec)

mysql> set global wait_timeout=1800; Query OK, 0 rows affected (0.00 sec) mysql> 
mysql> 
mysql> show global variables like 'wait_timeout'; +---------------+-------+
| Variable_name | Value | +---------------+-------+
| wait_timeout | 1800 | +---------------+-------+
1 row in set (0.00 sec)

mysql> 

4.query_cache_size

查询缓存

mysql> show global variables like 'query_cache_size'; +------------------+----------+
| Variable_name | Value | +------------------+----------+
| query_cache_size | 67108864 | +------------------+----------+
1 row in set (0.00 sec)



mysql> show global status like 'qcache%'; +-------------------------+----------+
| Variable_name | Value | +-------------------------+----------+
| Qcache_free_blocks      | 1        |
| Qcache_free_memory      | 67086888 |
| Qcache_hits | 450 | | Qcache_inserts          | 73       |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 24460    |
| Qcache_queries_in_cache | 3 | | Qcache_total_blocks | 9 | +-------------------------+----------+ 8 rows in set (0.00 sec) 
MySQL查询缓存变量解释:
Qcache_free_blocks:缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSH QUERY CACHE会对缓存中的碎片进行整理,从而得到一个空闲块。
Qcache_free_memory:缓存中的空闲内存。
Qcache_hits:每次查询在缓存中命中时就增大 Qcache_inserts:每次插入一个查询时就增大。命中次数除以插入次数就是不中比率。
Qcache_lowmem_prunes:缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的 free_blocks和free_memory可以告诉您属于哪种情况)
Qcache_not_cached:不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句或者用了now()之类的函数。
Qcache_queries_in_cache:当前缓存的查询(和响应)的数量。 Qcache_total_blocks:缓存中块的数量。

5.open_files

文件打开数

mysql> show global status like 'open_files'; +---------------+-------+
| Variable_name | Value | +---------------+-------+
| Open_files | 16 | +---------------+-------+
1 row in set (0.00 sec)

mysql> 
mysql> 
mysql> show variables like 'open_files_limit'; +------------------+-------+
| Variable_name | Value | +------------------+-------+
| open_files_limit | 65536 | +------------------+-------+
1 row in set (0.00 sec)

比较合适的设置:Open_files / open_files_limit * 100% <= 75%

6.慢查询

执行时间超过2秒的即为慢查询

mysql> show variables like '%slow%'; +---------------------+---------------------------------+
| Variable_name | Value | +---------------------+---------------------------------+
| log_slow_queries    | OFF                             |
| slow_launch_time    | 2                               |
| slow_query_log      | OFF                             |
| slow_query_log_file | /var/run/mysqld/mysqld-slow.log | +---------------------+---------------------------------+
4 rows in set (0.00 sec)

mysql> 
mysql> show global status like '%slow%'; +---------------------+-------+
| Variable_name | Value | +---------------------+-------+
| Slow_launch_threads | 0     |
| Slow_queries | 0 | +---------------------+-------+
2 rows in set (0.01 sec)

7.query_cache_limit

允许进入查询缓冲区的最小数据大小,默认1MB

mysql> show global variables like 'query_cache_limit'; +-------------------+---------+
| Variable_name | Value | +-------------------+---------+
| query_cache_limit | 1048576 | +-------------------+---------+
1 row in set (0.00 sec)

你可能感兴趣的:(mysql)