• MySQL-索引优化分析


    一、慢查询日志(默认没有开启

    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句

    如果不是调优需要,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响,慢查询日志支持将日志记录写入文件。

    show variables like '%slow_query_log%'   #查看是否开启慢查询日志,默认禁用
    set global slow_query_log=1;      #设置慢查询日志开启,只对当前数据库生效,MySQL重启后会失效
    
    show variables like '%long_query_time%';  #查看慢于多少秒会被记录到日志文件(默认10s)
    set global long_query_time=3;  #设置慢查询阈值时间
    
    show global status like '%slow_queries%';  #查询当前系统中有多少条慢查询日志

    若要永久生效,必须修改配置文件my.cnf,然后重启服务器

    slow_query_log=1
    slow_query_log_file=/var/lib/mysql/sql_idx_slow.log   #系统默认会给一个缺省的文件{host_name}-slow.log
    long_query_time=3; 
    log_output=FILE

    二、慢查询日志分析工具mysqldumpslow 

    mysqldumpslow --help
    
    mysqldumpslow -s -r -t 10  /var/lib/mysql/hadoop102-slow.log #得到返回记录集最多的10个SQL
    
    mysqldumpslow -s -r -t 10  /var/lib/mysql/hadoop102-slow.log | more #结合|和more使用
    
    mysqldumpslow -s t -t 10 -g “left join” /var/lib/mysql/hadoop102-slow.log #得到按时间排序的前10条里面含有左连接的查询语句   

    三、批量导入数据

    创建函数若报错 This function has none of DETERMINISTIC

    由于开启过慢查询日志,开启了binlog,必须为function指定一个参数

    show variables like '%log_bin_trust_function_creators%'  
    set global log_bin_trust_function_creators = 1  

    永久生效,修改/etc/my/cnf文件添加 log_bin_trust_function_creators = 1 

    创建函数:

    1、随机生成字符串 

    DELIMITER $$
    CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
    BEGIN
      DECLARE char_str VARCHAR(100) DEFAULT 'abcdABCD';
      DECLARE return_str VARCHAR(255) DEFAULT '';
      DECLARE i INT DEFAULT 0;
      WHILE i<n DO
      SET return_str=CONCAT(return_str,SUBSTRING(char_str,FLOOR(1+RAND()*8),1));
      SET i=i+1;
      END WHILE;
      RETURN return_str;
    END $$
    

    2、随机生成编号 

    DELIMITER $$
    CREATE FUNCTION rand_num() RETURNS INT(5)
    BEGIN
      DECLARE i INT DEFAULT 0;
      SET i=FLOOR(100+RAND()*10);
      RETURN i;
    END $$  

    执行存储过程  

    DELIMITER $$
    CREATE PROCEDURE insert_tb1_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 tbl_emp(id,name,deptId) VALUES
    ((START+i),rand_string(10),rand_num());
    UNTIL i=max_num
    END REPEAT;
    COMMIT;
    END $$   

    调用存储过程

    DELIMITER ;
    CALL insert_tb1_emp(100,10);

    四、show profile(默认关闭,并保存最近15次的运行结果

    MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL调优的测量。

     1、默认关闭,使用前需要开启

    show variables like '%profiling%'; 
    set profiling=on;  #开启  

    2、运行SQL后,查看结果

    show profiles
    

    3、诊断SQL

    show profile cpu,block io for query 问题SQL数字号码  

    日常开发需要注意的结论

    • converting HEAP to MyISAM 查询结果太大,内存不够用往磁盘搬
    • Creating tmp table 创建临时表
    • Copy to tmp table on disk 把内存中临时表复制到磁盘,非常危险
    • locked 

    五、全局日志查询(永远不要在生产环境开启这个功能)

    1、配置启用

    在mysql的my.cnf中,设置如下

    general_log=1  #开启
    general_log_file=/path/logfile  #记录日志文件的路径
    log_output=FILE  #输出格式
    

    2、编码启用

    set global general_log=1;
    set global log_output='TABLE'; 
    

    3、此后所编写的sql语句,将会记录到mysql库中的general_log表中

    select * from mysql.general_log;  

      

      

     

  • 相关阅读:
    东南大学2021年高等代数
    北京师范大学2021年数学分析
    华东师范大学2021年数学分析考研试题参考解答修正版
    中国科学院大学2021年数学分析考研试题参考解答
    [数学考研竞赛00052]浙江大学2021年数学分析考研试题参考解答
    python3.6, cv2.imread()导入图片失败,none
    python商品分类信息
    mongodb 聚合(Map-Reduce)
    mongodb 聚合(aggregate)
    Java-Security(七):Spring Security方法注解认证启用
  • 原文地址:https://www.cnblogs.com/wjh123/p/11216492.html
Copyright © 2020-2023  润新知