SQL排查- 慢查询日志与分析数据库海量数据

版权声明:本博文仅供学习、参考、技术讨论,版权归笔者/译者所有。 https://blog.csdn.net/qq_38025219/article/details/84198814

慢查询日志

用于记录MYsql种响应时间超过阈值
打开慢日志
show variables ‘%slow_query-log%’
临时开启
set global slow_query_log = 1
关闭服务
永久开启
/etc/my.cnf [mysqlD]
修改日志
慢查询阈值 ,临时设置和永久设置,改完之后重新登录后生效,不需要重启服务
long_query_time = 3
select sleep(4)休眠4秒
show global status like ‘%slow_queries%’
查看慢查询日志文件 cat …
自带
mysqldumpslow --help 筛选,查找慢日志文件(返回数据最多,访问次数最多,包含左外连接)

分析数据库海量数据(a,b)

a,模拟海量数据

存储过程(无return)、存储函数(有return)
需求:
产生随机数,随机字符串
randstring(6) ->adacva 模拟名称 字符串从1开始
存储函数:

delimiter $   --防止语义报错--结束符号
 create function randstring(n int) returns varchar(255)
 begin
      declare all_str varchar(100) default 'adadsadwfwvvwfwafafaf'
       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$

开启了慢查询日志编写存储过程或者存储函数就会报这个错误。
临时解决和永久解决(设置参数变量和修改配置文件)

 create functuin ran_num() returns int(5)
begin
   declare i int default 0;
   set i = floor (rand()*100)l
   return i;
end$

–通过存储过程插入海量数据

 create procedure insert_emp(in eid_start int(10),int data_time int(10))
begin
 declare i int default 0;
 set autocommit = 0;
repeat
  
   insert into emp values(eid_start +i,randstring(5),'other',rutn_num());
     set i = i+1;
util i = data_times
 end repeat;
end $

—调用存储过程和函数实现模拟海量数据

  call insert_num()

b,分析海量数据

(1)show profiles;–默认关闭
会记录profiling打开后的语句全部sql执行时间 duration代表总共花费的时间

(2)–精确分析:sql诊断
show profile all for query 第几条
all 可以替换为你希望看见的关键部分时间花费
例如:cpu,等
(3)全局查询日志:记录开启之后的全部sql语句(只在调优的时候打开)
set gloobal general_log =1
set global log_output = ‘table’

  会被记录mysql.general_log表中
  (分析)  select * from mysql.general.log

猜你喜欢

转载自blog.csdn.net/qq_38025219/article/details/84198814