翼度科技»论坛 编程开发 mysql 查看内容

[MySQL 如何分析性能]

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
[MySql 如何分析性能]

Sql性能分析
  1. sql语句:
  2.     "show global status like "Com_______";"
  3. 结果:
  4.     +---------------+-------+
  5.     | Variable_name | Value |
  6.     +---------------+-------+
  7.     | Com_binlog    | 0     |
  8.     | Com_commit    | 7     |
  9.     | Com_delete    | 2     |
  10.     | Com_insert    | 10    |
  11.     | Com_repair    | 0     |
  12.     | Com_revoke    | 0     |
  13.     | Com_select    | 1400  |
  14.     | Com_signal    | 0     |
  15.     | Com_update    | 2     |
  16.     | Com_xa_end    | 0     |
  17.     +---------------+-------+
  18. 即: 当前数据库查询了1400次数,插入了1条数据,删除了2条,更新了条;
  19.         针对数据库优化 我们只需要关注查询次数即可,因为我们操作最多的也就是查询;
  20.    
复制代码

  • 慢查询日志

    慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。
    MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my,cnf)中配置如下信息:
    1. SQL语句: show variables like 'slow_query_log';
    2. 结果:
    3.         +----------------+-------+
    4.     | Variable_name  | Value |
    5.     +----------------+-------+
    6.     | slow_query_log | OFF   |
    7.     +----------------+-------+
    8.     1 row in set (0.00 sec)
    9.    
    10. # 我们可以看到日志默认为 关闭状态! 如需开启 修改配置文件(/etc/my,cnf)
    复制代码
    修改配置文件
    1. #开启MySQL慢日志查询开关
    2. show_query_log=1
    3. #设置慢日志的时间为2秒,SQL语句执行超过2s即为慢查询,然后就会记录慢查询日志
    4. long_query_time=2
    5. "“”
    6. 配置文件中加入如上参数即可!
    7. "“”
    8. 注意!!!
    9. # 修改完配置文件需要重启MySQL服务!
    复制代码
  • profile详情

    • show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪个地方。通过have_profiling参数,能够看到当前MySQL是否支持profile操作
    1. 执行SQL语句查看是否支持profiling
    2.     select @@have_profiling;
    3.     # 结果:
    4.         +------------------+
    5.         | @@have_profiling |
    6.         +------------------+
    7.         | YES              |
    8.         +------------------+
    9.    
    10. # 可以看到我们当前数据库是支持profile操作的
    复制代码

    • 默认profiling是关闭的,可以通过set语句在session/global级别开启profiling:
      (session/global 代表 当前会话/全局)
    1. # 1。查看是否开启profiling
    2.     select @@profiling;
    3.    
    4.         结果:
    5.         +-------------+
    6.         | @@profiling |
    7.         +-------------+
    8.         |           0 |
    9.         +-------------+
    10. # 2.开启profiling
    11.     set profiling=1;
    复制代码
    执行一系列的业务SQL的操作,然后我们可以通过如下指令查看SQL的执行耗时
    1. # 查看每一条SQL的耗时基本情况
    2.         show profiles;
    3.        
    4. # 查看指定query_id的SQL语句各个阶段的耗时情况
    5.         show profile for query query_id;
    6.        
    7. # 查看指定query_id的SQL语句CPU的使用情况
    8.         show profile cpu for query query_id;
    9. 注意:
    10.         query_id 为日志中记录的id号 可通过第一条指令看到!
    11.        
    复制代码
  • explain执行计划

    explain 或者 desc命令获取MySQL如何执行select语句的信息,包括在select语句执行过程中表如何连接和连接的顺序。
    语法:
    1. # 直接在select语句之前加上关键字explain/desc
    2.         explain select 字段列表 from 表名 where 条件;
    3.        
    4. # 例如:explain select name from t1 where id=1;
    5. # 结果:
    6. +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
    7. | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
    8. +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
    9. |  1 | SIMPLE      | t1    | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    3 |    33.33 | Using where |
    10. +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
    11. # explain 执行计划中各字段的含义
    12. 1、id
    13.         select查询的序列号,表示查询中执行select的子句或者是操作表的顺序(id相同,执行顺序从上到下;id不同。值越大越先执行!)。
    14. 2、select_type
    15.         表示select的类型,常见的取值有:
    16.         simple(简单表,即不使用表连接或者子查询)、
    17.         primary (主查询,即外层的查询)、
    18.         union (union中的第二个或者后面的查询语句)、
    19.         subquery (select/where之后包含子查询)等
    20. 3、type
    21.         表示连接类型,性能由好到差的连接类型为NULL、system、const、eq_ref、ref、range、index、all。
    22.        
    23. 4、possible_key
    24.         显示可能应用在这张表上的索引、一个或者多个。
    25.        
    26. 5、key
    27.         实际使用的索引,如果为NULL、则没有使用索引。
    28. 6、key_len
    29.         表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度、在不损失精确性的前提下、长度越短越好。
    30.        
    31. 8、rows
    32.         mysql认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能是并不总是准确的。
    33.        
    34. 9、filtered
    35.         表示返回结果的行数占需要读取行数的百分比,filtered的值越大越好。
    36. 10、extra
    37.         代表前边字段中的值没有展示出来的信息会在这个地方展示!
    38.        
    39. # 重点关注:type、possible_key、key、key_len
    40. # 参考字段:rows、extra
    41.    
    复制代码

来源:https://www.cnblogs.com/liupengfei1123/p/17411892.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

上一篇: mysql事务

下一篇: 升级 AIR_ORDER_FLIGHT

举报 回复 使用道具