MySQLのスロークエリログやショープロフィール

1.スロークエリログ

1.1は何ですか

  (1)MySQLのスロークエリログは、応答時間を記録するために使用されるMySQLが提供されるログは、特にSQL long_query_time実行時間値を超え、MySQLで閾値文超えると、それがスロークエリログに記録されます。

  (2)具体的には、スロークエリーログに記録され、値long_query_timeのSQLを超える動作時間を指します。デフォルト値は10秒以上のステートメントを実行することを意味し、10 long_query_timeです。

  彼は前に説明し総合的な分析と組み合わせたSQLの5秒以上を収集することを望んで、でも私たち遅いSQLた場合、SQLは、5秒以上のSQL実行として、私たちの忍耐の最大時間値を超えているかを確認するために(3)。

1.2どのように使用します

  デフォルトでは、MySQLデータベースは、スロークエリログをオンにしない、私たちは手動でパラメータを設定する必要があります。

  それは必要とチューニングされていない場合はもちろん、一般的に我々はスロークエリログは、多かれ少なかれ、いくつかのパフォーマンスへの影響をもたらすが開きますので、スロークエリログのサポートがファイルに書き込まロギング、この機能をアクティブにすることはお勧めしません。

  (1)オープンセット

  • SHOW変数のように「%slow_query_log%」;スロークエリログがオンになっている参照してください。スロークエリログが無効になっている意味OFFの場合はSlow_query_logのデフォルト値、
  • セットグローバルslow_query_log = 1;スロークエリログを有効に
  • SHOW VARIABLES LIKE「long_query_timeの%」;スロークエリしきい値を秒単位で設定されている参照
  • セットlong_query_time = 1;秒でスロークエリしきい値セット

  (2)永久的、で構成ファイル構成をmy.cnfの[MySQLの]を変更します

slow_query_log = 1

slow_query_log_file =の/ var / libに/ mysqlの/ atguigu-slow.logは//ログファイルを書き込みます

long_query_time = 3 //遅いSQLしきい値

log_output = FILE //ログファイル形式

  (3)クエリのSQLを実行するのに長い時間は、スロークエリログビューをオンにします。

1.3ログ解析ツールmysqldumpslow

  (1)閲覧mysqldumpslowヘルプ情報

    コマンド:[ルート@繭〜]#mysqldumpslow --help(Linux環境)

    

  (2)閲覧mysqldumpslowヘルプ情報

  • 戻り値は10枚のレコードにSQLを与えるために設定します  mysqldumpslow -t -SR 10 C:/mysql/mysql.log
  • ほとんどの時間は、10 SQLへのアクセスを得る:  mysqldumpslow -sc -t 10  C:/mysql/mysql.log
  • 左側に接続しなさい10の前にいる時間順に応じたクエリが含まれています。

    mysqldumpslow -st -t 10 -g "左の参加" /var/lib/mysql/atguigu-slow.log

  • また、これらのコマンドを使用するときの組み合わせ提案|多くの使用、または彼らはスクリーンが発生し爆発することがあります。

    mysqldumpslow -SR -t 10 /var/lib/mysql/atguigu-slow.log | もっと

2.バルクデータスクリプト

1)内蔵table文

CREATE TABLE `dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARCHAR(40) DEFAULT NULL, ceo INT NULL , PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; CREATE TABLE `emp` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `empno` INT NOT NULL , `name` VARCHAR(20) DEFAULT NULL, `age` INT(3) DEFAULT NULL, `deptId` INT(11) DEFAULT NULL, PRIMARY KEY (`id`) #CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2). 设置参数

  在执行创建函数之前,首先请保证 log_bin_trust_function_creators 参数为 1,即 on 开启状态。 否则会报错。

  查询:show variables like 'log_bin_trust_function_creators';

  设置:set global log_bin_trust_function_creators=1;

    当然,如上设置只存在于当前操作,想要永久生效,需要写入到配置文件中:

    在[mysqld]中加上 log_bin_trust_function_creators=1

3).创建函数

3.1 随机产生字符串函数

CREATE FUNCTION `rand_string`(n int) RETURNS varchar(255) CHARSET utf8
BEGIN
  DECLARE chars_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(chars_str,FLOOR(1 + RAND() * 52), 1));
    SET i = i + 1;
  END WHILE;
  RETURN return_str;
END;

3.2 随机产生部门编号

CREATE  FUNCTION `rand_num`(from_num int, to_num int) RETURNS int(11)
BEGIN
  DECLARE i int DEFAULT 0;
  SET i = FLOOR(from_num + RAND() * (to_num - from_num + 1));
  RETURN i;
END;

4). 创建存储函数

4.1 创建往 emp 表中插入数据的存储过程

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, NAME ,age ,deptid ) VALUES ((START+i) ,rand_string(6) , rand_num(30,50),rand_num(1,10000));
        until i = max_num
    end repeat;
    commit;
END;

4.2 创建往 dept 表中插入数据的存储过程

CREATE PROCEDURE `insert_dept`(max_num int)
BEGIN
  DECLARE i int DEFAULT 0;
  SET autocommit = 0;
  REPEAT
    SET i = i + 1;
    INSERT
      INTO `dept`
      (`deptname`, `address`, `ceo`)
    VALUES
      (rand_string(8), rand_string(10), rand_num(1, 500000));
  UNTIL i = max_num END REPEAT;
  COMMIT;
END;

5).调用存储过程

#执行存储过程,往 dept 表添加 1 万条数据
DELIMITER ;
CALL insert_dept(10000); 
 
#执行存储过程,往 emp 表添加 50 万
DELIMITER ;
CALL insert_emp(100000,500000); 

3. show profile

  Show Profile是mysql提供的可以用来分析当前会话SQL语句执行的资源消耗情况的工具。可用于SQL调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。

3.1 分析步骤

  1. 开启Show Profile功能,默认该功能是关闭的,使用前需开启。

   

3.2. 批量导入数据

   上面已做

3.3. 运行SQL,通过show profiles查看结果

  

3.4. 使用show profile对sql语句进行诊断。

 通过上面的图,可以看出,第10条SQL查询的时间很慢。我们就来看看这条SQL语句的执行情况

  

 3.5. show profile的常用查询参数

①ALL:显示所有的开销信息。

BLOCK IO:显示块IO开销。

③CONTEXT SWITCHES:上下文切换开销。

CPU:显示CPU开销信息。

⑤IPC:显示发送和接受开销信息。

MEMORY:显示内存开销信息。

⑦PAGE FAULTS:显示页面错误开销信息。

⑧SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息。

⑨SWAPS:显示交换次数开销信息。

3.6. 需要注意的参数

converting  HEAP to MyISAM:查询结果太大,内存不够,数据往磁盘上搬了。

Creating tmp table:创建临时表。先拷贝数据到临时表,用完后再删除临时表。

Copying to tmp table on disk:把内存中临时表复制到磁盘上,危险!!!

locked

 show profile诊断结果中出现了以上4条结果中的任何一条,则sql语句需要优化。

总结

#1.show profile默认是关闭的,并且开启后只存活于当前会话,也就说每次使用前都需要开启。如果永久开启修改配置文件

#2.通过show profiles查看sql语句的耗时时间,然后通过show profile命令对耗时时间长的sql语句进行诊断。

#3.注意show profile诊断结果中出现相关字段的含义,判断是否需要优化sql语句。

#4.可更多的关注MySQL官方文档,获取更多的知识。

おすすめ

転載: www.cnblogs.com/FondWang/p/12195567.html
おすすめ