首页 > 数据库 >Mysql:数据库优化步骤

Mysql:数据库优化步骤

时间:2023-05-30 15:47:34浏览次数:38  
标签:SQL 步骤 数据库 Mysql 查询 sql mysql show query

数据库优化步骤

  1. 查看mysql是否存在周期性波动
    1.1 是。代表可能遇上如618,双十一等活动对数据库暂时性的压力增大,可以mysql加缓存或更改缓存策略
    1.2 不是。大概率是本身开发人员编写的SQL有问题,或者是业务量达到一定程度引发的查询慢

非周期性波动调优思路

  1. 开启慢查询,并设定慢查询的阈值(当sql执行完所消耗超过这个时间,被认定为慢查询SQL)
  2. 使用慢查询工具,找到慢查询SQL
  3. 使用explain或者show profiling对这些sql进行分析,看为啥慢

如果是SQL等待时间长,修改数据库参数
如果是SQL执行时间长,加索引,表优化等

  1. 如果上面分析并且相关调优手段都用了,效果还是不太理想。可能是达到数据库表、索引等的瓶颈了,这种是业务量导致,需要读写分离,分库分表等架构来提升了

慢查询相关操作

  1. 查看mysql是否开启慢查询

show variables like '%slow_query_log';

注:默认情况下是不开启慢查询的,因为记录慢查询日志会影响性能,所以在调优排查的时候开启即可,平时不用开启

  1. 打开或关闭慢查询(临时,重启则恢复默认出厂)

set global slow_query_log = on;
set global slow_query_log = off;

  1. 查看慢查询日志(慢查询SQL存放的文件)

show variables like '%slow_query_log%';

  1. 查看慢查询阈值

show variables like '%long_query_time%';

注:默认10s

  1. 设置慢查询阈值(临时,重启则恢复默认出厂)

set global long_query_time = 10;
set long_query_time = 10;

注:两个一并执行即可

  1. 查看慢查询SQL的数目

show global status like '%Slow_queries%';

注:这只是来判断是否存在慢sql,并不能知道哪些sql或者我们猜测的sql是否是慢查询

持久化配置

上述设置慢查询开关,阈值都是临时操作,mysql重启的话就会恢复默认出厂,如果需要重启仍然保持,需要文件配置
image

慢查询工具-mysqldumpslow

我们去分析慢查询日志,直接打开的话,展示的格式和排版,从效率上看是不利于我们排查和分析的,所以mysql提供了mysqldumpslow慢查询日志分析工具,可以对此日志文件进行分析,以友好的方式展示在界面上

比如说要根据sql查询最新时间进行排序,并且取前面5条。则:

mysqldumpslow -s t -t 5 /var/lib/mysql/slow.log

注意:此工具的使用,不是在mysql客户端内,是在操作系统下直接使用。-s表示排序规则,-t表示取前面多少条

标签:SQL,步骤,数据库,Mysql,查询,sql,mysql,show,query
From: https://www.cnblogs.com/ibcdwx/p/17443403.html

相关文章

  • 4万多论坛头像个性头像ACCESS数据库
    在之前就弄到过个性网名和论坛签名的数据,比如有《8万多个网名大全QQ网名ACCESS数据库》、《个性网名大全网络名称大全ACCESS数据库》《2万多条QQ签名论坛签名大全ACCESS数据库》、《24万QQ伤感签名论坛签名ACCESS数据库》、《近2万签名的句子网络签名ACCESS数据库》、《上万条个性......
  • MySQL数据库A表和B表id冲突解决办法?
    方法1:不要定义自增长,用触发器来实现。方法2:不要定义自增长,两张表共享同一个sequence。(规则唯一)方法3:自增长,但是一张表是奇数,另一张全是偶数基于触发器的方法三:(对于现有系统的补救方案),最好的方案还是方法二使用同一个自增sequence获取--修改A表id别和B表id重复--查询最大的......
  • 利用 Kattle 同步数据库记录
    在工作中要实现Oracle数据库之间的记录传递,于是使用Kattle工具实现此同步功能,主要设计过程如下图: 我们先看下整个作业过程,主要是通过建立三个转换来实现:一、获取最近的传输标识;  A、获取PUR_ORDER_TRAINMIT_LOG表中 CREDATE_FLG字段,记录下最后一次同步的增量时间......
  • springboot使用jdbc连接mysql(不用配置文件)
     1、连接mysql的工具类:packagecom.jzproject.common.mysql;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importorg.springframework.jdbc.core.JdbcTemplate;importjava.sql.*;importjava.util.ArrayList;importjava.util.HashMap;......
  • spingBoot连接mysql数据库
    1.最终效果 字符串+数据库中id为2的手机号 2.代码设置了响应的内容的格式  3mysql数据库内表内容数据库名称qikegu_demo ----------------------------------------------------------------------------------------------------------------------------------......
  • 1万7千多首古诗词范赏评诗词ACCESS\EXCEL数据库
    虽然收集了一些古诗词相关的数据库,但好像没有什么注释点评类的内容,而今天这份《1万7千多首古诗词范赏评诗词ACCESS数据库》包含了17704首本地赏评诗词、12个朝代分门别类、1680位本地诗人简介、超过50个诗词分类欣赏。样本请从以下链接下载:链接:https://pan.baidu.com/s/1XV4F......
  • Mysql Php 推送获取随机数据解决分页重复问题
    或许你已经看过很多博主写的文章,要不就是抄袭,要不就是给你一个下面的语句,随机是随机了,但是多来两页,你会发现前面出现的数据在第三页甚至第二页就出现了select*fromtableorderbyrand()这是因为rand()机制的问题,他每次都会打乱数据给你,然后你去取的时候0-10,11-20都有可能......
  • 源码分析MySQL的"commit"是怎么"commit"的
    MySQL的"commit"命令提交事务时,内部会进行两阶段提交,这篇文章基于MySQL8.0.33源码分析一下MySQL的两阶段提交。整体逻辑整理如下:Prepare阶段: 1.BinlogPrepare 1.1获取上一个事务最大的lastcommitted时间戳 2.InnodbPrepare 2.1事务状态设置为prepared 2.2释放......
  • Git 拉取分支以及推送分支步骤
    一、git从指定分支拉取代码【前提:远程仓库已有你想拉取的分支,这里以develop分支为例】##首先确定想在哪个分支上拉代码,假设你想拉代码的分支是develop分支。第一步:在拉代码之前先查看以下自己所处的分支名称:gitbranchgitbranch命令解释:   gitbranch查看本地所有分支,其中有......
  • tomcat+https /mysql+ssl /nginx+https
    本文简要介绍CA和证书的基础知识,并演示openssl-1.0.2d的安装,CA证书生成、用户证书申请、使用CA签发用户证书等内容。实验环境操作系统:Windowsopenssl版本:openssl-1.0.2d(官网获取)1基础知识1.1PKI为解决Internet的安全问题,世界各国对其进行了多年的研究,初步形成了一套完整的......