查询慢查询的SQL
show global status like '%slow_queries%'
还可以用mysqldumpslow查看
- 返回记录最多的3个
mysqldumpslow -s r -t 3 var/lib/mysql/localhost-slow.log
- 访问次数最多的
mysqldumpslow -s c -t 3 var/lib/mysql/localhost-slow.log
- 前十条包含leftjoin的语句
mysqldumpslow -s t -t 10 -g "left join" var/lib/mysql/localhost-slow.log
分析海量数据
模拟海量数据 存储过程/函数
//创建数据库
create database testdata;
use testdata;
create table dept(
dno int(5) primary key default 0,
dname varchar(20) not null default '',
loc varchar(30) default ''
)engine=innodb default charset=utf8;
create table emp(
eid int(5) primary key ,
ename varchar(20) not null default '',
job varchar(30) not null default '',
deptno int(5) not null default 0
)engine=innodb default charset=utf8;
//通过存储过程(无return)/存储函数(有return)
创建存储函数:
randstring(6) ->模拟员工名称
delimiter $
create function randstring(n int) returns varchar(255)
begin
declare all_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
declare return_str varchar(255) default '';
declare i int default 0;
while i
产生随机整数
create function rand_num() returns int(5)
begin
declare i int default 0;
set i = floor(rand()*100);
return i;
end $
通过存储过程产生海量数据
create procedure insert_emp(in eid_start int(10),in data_times int(10))
begin
declare i int default 0;
set autocommit = 0;
repeat
insert into emp values(eid_start+i,randstring(5),'other',rand_num());
set i = i+1;
until i=data_times
end repeat;
commit;
end$
通过存储过程产生海量数据
create procedure insert_dept(in dno_start int(10),in data_times int(10))
begin
declare i int default 0;
set autocommit = 0;
repeat
insert into dept values(dno_start +i,randstring(6),randstring(8));
set i = i+1;
until i=data_times
end repeat;
commit;
end$
插入数据
delimiter ;
call insert_emp(1000,800000);
call insert_dept(10,30);
分析海量数据profiles
show profiles;--默认是管别的
show variables like '%profiling%'
set profiling = on; 会记录所有的profile语句
到底是io,内存,cpu消耗的时间,不知道精确的设备的数据
-精确分析
show profile all for query 1;
show profile cpu, block, io for query 1;
-
全局的查询日志:记录开启之后的全部sql语句,这些全局的记录操作,仅仅在调优的时候打开即可,在开发的时候关闭
//查看日志
show variables like '%general_log%'
set global general_log = 1;
set global log_output = 'table';
mysql.general_log;
只能看到一些操作语句,真正适合调优的是profile语句。