SQL3

查询慢查询的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语句


打开profile后记录的执行语句

到底是io,内存,cpu消耗的时间,不知道精确的设备的数据
-精确分析

show profile all for query 1;
show profile cpu, block, io for query 1;
  • 全局的查询日志:记录开启之后的全部sql语句,这些全局的记录操作,仅仅在调优的时候打开即可,在开发的时候关闭


    image.png
//查看日志
show variables like '%general_log%'
set global general_log = 1;
set global log_output = 'table';
mysql.general_log;

只能看到一些操作语句,真正适合调优的是profile语句。

你可能感兴趣的:(SQL3)