您的位置:首页 > 数据库 > MySQL

MySQL(性能调优)

2019-05-21 08:18 2071 查看

问题
基于一台普通版的MySQL服务器,执行下列操作:
练习my.cnf配置相关选项
启用慢查询日志
查看各种系统变量、状态变量
步骤
实现此案例需要按照如下步骤进行。

步骤一:MySQL并发及连接控制

max_connections对应并发客户端连接的数量,增加该值会增加 mysqld 要求的文件描述符的数量。若这个数值太小,可能会经常出现“too many connections”错误。比如 默认的数值是151,可以将其改为1024。

1)查看当前已建立的连接数

mysql> FLUSH STATUS;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL STATUS LIKE 'max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 5     |
+----------------------+-------+
1 row in set (0.05 sec)

2)查看当前的最大连接数限制

mysql> SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

步骤二:MySQL缓存参数控制

当 Key_reads / Key_read_requests 较低时,可适当加大key_buffer_size的缓存值,以提高性能。而增大sort_buffer_size的值,可以显著提高ORDER和GROUP的响应速度。

1)查看key_read相关数值

mysql> SHOW GLOBAL STATUS LIKE 'key_read%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Key_read_requests | 0     |
| Key_reads         | 0     |
+-------------------+-------+
2 rows in set (0.00 sec)

2)查看当前的key_buffer_size缓存大小

mysql> SHOW VARIABLES LIKE 'key_buffer_size';
+-----------------+---------+
| Variable_name   | Value   |
+-----------------+---------+
| key_buffer_size | 8388608 |
+-----------------+---------+
1 row in set (0.03 sec)

3)查看当前的sort_buffer_size大小

mysql> SHOW VARIABLES LIKE 'sort_buffer_size';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| sort_buffer_size | 262144 |
+------------------+--------+
1 row in set (0.00 sec)

4)查看检索表记录时的读取缓存大小

缓存值read_buffer_size和read_rnd_buffer_size会影响SQL查询的响应速度:

mysql> SHOW VARIABLES LIKE 'read_%_size';
+----------------------+--------+
| Variable_name        | Value  |
+----------------------+--------+
| read_buffer_size     | 131072 |
| read_rnd_buffer_size | 262144 |
+----------------------+--------+
2 rows in set (0.00 sec)

步骤三:MySQL线程重用和开表控制

分析“已打开表的数量/当前可缓存表的数量”,比值不超过95%就基本正常。

1)查看当前已打开、一共打开过多少个表

mysql> SHOW GLOBAL STATUS LIKE 'open%tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables   | 23     |
| Opened_tables | 72    |
+---------------+-------+
2 rows in set (0.01 sec)

2)查看当前可缓存多少个打开的表

mysql> SHOW VARIABLES LIKE 'table_open_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| table_open_cache | 2000  |
+------------------+-------+
1 row in set (0.00 sec)

步骤四:MySQL调整示例:记录慢查询

1)调整my.cnf配置文件,启用慢查询

[root@dbsvr1 ~]# vim  /etc/my.cnf
[mysqld]
.. ..
slow_query_log=1  							//启用慢查询
slow_query_log_file=mysql-slow.log  		//制定慢查询日志文件
long_query_time=5  							//查询耗时超过5秒才记录
log_queries_not_using_indexes=1  			//记录未使用索引的查询

[root@dbsvr1 ~]# service  mysql  restart
Shutting down MySQL.....                                   [确定]
Starting MySQL....                                         [确定]

2)查看慢查询日志(mysqldumpslow工具)

[root@dbsvr1 ~]# mysqldumpslow  /var/lib/mysql/mysql-slow.log
Reading mysql slow query log from /var/lib/mysql/mysql-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hosts
.. ..

3)了解与查询相关的缓存选项

查看当前的查询缓存大小:
mysql> SHOW VARIABLES LIKE 'query_cache%';
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| query_cache_limit            | 1048576 |  		//超过此大小则不再缓存
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 1048576 |  		//缓存空间的大小
| query_cache_type             | OFF     |
| query_cache_wlock_invalidate | OFF     |
+------------------------------+---------+
5 rows in set (0.00 sec)
查看当前的查询缓存统计数据:
mysql> SHOW GLOBAL STATUS LIKE 'qcache%';
+-------------------------+---------+
| Variable_name           | Value   |
+-------------------------+---------+
| Qcache_free_blocks      | 1       |
| Qcache_free_memory      | 1031368 |  			//缓存中的空闲内存
| Qcache_hits             | 0       |
| Qcache_inserts          | 0       |
| Qcache_lowmem_prunes    | 0       |
| Qcache_not_cached       | 100       |  			//不适合缓存的数量
| Qcache_queries_in_cache | 0       |
| Qcache_total_blocks     | 1       |
+-------------------------+---------+
8 rows in set (0.00 sec)

步骤五:关于MySQL状态和相关变量的查看

1)查看服务器的相关状态值(运行中动态变化)

使用SHOW GLOBAL STATUS语句,可结合LIKE条件做模糊过滤。
默认有400多个状态值:

mysql> SHOW GLOBAL STATUS\G
*************************** 1. row ***************************
Variable_name: Aborted_clients
Value: 0
*************************** 2. row ***************************
Variable_name: Aborted_connects
Value: 0
*************************** 3. row ***************************
Variable_name: Binlog_cache_disk_use
Value: 0
*************************** 4. row ***************************
Variable_name: Binlog_cache_use
Value: 0
*************************** 5. row ***************************
Variable_name: Binlog_stmt_cache_disk_use
Value: 0
.. ..  											//省略中间的大量状态值
.. ..
*************************** 435. row ***************************
Variable_name: Threads_connected
Value: 1
*************************** 436. row ***************************
Variable_name: Threads_created
Value: 1
*************************** 437. row ***************************
Variable_name: Threads_running
Value: 1
*************************** 438. row ***************************
Variable_name: Uptime
Value: 5322
*************************** 439. row ***************************
Variable_name: Uptime_since_flush_status
Value: 2283
439 rows in set (0.00 sec)

2)查看服务器的运行选项(一般为静态限制,可通过my.cnf文件配置,或SET修改)

使用SHOW VARIABLES语句,也可结合LIKE条件做模糊过滤。
默认也有400多个(接近500个)配置选项:

mysql> SHOW VARIABLES\G
*************************** 1. row ***************************
Variable_name: auto_increment_increment
Value: 1
*************************** 2. row ***************************
Variable_name: auto_increment_offset
Value: 1
*************************** 3. row ***************************
Variable_name: autocommit
Value: ON
*************************** 4. row ***************************
Variable_name: automatic_sp_privileges
Value: ON
*************************** 5. row ***************************
Variable_name: back_log
Value: 80
.. ..  											//省略中间的大量状态值
.. ..
*************************** 486. row ***************************
Variable_name: version_comment
Value: MySQL Cluster Community Server (GPL)
*************************** 487. row ***************************
Variable_name: version_compile_machine
Value: x86_64
*************************** 488. row ***************************
Variable_name: version_compile_os
Value: Linux
*************************** 489. row ***************************
Variable_name: wait_timeout
Value: 28800
*************************** 490. row ***************************
Variable_name: warning_count
Value: 0
490 rows in set (0.01 sec)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: