1. 슬로우 쿼리 로그
1.1 무엇입니까
(. 1) MySQL의 느린 쿼리 로그는 응답 시간을 기록하는 데 사용됩니다 MySQL을 제공하는 로그, 특히 SQL LONG_QUERY_TIME 실행 시간 값을 초과, MySQL은 임계 값 문을 초과 할 경우, 그것은이 슬로우 쿼리 로그에 기록됩니다 .
(2) 상세 동작 시간 값의 LONG_QUERY_TIME SQL을 넘으면,이 슬로우 쿼리 로그에 기록한다 말한다. 기본값은 10 초 이상이 문을 실행하는 것을 의미, 10 LONG_QUERY_TIME입니다.
(3) 심지어 우리 느린 SQL 경우 그 이전에 설명 포괄적 인 분석과 함께 SQL의 5 초 이상을 수집, 희망, SQL은 5 초 이상에 대한 SQL 실행으로, 우리의 인내의 최대 시간 값을 넘어 무엇을 볼 수에 대한.
사용하는 방법 1.2
기본적으로 MySQL 데이터베이스가 느린 쿼리 로그가 켜지지 않습니다, 우리는 수동으로 매개 변수를 설정해야합니다.
이 필요한 튜닝은되어 있지 않은 경우 슬로우 쿼리 로그가 다소 느린 쿼리 로그 지원은 파일에 기록 로깅 일부 성능에 미치는 영향을 가져올 열 때문에 물론, 일반적으로 우리는이 기능을 활성화하지 않는 것이 좋습니다.
(1) 오픈 세트
- SHOW 변수 '% slow_query_log %'LIKE, 슬로우 쿼리 로그가 켜져 참조하십시오. 슬로우 쿼리 로그를 의미 OFF의 경우 Slow_query_log 기본 값은 사용할 수 없습니다
- 세트 글로벌 slow_query_log = 1; 슬로우 쿼리 로그에 차례
- SHOW 변수는 'LONG_QUERY_TIME %'LIKE, 슬로우 쿼리 임계 값은 초 단위로 설정 참조
- 세트 LONG_QUERY_TIME = 1; 초 슬로우 쿼리 임계 값 설정
(2) 영구에서 구성 파일 구성 께 my.cnf의 [MySQL의] 수정
slow_query_log = 1
slow_query_log_file =은 / var / lib 디렉토리 / mysql을 / atguigu-slow.log //하면 로그 파일을 작성
LONG_QUERY_TIME = 3 // 느린 SQL 임계 값
log_output = FILE // 로그 파일 형식
(3) 쿼리 SQL을 실행 속도가 느린 쿼리 로그보기를 설정하는 데 시간이 오래.
1.3 로그 분석 도구 mysqldumpslow
(1)보기 mysqldumpslow 도움말 정보
명령 : [루트 @ 누에 고치 ~] # mysqldumpslow --help (리눅스 환경)
(2)보기 mysqldumpslow 도움말 정보
- 돌아 10 개 개의 레코드를 SQL을 제공하기 위해 설정 : mysqldumpslow -t -SR (10) C : /mysql/mysql.log
- 대부분의 시간은 10 SQL에 액세스 할 수 있습니다 : mysqldumpslow -sc -t 10 C : /mysql/mysql.log
- 왼쪽에 연결하기는 시간 순서 10 이전에 따라 쿼리를 포함 :
mysqldumpslow -ST -t 10 -g "왼쪽 가입"/var/lib/mysql/atguigu-slow.log
- 이러한 명령을 사용하는 경우 외에도 조합을 제안 | 더 사용하거나 화면 발생을 폭발 할 수 있습니다 :
mysqldumpslow -SR -t 10 /var/lib/mysql/atguigu-slow.log | 더
2. 대량 데이터 스크립트
1) 내장 테이블 문
CREATE TABLE `dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARCHAR(40) DEFAULT NULL, ceo INT NULL , PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; CREATE TABLE `emp` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `empno` INT NOT NULL , `name` VARCHAR(20) DEFAULT NULL, `age` INT(3) DEFAULT NULL, `deptId` INT(11) DEFAULT NULL, PRIMARY KEY (`id`) #CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2). 设置参数
在执行创建函数之前,首先请保证 log_bin_trust_function_creators 参数为 1,即 on 开启状态。 否则会报错。
查询:show variables like 'log_bin_trust_function_creators';
设置:set global log_bin_trust_function_creators=1;
当然,如上设置只存在于当前操作,想要永久生效,需要写入到配置文件中:
在[mysqld]中加上 log_bin_trust_function_creators=1
3).创建函数
3.1 随机产生字符串函数
CREATE FUNCTION `rand_string`(n int) RETURNS varchar(255) CHARSET utf8 BEGIN DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; DECLARE return_str varchar(255) DEFAULT ''; DECLARE i int DEFAULT 0; WHILE i < n DO SET return_str = CONCAT(return_str, SUBSTRING(chars_str,FLOOR(1 + RAND() * 52), 1)); SET i = i + 1; END WHILE; RETURN return_str; END;
3.2 随机产生部门编号
CREATE FUNCTION `rand_num`(from_num int, to_num int) RETURNS int(11) BEGIN DECLARE i int DEFAULT 0; SET i = FLOOR(from_num + RAND() * (to_num - from_num + 1)); RETURN i; END;
4). 创建存储函数
4.1 创建往 emp 表中插入数据的存储过程
CREATE PROCEDURE `insert_emp`(in start int(10), in max_num int(10)) BEGIN declare i int default 0; set autocommit = 0; repeat set i =i+1; INSERT INTO emp (empno, NAME ,age ,deptid ) VALUES ((START+i) ,rand_string(6) , rand_num(30,50),rand_num(1,10000)); until i = max_num end repeat; commit; END;
4.2 创建往 dept 表中插入数据的存储过程
CREATE PROCEDURE `insert_dept`(max_num int) BEGIN DECLARE i int DEFAULT 0; SET autocommit = 0; REPEAT SET i = i + 1; INSERT INTO `dept` (`deptname`, `address`, `ceo`) VALUES (rand_string(8), rand_string(10), rand_num(1, 500000)); UNTIL i = max_num END REPEAT; COMMIT; END;
5).调用存储过程
#执行存储过程,往 dept 表添加 1 万条数据DELIMITER ;CALL insert_dept(10000);#执行存储过程,往 emp 表添加 50 万DELIMITER ;CALL insert_emp(100000,500000);
3. show profile
Show Profile是mysql提供的可以用来分析当前会话中SQL语句执行的资源消耗情况的工具。可用于SQL调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。
3.1 分析步骤
1. 开启Show Profile功能,默认该功能是关闭的,使用前需开启。
3.2. 批量导入数据
上面已做
3.3. 运行SQL,通过show profiles查看结果
3.4. 使用show profile对sql语句进行诊断。
通过上面的图,可以看出,第10条SQL查询的时间很慢。我们就来看看这条SQL语句的执行情况
3.5. show profile的常用查询参数
①ALL:显示所有的开销信息。
②BLOCK IO:显示块IO开销。
③CONTEXT SWITCHES:上下文切换开销。
④CPU:显示CPU开销信息。
⑤IPC:显示发送和接受开销信息。
⑥MEMORY:显示内存开销信息。
⑦PAGE FAULTS:显示页面错误开销信息。
⑧SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息。
⑨SWAPS:显示交换次数开销信息。
3.6. 需要注意的参数
①converting HEAP to MyISAM:查询结果太大,内存不够,数据往磁盘上搬了。
②Creating tmp table:创建临时表。先拷贝数据到临时表,用完后再删除临时表。
③Copying to tmp table on disk:把内存中临时表复制到磁盘上,危险!!!
④locked。
show profile诊断结果中出现了以上4条结果中的任何一条,则sql语句需要优化。
总结
#1.show profile默认是关闭的,并且开启后只存活于当前会话,也就说每次使用前都需要开启。如果永久开启,修改配置文件。
#2.通过show profiles查看sql语句的耗时时间,然后通过show profile命令对耗时时间长的sql语句进行诊断。
#3.注意show profile诊断结果中出现相关字段的含义,判断是否需要优化sql语句。
#4.可更多的关注MySQL官方文档,获取更多的知识。