• 11.查询截取分析_慢查询日志


    SQL优化分析 过程 

      1.观察,至少跑一天。看看生产的慢SQL情况

      2.开启慢查询日志,设置阙值,比如超过5秒钟的就是慢SQL,并将它抓取出来

      3.explain + 慢SQL分析

      4.show profile

      5.运维经理 or DBA ,进行数据库调优

    总结:

      1.慢查询的开启并捕获

      2.explain + 慢查询分析

      3.show profile 查询SQL在MySQL服务器里面的执行细节和生命周期情况

      4.SQL数据库服务器参数调优

    慢查询日志  (当某条SQL的执行时间大于阙值,会被记录到日志文件中 )

      1.查看与开启慢查询日志

        SHOW  VARIABLES  LIKE  '%show_query_log%';

        set  global  slow_query_log = 1;

      2.查看与开启阙值时间(需重新连接)  

        SHOW  VARIABLES  LIKE  '%long_query_time%';

        set  global  long_query_time = 1;

      3.查询当前系统有多少条慢查询记录

        show global status like '%slow_queries%';

    日志分析工具  mysqldumpslow

      查看 mysqldumpslow的帮助信息

        s:按何种方式排序

        c:访问次数

        t:查询时间

        ......

    mysqldumpslow -s c -t 10 日志文件    得到指定的慢查询日志中的访问次数最多的10个 慢 SQL

    批量数据脚本

      

    #1.建表dept
    create table dept(
    id int unsigned primary key auto_increment,
    deptno mediumint unsigned not null default 0,
    dname varchar(20) not null default "",
    loc varchar(13) not null default ""
    ) engine=innodb default charset=gbk;

    #2.建表emp
    create table emp(
    id int unsigned primary key auto_increment,
    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,
    comm decimal(7,2) not null,
    deptno mediumint unsigned not null default 0
    ) engine=innodb default charset=gbk;

    #3.设置参数 'log_bin_trust_function_creators';
    show variables like 'log_bin_trust_function_creators';
    set global log_bin_trust_function_creators = 1;

    #4.创建函数(随机产生字符串)
    delimiter $$
    create function rand_string(n int) returns varchar(255)
    begin
    declare chars_str varchar(100) default 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
    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 $$

    #(用于随机产生部门编号)
    delimiter $$
    create function rand_num()
    returns int (5)
    begin
    declare i int default 0;
    set i = floor(100 + rand()*10);
    return i;
    end $$

    #5.创建存储过程
    #(往emp表中插入数据的存储过程)
    delimiter $$
    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 (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ((start + i),rand_string(6),'salesman',0001,curdate(),2000,400,rand_num());
    until i = max_num
    end repeat;
    commit;
    end $$

    #(往dept表中插入数据的存储过程)
    delimiter $$
    create procedure insert_dept(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 dept (deptno,dname,loc) values ((start + i),rand_string(10),rand_string(8));
    until i = max_num
    end repeat;
    commit;
    end $$

    #6.调用存储过程(先插部门表,再插员工表)
    delimiter ;
    call insert_dept(100,10);

    call insert_emp(100001,500000);

    函数和存储过程的区别:
    函数有返回值,存储过程没有返回值

  • 相关阅读:
    pycharm2016.2.3注册码到期, 激活, 破解版
    CSS图片垂直居中方法
    C# 与 SQLite的操作
    C#操作Dataset数据集与SQLite数据库
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法
    从谎言看女性营销心理【转】
    Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.【转】
    新房收房时哪些注意事项--装修史上最细规则【转】
    人际沟通最忌讳一脸死相【转】
    比特币
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7367781.html
Copyright © 2020-2023  润新知