zoukankan      html  css  js  c++  java
  • 了解Mysql(二)

    MySQL性能优化之慢查询

    慢查询的用途

    它能记录下所有执行超过long_query_time时间的SQL语句,帮我们找到执行慢的SQL,方便我们对这些SQL进行优化。

    查看是否开启慢查询

    show variables like 'slow_query%'

    slow_query_log = off,表示没有开启慢查询

    slow_query_log_file ,表示慢查询日志存放的目录

    开启慢查询(需要的时候才开启,因为很耗性能,建议使用即时性的

    方式一:(即时性的,重启mysql之后失效,常用的

    set global slow_query_log=1; 或者 set global slow_query_log=ON;

    开启之后 我们会发现 /var/lib/mysql下已经存在 localhost-slow.log了,未开启的时候默认是不存在的。

    方式二:(永久性的

    在/etc/my.cfg文件中的[mysqld]中加入:

     设置慢查询记录的时间

    查询慢查询记录的时间:show variables like 'long_query%',默认是10秒钟,意思是大于10秒才算慢查询。

    我们现在设置慢查询记录时间为1秒:set long_query_time=1;

    执行select count(1) from order o where o.user_id in (select u.id where users);

    因为我们开启了慢查询,且设置了超过1秒钟的就为慢查询,此sql执行了24秒,所以属于慢查询。

    我们在日志中查看:

    more /var/lib/mysql/localhost-slow.log

     

    我们可以看到查询的时间,用户,花费的时间,使用的数据库,执行的sql语句等信息。在生产上我们就可以使用这种方式来查看 执行慢的sql。

    查询慢查询的次数:show status like 'slow_queries';

    在我们重新执行刚刚的查询sql后,查询慢查询的次数会变为8

     慢查询日志分析工具Mysqldumpslow

    由于在生产上会有很多慢查询,所以采用上述的方法查看慢查询sql会很麻烦,还好MySQL提供了慢查询日志分析工具Mysqldumpslow。

    其功能是, 统计不同慢sql的出现次数(Count),执行最长时间(Time),累计总耗费时间(Time),等待锁的时间(Lock),发送给客户端的行总数(Rows),扫描的行总数(Rows)(1)查询Mysqldumpslow的帮助信息,随便进入一个文件夹下,执行:mysqldumpslow --help

    查看mysqldumpslow命令安装在哪个目录:whereis mysqldumpslow

     show profile

    用途:用于分析当前会话中语句执行的资源消耗情况

    (1)查看是否开启profile,mysql默认是不开启的,因为开启很耗性能

    show variables like 'profiling%';

     

    (2)开启profile(会话级别的,关闭当前会话就会恢复原来的关闭状态)

    set profiling=1; 或者 set profiling=ON;

    (3)关闭profile

    set profiling=0; 或者 set profiling=OFF;

    (4)显示当前执行的语句和时间

    show profiles;

     
    img

    (5)显示当前查询语句执行的时间和系统资源消耗

    show profile cpu,block io for query 4;(分析show profiles中query_id等于4的sql所占的CPU资源和IO操作)

    或者直接 : show profile for query 4;

     

     MySQL性能分析语句show profile

    介绍:Query Profiler是MYSQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的性能瓶颈在什么地方。

               通常我们是使用的explain,以及slow query log都无法做到精确分析,但是Query Profiler却可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,IO                 等,以及   该SQL执行所耗费的时间等。不过该工具只有在MYSQL 5.0.37以及以上版本中才有实现。

              默认的情况下,MYSQL的该功能没有打开,需要自己手动启动

    语句使用

    show profile 和 show profiles 语句可以展示当前会话(退出session后,profiling重置为0) 中执行语句的资源使用情况.

    show profiles :以列表形式显示最近发送到服务器上执行的语句的资源使用情况.显示的记录数由变量:profiling_history_size 控制,默认15条

    在这里插入图片描述

    show profile: 展示最近一条语句执行的详细资源占用信息,默认显示 Status和Duration两列

    在这里插入图片描述

    show profile 还可根据 show profiles 列表中的 Query_ID ,选择显示某条记录的性能分析信息

    在这里插入图片描述

     

    开启Profile功能

    Profile 功能由MySQL会话变量 : profiling控制,默认是OFF关闭状态

    查看是否开启了Profile功能:

     在这里插入图片描述

    开启profile功能

     

    使用show profile

    查看是否打开了性能分析功能

    select @@profiling;

     打开 profiling 功能

     set profiling=1;

     

     执行sql语句

     

      执行 show profiles 查看分析列表

     

     查询第二条语句的执行情况

     show profile for query 2;

     

      

      可指定资源类型查询

      show profile cpu,swaps for query 2;

      

      MySQL事务处理

       事务的概念

       事务(Transaction)是一个操作序列,该序列中的多个操作要么都做,要么都不做 是MySQL5.5之后的存储引擎所支持

       事务的特点( 简称 ACID)

       a. 原子性(atomicity)

       原子是自然界中最小的颗粒,具有不可再分的特点,事务中的所有操作可以看作是一个原子(事务是数据库的逻辑工作单位),要么全部执行,要么全不执行.

       b. 一致性(consistency)

       事务执行的结果必须要保证数据库中数据的一致性

       c.隔离性(isolation)

       隔离性指各个事务的操作是互不干扰的,即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

       d.持久性(durability)

       持久性也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响.

       

       事务的控制

       1.创建一个库 test1

       2.创建一张表account(id账号主键唯一,username账号名,balance金额)

       3.插入数据

     

    开启事务

    语法:start | begin transaction开启一个新的事务

    例如:开启新事务,完成张三给李四转账200

     注意:使用start transaction 开启一个新事务后,该事务不会自动提交,必须手动提交。

    提交事务

    语法:commit

    回滚事务

    语法:rollback

    注意:开启的事务,未提交时候可以回滚。

     

     

  • 相关阅读:
    Linux Shell脚本详细教程
    linux下错误代码E212: Can't open file for writing
    github仓库的基本使用-创建、上传文件、删除
    -bash: ifconfig: command not found解决办法
    Xshell能ping通但连不上CentOS 7
    devtools和vuex mutations
    Google Chrome谷歌浏览器安装devtools
    Vuex状态管理模式
    vue Promise all
    vue Promise链式调用
  • 原文地址:https://www.cnblogs.com/ptxxc/p/12111537.html
Copyright © 2011-2022 走看看