MySQL 慢查询

show [session|global] status like .... #默认是session级别的状态,是当前会话,如果用global是查看从数据库启动后所有的全局状态
show status like 'uptime';    #数据库启动了多长时间以秒为单位
show status like 'com_select';    #从数据库启动到现在执行了多少次查询
show status like 'com_insert';    #从数据库启动到现在执行了多少次插入
show status like 'com_update';    #从数据库启动到现在执行了多少次更新
show status like 'com_delete';    #从数据库启动到现在执行了多少次删除
show status like 'connections'; #试图连接mysql服务器的次数
#netstat -anb     #查看具体那个主机联接到服务器   b:参数可以查看windows的PID进程号




开启慢查询:
vim my.cnf
slow_query_log
slow_launch_time=1
log_queries_not_using_indexes  


显示慢查询的次数:
show status like 'slow_queries';


如何定位慢查询:(默认情况下MYSQL认为10s以上才算慢查询)
修改mysql定义的慢查询时间:

show variables like 'long_query_time';
set long_query_time=1    #将默认值修改为1s
set slow_launch_time=1

eg:
vim my.ini

[mysqld]

#open the slow query function
long_query_time=1
log_queries_not_using_indexes

#log
log_slow_queries
log_bin
log_error
log


通过存储过程来创建大表来测试慢查询
//创建DEPT表(部门表)
create table dept(deptno mediumint unsigned not null default 0,
dname varchar(20) not null default "",
loc varchar(13) not null default "")
engine=myisam default charset=utf8;

//创建EMP雇员表
create table emp(
empno mediumint unsigned not null default 0,
ename varchar(20) not null default "",
job varchar(9) not null default "",
mgr mediumint unsigned not null default 0,
hiredate date not null,
sal decimal(7,2) not null,
deptno mediumint unsigned not null default 0
)engine=myisam default charset=utf8;

//创建工资级别表
create table salgrade
(grade mediumint unsigned not null default 0,
losal decimal(17,2) not null,
hisal decimal(17,2) not null
)engine=myisam default charset=utf8;

测试数据:
insert into salgrade values(1,700,1200);
insert into salgrade values(2,1201,1400);
insert into salgrade values(3,1401,2000);
insert into salgrade values(4,2001,3000);
insert into salgrade values(5,3001,9999);

定义一个新的命令结束符号
delimiter,,
还原
delimiter ;

删除自定义的函数:
drop function rand_string,,


//创建函数过程:

create function rand_string(n INT)
returns varchar(255)
begin
declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
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 ,,

调用:
mysql> select rand_string(10) from dual;
    -> ,,
+-----------------+
| rand_string(10) |
+-----------------+
| wtFSAWhVji      |
+-----------------+
1 row in set (0.00 sec)

删除函数:
drop function rand_string

//定义随机数字
create function rand_num()
returns int(5)
begin
declare i int default 0;
set i=floor(10+rand()*500);
return i;
end ,,
//使用
select rand_num();


//创建存储过程
//start:表示雇员的编号,表示从那里开始
//max_num:表示一共添加多个雇员
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 values((start+i),rand_string(6),'SALESMAN',0001,curdate(),2000,rand_num());
until i=max_num
end repeat;
commit;
end ,,
//使用
delimiter ;
call insert_emp(100001,4000000);



分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS