MySQL 性能调优实战指南:从诊断到优化全解析

引言

在日常的数据库运维工作中,我们经常需要对 MySQL 数据库进行诊断和性能分析。本文将介绍一套全面的 MySQL 诊断脚本,适用于 MySQL 8.0(兼容 8.0.15 及以上版本),涵盖事务锁分析、性能瓶颈定位、配置检查、连接状态监控和慢查询分析等多个方面。

一、事务与锁相关分析

1. InnoDB 引擎状态

SHOW ENGINE INNODB STATUS;

这条命令是诊断 InnoDB 问题的首要工具,它会返回包括事务、锁、死锁等在内的详细信息。输出内容分为多个部分:

  • 事务状态

  • 锁等待情况

  • 死锁信息(如果有)

  • 缓冲池统计

  • I/O 统计等

2. 锁等待关系查询

SELECTt_wait.processlist_id AS waiting_thread,r.sql_text AS waiting_query,t_block.processlist_id AS blocking_thread,b.sql_text AS blocking_query
FROMperformance_schema.data_lock_waits lw
JOINperformance_schema.data_locks req_lock ON lw.REQUESTING_ENGINE_LOCK_ID = req_lock.engine_lock_id
JOINperformance_schema.data_locks blk_lock ON lw.BLOCKING_ENGINE_LOCK_ID = blk_lock.engine_lock_id
JOINperformance_schema.threads t_wait ON req_lock.thread_id = t_wait.thread_id
JOINperformance_schema.threads t_block ON lw.BLOCKING_THREAD_ID = t_block.thread_id
JOINperformance_schema.events_statements_current r ON req_lock.thread_id = r.thread_id
JOINperformance_schema.events_statements_current b ON t_block.thread_id = b.thread_id;

这个查询可以清晰地展示当前数据库中的锁等待关系,包括:

  • 等待线程ID

  • 被阻塞的查询

  • 阻塞线程ID

  • 造成阻塞的查询

二、性能相关查询

1. 耗时最长的SQL

SELECT digest_text AS query,count_star AS exec_count,sum_timer_wait / 1000000000 AS total_latency_seconds
FROM performance_schema.events_statements_summary_by_digest
ORDER BY sum_timer_wait DESC
LIMIT 20;

这个查询可以帮助我们找出执行耗时最长的SQL语句,是性能优化的首要目标。

2. 扫描行数较多的SQL

SELECT digest_text AS query,count_star AS exec_count,sum_rows_examined,sum_rows_sent
FROM performance_schema.events_statements_summary_by_digest
WHERE sum_rows_examined > 100000
ORDER BY sum_rows_examined DESC
LIMIT 20;

这个查询可以找出那些扫描了大量行但返回较少数据的SQL,这类SQL通常可以通过添加合适的索引来优化。

三、配置检查

MySQL的配置对性能有重大影响,以下是一些关键配置项的检查:

InnoDB 缓冲池配置

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'innodb_buffer_pool_instances';
SHOW VARIABLES LIKE 'innodb_log_file_size';
SHOW VARIABLES LIKE 'innodb_log_buffer_size';
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';

连接与并发相关

SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'thread_cache_size';

临时表与排序缓冲区

SHOW VARIABLES LIKE 'tmp_table_size';
SHOW VARIABLES LIKE 'max_heap_table_size';
SHOW VARIABLES LIKE 'join_buffer_size';
SHOW VARIABLES LIKE 'sort_buffer_size';

四、连接情况统计

SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Threads_created';
SHOW STATUS LIKE 'Aborted_connects';
SHOW STATUS LIKE 'Connections';

这些统计信息可以帮助我们了解数据库的连接情况:

  • Threads_created 过高可能表示 thread_cache_size 不足

  • Aborted_connects 表示异常连接尝试次数

五、慢查询分析

SHOW STATUS LIKE 'Slow_queries';
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';

慢查询是性能问题的重要指标,这些命令可以帮助我们:

  • 查看慢查询总数

  • 检查慢查询日志是否开启

  • 查看慢查询时间阈值

  • 检查是否记录未使用索引的查询

结语

这套 MySQL 诊断脚本涵盖了数据库性能分析的多个关键方面,可以帮助DBA快速定位问题。建议定期运行这些诊断命令,特别是在性能问题出现时,可以为我们提供宝贵的第一手资料。

记住,数据库性能优化是一个持续的过程,需要结合这些诊断信息和实际业务场景来制定优化策略。

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

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

相关文章

8. 状态模式

目录一、应用背景二、状态模式2.1 解决的问题2.2 角色2.3 实现步骤三、通用设计类图四、实现4.1 设计类图4.2 状态转换图4.3 代码实现一、应用背景 某对象发生变化时,其所能做的操作也随之变化。应用程序的可维护性和重用性差代码的逻辑较复杂 二、状态模式 2.1 …

php语法--foreach和in_array的使用

文章目录foreach基础语法:案例1:引用传递模式:嵌套数组处理:避免在循环中计算数组长度:使用引用减少内存拷贝:打印数组in_array基础使用严格使用foreach 基础语法: foreach ($iterable as $va…

ES6模块详解:核心语法与最佳实践

以下是 EMAScript 6(ES6)模块规范的核心要点及细节解析: 📦 一、核心语法导出(export) 命名导出:支持导出多个具名成员。export const a 1; export function b() { /* ... */ } // 或集中导出 …

Python day25

浙大疏锦行 Python day25. 内容: 异常处理,在日常的编码工作过程中,为了避免由于各种bug导致的异常情况,我们需要引入异常处理机制,它的工作场景是当程序运行出现意外时,可以根据编码规则处理响应的错误。…

mac llama_index agent算术式子计算示例

本文通过简单数学计算,示例llama_index使用agent解决复杂任务过程。 假设mac本地llama_index环境已安装,过程参考 mac测试ollama llamaindex-CSDN博客 测试mac笔记本内存8G,所以使用较小LLM完成示例。 ollama pull qwen3:1.7b qwen3:1.7b能…

uni-app小程序云效持续集成

创建项目 必须是 cli 命令行创建的 uni-app 小程序项目参考uni-app官方构建命令: npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project生成小程序代码上传密钥 管理-开发设置-小程序代码上传生成的文件放在根目录即可 安装持续集成插件 pnpm install uni-mi…

uniapp+高德地图实现打卡签到、打卡日历

一、注册高德地图。应用管理创建应用&#xff0c;分别添加Andriod平台、Web服务、Web端、微信小程序四种类型的key。二、考勤规则打卡地点选择位置代码&#xff1a;<script setup lang"ts"> import { onMounted, onUnmounted, reactive, ref, watchEffect } fr…

CentOS 7.9 + GCC9 离线安装 IWYU(Include What You Use)

本教程适用于 离线环境下在 CentOS 7.9 系统中使用 GCC 9 离线安装 IWYU 的完整步骤&#xff0c;涵盖 Clang 11.1.0 编译、IWYU 构建以及头文件自动优化流程。&#x1f4e5; 一、准备安装包请提前下载以下源码包&#xff08;可通过在线机器提前下载&#xff0c;再传输到离线环境…

基于Dapr Sidecar的微服务通信框架设计与性能优化实践

基于Dapr Sidecar的微服务通信框架设计与性能优化实践 一、技术背景与应用场景 随着微服务架构的广泛应用&#xff0c;分布式系统中服务间通信、可观察性、可靠性等问题日益凸显。Dapr&#xff08;Distributed Application Runtime&#xff09;作为一个开源的微服务运行时&…

Claude Code 超详细完整指南(2025最新版)

&#x1f680; 终端AI编程助手 | 高频使用点 生态工具 完整命令参考 最新MCP配置 &#x1f4cb; 目录 &#x1f3af; 快速开始&#xff08;5分钟上手&#xff09;&#x1f4e6; 详细安装指南 系统要求Windows安装&#xff08;WSL方案&#xff09;macOS安装Linux安装安装验…

【lucene】SegmentReader初始化过程概述

readers[i] new SegmentReader(sis.info(i), sis.getIndexCreatedVersionMajor(), IOContext.READ); 这个方法已经把所有的文件都读完了么&#xff1f;没有“读完”&#xff0c;但已经**全部“打开”**了。| 动作 | 是否发生 | |---|---| | **打开文件句柄 / mmap** | ✅ 立即完…

通俗理解主机的BIOS和UEFI启动方式

“对于 22.04 版本&#xff0c;这些操作说明应适用于通过 BIOS 或 UEFI 两种方式创建和运行启动盘。”我们来详细解释一下这句话的含义&#xff0c;这句话的核心意思是&#xff1a;你按照这个教程制作出来的 Ubuntu U 盘&#xff0c;将拥有极佳的兼容性&#xff0c;无论是在老电…

Canal 1.1.7的安装

数据库操作的准备 1、开启 Binlog 写入功能&#xff0c;配置 binlog-format 为 ROW 模式&#xff0c;my.cnf 中配置如下: vi /etc/my.cnf [mysqld] log-binmysql-bin # 开启 binlog binlog-formatROW # 选择 ROW 模式 server_id1 # 配置 MySQL replaction 需要定义&#xff0c;…

python---类型转换

文章目录1. 基本类型转换函数int() - 转换为整数float() - 转换为浮点数str() - 转换为字符串bool() - 转换为布尔值2. 其他类型转换list() - 转换为列表tuple() - 转换为元组set() - 转换为集合&#xff08;去重&#xff09;dict() - 转换为字典3. 注意事项1. 兼容性&#xff…

JVM terminated. Exit code=1

出现JVM terminated. Exit code1错误通常是因为 Eclipse 所需的 Java 版本与系统中配置的 Java 版本不匹配。从错误信息中可以看到关键线索&#xff1a;-Dosgi.requiredJavaVersion21&#xff0c;表示此 Eclipse 版本需要 Java 21 或更高版本&#xff0c;但系统当前使用的是 Ja…

20250727-1-Kubernetes 网络-Ingress介绍,部署Ingres_笔记

一、NodePort存在的不足 1. 四层负载均衡  实现技术: 基于iptables和ipvs实现 OSI层级: 位于传输层(第四层) 转发依据: 基于IP地址和端口进行转发 特点: 只能看到IP和端口信息 无法识别应用层协议内容 配置简单但功能有限 2. 七层负载均衡 1)七层负载均衡的概念 …

Javaweb————HTTP的九种请求方法介绍

❤️❤️❤️一.HTTP1.0定义的三种请求方式介绍 &#x1f3cd;️&#x1f3cd;️&#x1f3cd;️&#xff08;1&#xff09;GET请求 作用&#xff1a;向服务器获取资源&#xff0c;比如常见的查询请求 应用场景&#xff1a;绝大多数场景&#xff0c;比如我们访问商城首页查看图…

C++day06(练习题)

循序渐进-基础训练 格式化输入输出 【描述】格式化输入输出练习输入三个整数和一个浮点数&#xff0c;浮点数需要保留的不同小数点后面的数字。 【输入描述】三个正整数以及以一个浮点数 【输出描述】三个整数以及保留不同位数的浮点数 【样例输入】 1 2 3 9.12345678 【样例输…

基于大模型的预训练、量化、微调等完整流程解析

随着大语言模型&#xff08;LLM&#xff09;的飞速发展&#xff0c;模型的训练、部署与优化成为了AI工程领域的重要课题。本文将从 预训练、量化、微调 等关键步骤出发&#xff0c;详细介绍大模型的完整技术流程及相关实践。1. 预训练&#xff08;Pre-training&#xff09; 1.1…

AI入门学习-模型评估示例讲解

from sklearn.metrics import classification_report, confusion_matrix from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_classification# 生成示例分类数据 # n_samples: 样本…