首页 运维知识 如何使用MySQL调优2 如何调优SQL

如何使用MySQL调优2 如何调优SQL

在如何调优SQL的基础上,继续学习MySQL调优技术。 MySQL调优的维度 在三角形的底部,成本越低。如业务需求。 2、测试数据准备 下载 https://github.com/…

如何调优SQL的基础上,继续学习MySQL调优技术。

MySQL调优的维度

如何使用MySQL调优2 如何调优SQL插图

在三角形的底部,成本越低。如业务需求。

2、测试数据准备

下载 https://github.com/datacharmer/test_db 测试数据

cd /home/files/test_db-master

执行 mysql -uroot -pxxx < employees.sql

如何使用MySQL调优2 如何调优SQL插图1

检查导入是否正常

mysql -uroot -pxxx -t < test_employees_md5.sql

[root@VM_0_13_centos test_db-master]# mysql -uroot -pxxx -t < test_employees_md5.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| INFO                 |
+----------------------+
| TESTING INSTALLATION |
+----------------------+
+--------------+------------------+----------------------------------+
| table_name   | expected_records | expected_crc                     |
+--------------+------------------+----------------------------------+
| departments  |                9 | d1af5e170d2d1591d776d5638d71fc5f |
| dept_emp     |           331603 | ccf6fe516f990bdaa49713fc478701b7 |
| dept_manager |               24 | 8720e2f0853ac9096b689c14664f847e |
| employees    |           300024 | 4ec56ab5ba37218d187cf6ab09ce1aa1 |
| salaries     |          2844047 | fd220654e95aea1b169624ffe3fca934 |
| titles       |           443308 | bfa016c472df68e70a03facafa1bc0a8 |
+--------------+------------------+----------------------------------+
+--------------+------------------+----------------------------------+
| table_name   | found_records    | found_crc                        |
+--------------+------------------+----------------------------------+
| departments  |                9 | d1af5e170d2d1591d776d5638d71fc5f |
| dept_emp     |           331603 | ccf6fe516f990bdaa49713fc478701b7 |
| dept_manager |               24 | 8720e2f0853ac9096b689c14664f847e |
| employees    |           300024 | 4ec56ab5ba37218d187cf6ab09ce1aa1 |
| salaries     |          2844047 | fd220654e95aea1b169624ffe3fca934 |
| titles       |           443308 | bfa016c472df68e70a03facafa1bc0a8 |
+--------------+------------------+----------------------------------+
+--------------+---------------+-----------+
| table_name   | records_match | crc_match |
+--------------+---------------+-----------+
| departments  | OK            | ok        |
| dept_emp     | OK            | ok        |
| dept_manager | OK            | ok        |
| employees    | OK            | ok        |
| salaries     | OK            | ok        |
| titles       | OK            | ok        |
+--------------+---------------+-----------+
+------------------+
| computation_time |
+------------------+
| 00:00:38         |
+------------------+
+---------+--------+
| summary | result |
+---------+--------+
| CRC     | OK     |
| count   | OK     |
+---------+--------+

3、MySQL慢查询

1) MySQL慢查询参数

如何使用MySQL调优2 如何调优SQL插图2

2) MySQL使用方式

如何使用MySQL调优2 如何调优SQL插图3

方式二

如何使用MySQL调优2 如何调优SQL插图4

这里使用第二种方式

set global slow_query_log  = 'ON';
set global log_output = 'FILE,TABLE';
set global  long_query_time  = 0.001; --1毫秒 需要重新连接数据库
show variables like '%long_query_time%' 查看是否生效
set global log_queries_not_using_indexes = 'ON';


MySQL慢查询

select  * from employees
select * from `mysql`.slow_log;
可以看到有慢查询日志了

如何使用MySQL调优2 如何调优SQL插图5

rows_sent 表示有多少条数据返回客户端。

rows_examined: 表示这条SQL扫码了多少行。

显示慢查询文件所在的路径

show variables like '%slow_query_log_file%'

如何使用MySQL调优2 如何调优SQL插图6

路径为:/var/lib/mysql/VM_0_13_centos-slow.log

查看慢日志文件 more VM_0_13_centos-slow.log

如何使用MySQL调优2 如何调优SQL插图7

3、Explian使用

找到慢SQL后,使用Explian查具体慢的原因

Explian结果输出字段

如何使用MySQL调优2 如何调优SQL插图8

实例1

如何使用MySQL调优2 如何调优SQL插图9

type: ALL  全表扫描,性能最差

key,key_length 为空: 说明没有执行任何索引。

rows: 扫描行数 2838426

实例2

explain
select * from employees e
    left join salaries s on e.emp_no = s.emp_no
where e.emp_no = 10001

结果:

如何使用MySQL调优2 如何调优SQL插图10这里id都是1,从上到下依次执行; 如果id值不同,id值越大,越早执行。

4、Explain可视化工具

1) IDEA中,选择SQL语句,右键。选择Explian Plan(Raw)

如何使用MySQL调优2 如何调优SQL插图11

 

4、SQL性能分析

SQL内部分析性能包括

SHOW PROFILE

INFORMATION_SCHEMA.PROFILING

PERFORMANCE_SCHEMA (MySQL建议使用)

 

1) SHOW PROFILE是MySQl的一个性能分析命令,可以跟踪SQL各种资源消耗

查看是否支持

SELECT @@have_profiling;

如何使用MySQL调优2 如何调优SQL插图12

YES说明支持。

查看是否开启

select @@profiling;

如何使用MySQL调优2 如何调优SQL插图13

0说明没有开启

开启profiling

set @@profiling = 1;

默认之后记录15条的历史

设置历史条数为100

set profiling_history_size = 100;

查看profile

show profiles;

查询select * from salaries; 后执行show profiles;

如何使用MySQL调优2 如何调优SQL插图14

可以发现Query_ID 为49.

查询这条SQL的执行过程 show profile for query 49;

如何使用MySQL调优2 如何调优SQL插图15

可以发现这个步骤执行时间最久。 Sending data 0.000745

查询这条SQL内存执行信息

show profile memory for query 49;

查询各种各样的信息

show profile ALL for query 49;

分析完成之后,关闭profiling

set @@profiling = 0;

MySQL官方文档声明SHOW PROFILE已被废弃,并建议使用Performance Schema作为替代。

2)  INFORMATION_SCHEMA.PROFILING

打开profiling

set @@profiling = 1;

执行SQL

select * from salaries;

查看Query_ID为125  show profiles;

如何使用MySQL调优2 如何调优SQL插图16

显示profile

select STATE, format(DURATION,6) AS DURATION
FROM information_schema.PROFILING
WHERE  QUERY_ID = 125 ORDER BY SEQ

显示结果如下:

如何使用MySQL调优2 如何调优SQL插图17

3) PERFORMANCE_SCHEMA

查看是否开启

select * from performance_schema.setup_actors;

如何使用MySQL调优2 如何调优SQL插图18

 

默认是开启的。任意主机发过来的请求,任意用户,任意角色都开启了。

只监控指定用户执行的SQL(实际项目建议使用)

如何使用MySQL调优2 如何调优SQL插图19

执行如下SQL,开启监控项

UPDATE performance_schema.setup_instruments
SET ENABLED  = 'YES', TIMED = 'YES'
WHERE NAME LIKE '%statement/%';

UPDATE performance_schema.setup_instruments
SET ENABLED  = 'YES', TIMED = 'YES'
WHERE NAME LIKE '%stage/%';



UPDATE performance_schema.setup_consumers
SET ENABLED  = 'YES'
WHERE NAME LIKE '%events_statements_%';


UPDATE performance_schema.setup_consumers
SET ENABLED  = 'YES'
WHERE NAME LIKE '%events_stages_%';

 

使用开启监控的用户,执行SQL语句,比如:

SELECT * FROM salaries

执行如下SQL,获得语句EVENT_ID

select EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000, 6) AS DURATION, SQL_TEXT
FROM performance_schema.events_statements_history_long
where SQL_TEXT LIKE '%salaries%'

结果如下图:

如何使用MySQL调优2 如何调优SQL插图20

分析执行的SQL语句

select event_name as Stage, TRUNCATE(TIMER_WAIT/1000000000000, 6) AS DURATION
FROM performance_schema.events_statements_history_long
where NESTING_EVENT_ID = 400

 

4) 三种方式对比

SHOW PROFILE    简单,方便,已废弃。

INFORMATION_SCHEMA.PROFILING  和SHOW PROFILE  本质是一样的 (已废弃)

PERFORMANCE_SCHEMA (MySQL建议使用) 目前来说使用不够方便。

如何选择: 目前可以继续使用SHOW PROFILE

 

6、OPTIMIZER_TRACE  优化器跟踪

跟踪优化器做出的各种决策

了解优化器的执行细节

理解SQL的执行过程,进而优化SQL

如何使用MySQL调优2 如何调优SQL插图21

 

开启 optimizer_trace

set optimizer_trace = “enabled=on”, end_markers_in_json = on;

记录最近30条SQL语句

set optimizer_trace_offset = -30, optimizer_trace_limit = 30;

 

执行需要分析的SQL语句

select *
from  salaries
where from_date = '1986-06-26'
and to_date = '1987-06-26'

 

使用如下语句分析

select * from information_schema.OPTIMIZER_TRACE limit 30

 

7、SQL诊断命令

如果数据库出了问题,应该如何定位呢,下面介绍常用的SQL诊断命令

1) 查看当前正在运行的线程

show [FULL] processlist

几个information_schema表常用的操作

如何使用MySQL调优2 如何调优SQL插图22

 

如何使用MySQL调优2 如何调优SQL插图23

2)  查看服务器相关信息

show status

3) 查看MySQL的变量

show variables;

4)  查看表以及视图的状态

show table status

5) 查看索引相关信息

show INDEX from employees;

查看表employees的索引信息

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 小小编

为您推荐

dell R710 更换raid卡后,raid卡信息没有了,处理方案

dell R710 更换raid卡后,raid卡信息没有了,处理方案

1.将一台服务器(A)的硬盘依次拔出,按相同顺序插入另一台同样配置的服务器(B) 2.启动服务器(B) 3.按提示键盘按...
PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

下载 并安装 PL SQL Developer 13,默认支持中文语言 ========================...
关于一条sql语句在mysql中是如何执行的

关于一条sql语句在mysql中是如何执行的

最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在my...
关于sql注入姿势总结(mysql)

关于sql注入姿势总结(mysql)

前言 学习了sql注入很长时间,但是仍然没有系统的了解过,这次总结一波,用作学习的资料。 从注入方法分:基于报错、基于布...
关于Oracle SQL外连接

关于Oracle SQL外连接

SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。 连接...

发表回复

返回顶部