Mysql——profiles分析数据

Mysql / 597人浏览 / 0人评论

1.创建数据表

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(20) not null default '',
	deptno int(5) not null default 0
	)engine=innodb default charset=utf8;


2.通过存储函数 插入海量数据
    创建存储函数(随机字符串)

---模拟员工名称

delimiter $

create function randstring( n int) returns varchar(255) begin declare all_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(all_str,floor(1+rand()*52),1)); set i=i+1; end while; return return_str; end $;
--产生随机整数
	delimiter $
	create function ran_num() returns int(5)
	begin
		declare i int default 0;
		set i=floor(rand()*100);
		return i;

	end $;
存储过程插入海量数据:emp表中
	delimiter $
	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',ran_num());
			set i=i+1;
			until i=data_times
		end repeat;
		commit;
	end $;	
存储过程插入海量数据:dept表中
	delimiter $
	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(6));
			set i=i+1;
			until i=data_times
		end repeat;
		commit;

	end $;

除储存过程:DROP PROCEDURE   insert_dept;

插入数据
	call insert _emp(1000,800000);
	call insert_dept(10,30);



3.分析海量数据:profiles


	show profiles;--默认关闭
	show variables like '%profiling%';
	set profiling=on;  
	show profiles;会记录所有profile打开之后的全部sql查询语句

	--精确分析,sql诊断
	show profile all for query 上步查询的Query_id
	show profile cpu,block,io for query 1;

	--全局查询日志,记录开启之后 的全部sql语句(耗费性能)
	show variables like '%general_log%';
	set global general_log=1; --开启全局日志
	set global log_output='table';--设置将全部的sql记录在表中

	set global general_log=on;
	set global log_output='file';
	set global general_log_file='/tmp/general.log';--设置将全部的sql记录在文件中
	

	记录的sql位置:mysql.general_log表中。
	select * from mysql.general_log;
























0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我