MySQL 优化思路篇

news2024/11/23 13:19:41

MySQL 优化思路篇

  • 1、MySQL 查询的优化步骤
  • 2、查询系统性能参数
  • 3、慢查询日志定位问题
    • 3.1、开启慢查询日志参数
    • 3.2、查看慢查询数目
    • 3.3、慢查询日志的分析工具 mysqldumpslow
    • 3.4、关闭慢查询日志
    • 3.5、慢查询日志的删除与重建
  • 4、SHOW PROFILE :查看SQL执行成本

1、MySQL 查询的优化步骤

 

       数据库调优流程,主要分为两部分**观察(Show status)**和 行动(Action),分别用字母 S 和 A 表示,如下图:
在这里插入图片描述

  • 周期性的波动,可能是双十一,促销活动等,可以通过加缓存或更改缓存失效策略解决。

  • 开启慢查询,并设置long_query_time参数定义【慢】的阈值,帮助我们定位执行慢的SQL语句,收集慢查询语句,再通过分析工具对慢查询日志进行分析。

  • 对慢SQL使用 EXPLAIN 分析其执行计划,或者使用 SHOW PROFILE 查看慢SQL每一步骤的时间成本,以确认慢SQL是执行时间长还是等待时间长

    • 等待时间长,可以调优服务器参数,比如适当增加数据库的缓冲池。
    • 执行时间长,就考虑索引设计问题关联表数量过多数据库表结构设计问题等。
  • 以上均不能解决,再考虑是否数据库自身的 SQL 查询性能达到瓶颈。

    • 达到瓶颈,就考虑增加服务器(采用读写分离架构),或进行分库分表,比如垂直分库、垂直分表、水平分表等.
    • 如未达到瓶颈,则建议再重新检查以上各项。

在这里插入图片描述

2、查询系统性能参数

 

MySQL可使用 SHOW STATUS 语句查询 MySQL 数据库的性能参数执行频率等.

-- 执行语句
SHOW [GLOBAL | SESSION] STATUS LIKE '参数';
-- 查询 MySQL 服务器的连接次数,示例:
SHOW STATUS LIKE 'Connections';
-- 查询 MySQL 服务器的慢查询次数,示例:
SHOW STATUS LIKE 'Slow_queries';
参数说明
Connections连接MySQL服务器的次数。
UptimeMySQL 服务器的上线时间。
Slow_queries慢查询的次数。
Innodb_rows_readselect 查询返回的行数。
Innodb_rows_inserted执行 INSERT 操作插入的行数。
Innodb_rows_updated执行 UPDATE 操作更新的行数。
Innodb_rows_deleted执行 DELETE 操作删除的行数。
Com_select查询操作的次数。
Com_update更新操作的次数。
Com_insert插入操作的次数,批量插入只累加算一次。
Com_delete删除操作的次数。
last_query_cost统计查询成本,结果为查询所需要读取的页数量

3、慢查询日志定位问题

 
       MySQL 的慢查询日志,用来记录在MySQL中 响应时间超过阈值的语句,具体指运行时间超过 long_query_time 值的 SQL,会被记录到慢查询日志中。long_query_time默认值为 10,指运行 10秒以上(不含10秒)的语句被认定为慢SQL.

       MySQL 默认没有开启慢查询日志,有需求可手动开启。由于开启慢查询日志,会或多或少带来一定的性能影响,如果不是调优需求的话,一般不建议启动该参数。慢查询日志支持将日志记录写入文件。

 

3.1、开启慢查询日志参数

 

-- 查询是否开启了慢查询日志,ON 表示开启,OFF 表示未开启,默认为 OFF.
-- 查询结果中 slow_query_log_file 表示慢查询日志所在文件地址
SHOW VARIABLES LIKE '%slow_query_log%';
-- 查询慢查询 阈值,查询结果单位 为 秒,默认为 10秒。
SHOW VARIABLES LIKE '%long_query_time%';
-- 设置 慢查询阈值为1s。
-- 注意:使用该方式对当前session的long_query_time是失效的,对新连接的客户端有效。
SET GLOBAL long_query_time = 1;

在这里插入图片描述

可以通过修改配置文件 my.cnf 或 my.ini 的方式,永久设置。

[mysqld]
slow_query_log=ON # 开启慢查询日志
slow_query_log_file=/var/lib/mysql/my_slow.log # 设置慢查询日志的目录和文件名信息
long_query_time=3  # 设置慢查询阈值为 3 秒
log_output=FILE

 

3.2、查看慢查询数目

 

-- 查询当前系统中有多少条慢查询记录
SHOW GLOBAL STATUS LIKE '%slow_queries%';
-- 慢查询的认定与两个因素有关,除慢查询阈值外,还有一个 扫描过的最少记录数(min_examined_row_limit )
-- 如果查询扫描的记录数,超过该变量指,且超过慢查询阈值,即认定为慢SQL.
-- min_examined_row_limit 默认值为 0
-- 可通过 修改配置文件 my.cnf 或 my.ini 修改 min_examined_row_limit值,
-- 也可通过 set 语句修改  min_examined_row_limit

 

3.3、慢查询日志的分析工具 mysqldumpslow

 

-- mysqldumpslow 工具由 MySQL提供。
-- 可以查看 mysqldumpslow 帮助说明
mysqldumpslow -- help
-- 使用 mysqldumpslow 查看 慢日志文件示例
-- 显示5条,不显示查询参数
-- mysqldumpslow -s t  -t 5 [慢日志文件全路径地址] 
mysqldumpslow -s t  -t 5 /var/lib/mysql/atguigu05-slow.log
-- 显示5条,显示查询参数
-- mysqldumpslow -a -s t  -t 5 [慢日志文件全路径地址] 
mysqldumpslow -a -s t  -t 5 /var/lib/mysql/atguigu05-slow.log

在这里插入图片描述
 

3.4、关闭慢查询日志

 

  • 永久性方式

    -- 修改配置文件 my.cnf 或 my.ini ,把[mysqld]组下的 slow_query_log 值设为 OFF. 
    -- 修改配置文件后,保存,再重启MySQL服务,即可生效。
    [mysqld]
    slow_query_log=OFF
    -- 或者注释掉 slow_query_log,保存,再重启MySQL服务,即可生效。
    [mysqld]
    # slow_query_log=OFF
    
  • 临时性方式

    -- 使用SET 语句设置
    SET GLOBAL slow_query_log=OFF;
    

 

3.5、慢查询日志的删除与重建

 

-- 找到慢查询日志地址
SHOW VARIABLES LIKE '%slow_query_log_file%';
-- 使用 rm -rf [慢查询日志文件全路径地址] 删除
-- mysqladmin flush-logs slow 重新生成慢查询日志文件
mysqladmin -uroot -p flush-logs slow
-- 慢查询日志的删除重建,都是使用 mysqladmin flush-logs slow 来执行的,
-- 一旦执行该命令,慢查询日志都只存在新的日志文件中,如果需要旧的查询日志,就需要事先备份。

4、SHOW PROFILE :查看SQL执行成本

 

       show profile 是MySQL 提供用来分析当前会话中的SQL做了什么、执行的资源消耗情况的工具,用于SQL调优优化。默认情况下处于关闭状态,并保存最近15次的运行结果。

-- 查看 show profile 启动状态,ON 开启,OFF 关闭。
SHOW VARIABLES LIKE 'profiling';
-- 在会话级别开启 
SET profiling = 'ON';
-- 查询最近 15次查询的 query_id
SHOW profiles;
-- 查看最近一次查询的开销
SHOW profile;
-- 查询 query_id 为2 的执行成本
SHOW profile for query 2;
-- 添加 cpu、memory 列参数
SHOW  profile cpu,memory;

在这里插入图片描述

status列 结果说明:

  1. starting:查询开始执行的时间点。
  2. checking permissions:检查执行查询所需的权限的时间点。
  3. Opening tables:打开查询中涉及的表的时间点。
  4. init:初始化查询执行的时间点。
  5. System lock:获取系统锁的时间点。
  6. optimizing:查询优化器优化查询的时间点。
  7. statistics:收集统计信息的时间点。
  8. preparing:准备执行查询的时间点。
  9. executing:执行查询的时间点。
  10. Sending data:发送查询结果的时间点。
  11. end:查询执行结束的时间点。
  12. query end:查询结束的时间点,包括发送结果到客户端的时间。
  13. closing tables:关闭查询中涉及的表的时间点。
  14. freeing items:释放查询执行过程中使用的资源的时间点。
  15. cleaning up:清理查询执行过程中的临时数据和状态的时间点。

 
show profile 常用查询参数:

参数说明
ALL显示所有的开销信息。
BLOCK IO显示块 IO 开销。
CONTEXT SWITCHES上下文切换开销。
CPU显示 CPU 开销信息。
IPC显示发送和接收开销。
MEMORY显示内存开销信息。
PAGE FAULTS显示页面错误开销信息。
SOURCE显示和 source_function、source_file、source_line 相关的开销信息。
SWAPS显示交换次数开销信息。

 
日常开发需注意的结论:

  • ① converting HEAP to MyISAM:查询结果太大,内存不够,数据往磁盘上搬了。
  • ② Creating tmp table:创建临时表。先拷贝数据到临时表,用完再删除临时表。
  • Copying to tmp table on disk:把内存中临时表复制到磁盘上,警惕!
  • locked.

如果再 show profile 诊断结果中出现了以上四种结果中的一条,则SQL语句需要优化。

SHOW PROFILE 命令相关信息,也可以 通过查 information_schema 中的 profiling 数据表中查到。

 
EXPLAIN 相关的内容,请看系列文章四: 《MySQL 的索引分类和设计原则》
 
 
系列文章:

一: 《搞懂 MySql 的架构和执行流程》

二: 《从InnoDB索引的数据结构,去理解索引》

三: 《从 Hash索引、二叉树、B-Tree 与 B+Tree 对比看索引结构选择》

四: 《MySQL 的索引分类和设计原则》

五: 《MySQL 优化思路篇》
 
 
 
 
 
.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1163466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【每日OJ题—— 203. 移除链表元素(指针)】

每日OJ题——203. 移除链表元素(指针) 1.题目:203. 移除链表元素2.方法讲解2.1.解法一:2.1.1.图文分析2.1.2.代码实现2.1.3.提交结果展示 2.2.解法二:2.2.1.图文分析2.2.2.代码实现2.2.3.提交结果展示 1.题目&#xff…

期 货 跟 单/资 管 分 仓/镜像跟单/外 盘 分 仓的全面介绍!

期货跟单是经过科学的筛选找出合格的目标样本数据然后利用样本交易数据转化成未来实际账面利润的综合性过程。 期货跟单分为正向跟单和反向跟单,简单地说就是找出期高手正向跟随高手赚取收益或找出期货低手反向跟随赚取收益。 期货跟单软件是实现跟单过程自动化的工…

案例精选|聚铭综合日志分析系统夯实徐州公交集团网络环境基础

徐州市公共交通集团有限公司成立于1960年,现隶属徐州市交通控股集团有限公司,下辖7家运营公司,1家站务公司,8家直属单位及13个职能部室。运营车辆2364辆,线路177条,线路长度3560公里,日发送班次…

后端神器!代码写完直接调试!

Apipost推出IDEA插件非常省时高效,写完代码直接可以进行调试,而且支持生成接口文档,真是后端神器啊! 可以点击下方链接安装更新或在插件商店中搜索安装 下载链接:https://plugins.jetbrains.com/plugin/22676-apipos…

gdb调试内核

1、设置内核配置 CONFIG_KGDBy, CONFIG_DEBUG_INFO y, CONFIG_FRAME_POINTERy,CONFIG_STRICT_KERNEL_RWX is not set 屏蔽掉该选型 然后重新给板子烧录内核镜像 2、进入uboot,设置bootargs,添加kgdboc参数 setenv bootargs mem512M consolettyAMA0,…

通付盾WAAP网络与数据安全Agent深度解析

引言: ​随着现代Web应用程序的发展、应用程序环境和威胁的代际转变,应用的去中心化和分布式趋势明显,Bot和自动攻击的日益复杂化,移动应用使用量的增加和现代应用开发带来的API端点的激增,极大地扩展了威胁面&#x…

安达发|汽车零配件在生产上常常会遇到哪些困难?

汽车零配件在生产上常常会遇到许多困难,这些困难涉及到技术、质量、成本和供应链等多个方面。以下是一些常见的困难及其解决方案: 1.技术难题:汽车零配件的生产需要高度的技术支持,尤其是在新材料、新工艺和新设备的应用上。解决技…

多模态模型的语言幻觉和视觉幻觉

HALLUSIONBENCH: You See What You Think?Or You Think What You See? An Image-Context Reasoning Benchmark Challenging for GPT-4V(ision),LLaVA-1.5, and Other Multi-modality Models 论文链接 github地址 论文中提出大的多模态模型出现“语言幻觉”和视觉错觉由下面…

媒介盒子分享:提升软文转化率的秘诀

哈喽大家好,今天盒子来和大家分享的干货内容是如何提升软文转化率。 优质内容能够打动消费者,促使消费者完成购买行为,这就是软文的作用,软文想要提升转化率,要做好以下五个关键点。 一、 把握用户需求 只要把握用户…

MobaXterm使用VNC远程操作ubuntu桌面

目录 1 在ubuntu中安装vnc 2 设置ubuntu远程连接 3 MobaXterm中连接ubuntu的vnc 1 在ubuntu中安装vnc 参考:Ubuntu18.04~Ubuntu22.04安装并配置VNC_ubuntu安装vnc-CSDN博客 大体流程就是在ubuntu中安装vnc,设置密码,然后配置服务&#x…

Linux(CentOS)安装MySQL教程

主要参考链接 教程 1. 准备工作 1.1 安装CentOS虚拟机 教程点击 1.2 将CentOS虚拟机设置为静态IP,否则你每次重启虚拟机后连接数据库都要重新查IP 教程点击 1.3 如果有安装过MySQL,请先卸载MySQL 教程点击 1.4 虚拟机执行命令su切换到root账号(输…

「图像 cv2.seamlessClone」无中生有制造数据

上一篇博客【「图像 merge」无中生有制造数据 】写的是图片直接融合,此方法生成的图片相对而言比较生硬,虽然目标图片已经透明化处理过了,但是生成的图片依旧很假 除了上述上述的图片叠加融合之外,还有一种更加自然的融合方法&…

Java 性能优化之直接使用成员变量 VS 拷贝副本

背景 刷到一个大佬的 CSDN 博客,仔细看了一下性能优化专栏。联想到我们的日常开发工作,由于业务比较简单,很容就忽略性能问题。但是,性能优化的一下常见思路,也早有耳闻。看了一个 Java 性能优化的方法 「减少操作指令…

最新版一媒体7.3、星媒体、皮皮剪辑,视频MD ,安卓手机剪辑去重神器+搬运脚本+去视频重软件工具

最新版一媒体app安卓版介绍: 这是一款功能强大的视频搬运工具,内置海量视频编辑工具,支持一键智能化处理、混剪、搬运、还能快速解析和去水印等等,超多实用功能等着您来体验! 老牌手机剪辑去重神器,用过的…

导轨在数控机床中起哪些作用?

数控机床导轨是数控机床中重要的组成部分,其主要作用有以下几个方面: 1、导向和承载作用:数控机床的导轨是机床各部件运动的导向轨道,它引导机床各部件按照规定的轨迹和速度进行运动,同时承受和分散运动部件的重力和切…

The Sandbox 与 hi 建立合作伙伴关系

我们很高兴地宣布,Web 3 Neo-Banking 应用程序已正式宣布与 The Sandbox 达成合作。它将允许用户使用 hi 借记卡在店内和线上消费原生通证 SAND。 hi 为数百万人提供了一种新的 SAND 消费方式,使持卡人能够使用 hi 借记万事达卡在店内和线上的精选商户使…

VScode 全局搜索快捷键Ctrl+Shift+F失效 衝突

主要的原因是搜狗输入法的,简体和繁体的切换快捷键冲突了 去掉输入法的切换快捷键

CLion 2023.2.2(C ++ IDE智能代码编辑器)

CLion 2023是一款跨平台C/C集成开发环境(IDE)。它为Mac用户提供了高效的编程体验,帮助程序员们在Mac平台上进行C/C开发。 CLion 2023支持多种编译器和调试器,并具有强大的代码分析和导航功能。它还为用户提供了许多便捷的工具和插…

Cpolar和Qchan的使用与轻量级搭建:构建独特的个人图床并保护隐私

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景,在大量开发人员的努力下,已经开发出大…