0

0

mysql优化的思路介绍

不言

不言

发布时间:2019-03-22 11:13:50

|

2769人浏览过

|

来源于segmentfault

转载

本篇文章给大家带来的内容是关于mysql优化的思路介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

数据库层面问题解决思路

一般应急调优的思路:
针对突然的业务办理卡顿,无法进行正常的业务处理!需要立马解决的场景!

1、show processlist

2、explain select id ,name from stu where name='clsn'; # ALL id name age sex
select id,name from stu where id=2-1 函数 结果集>30;
show index from table;

3、通过执行计划判断,索引问题(有没有、合不合理)或者语句本身问题

4、show status like '%lock%'; # 查询锁状态
kill SESSION_ID; # 杀掉有问题的session

常规调优思路:
针对业务周期性的卡顿,例如在每天 10-11 点业务特别慢,但是还能够使用,过了这段时间就好了。

1、查看 slowlog,分析 slowlog,分析出查询慢的语句。

2、按照一定优先级,进行一个一个的排查所有慢语句。

3、分析 top sql,进行 explain 调试,查看语句执行时间。

4、调整索引或语句本身。

  1. 系统层面

cpu方面:
vmstat、sar top、htop、nmon、mpstat

内存:
free 、ps -aux 、

IO 设备(磁盘、网络):
iostat 、 ss 、 netstat 、 iptraf、iftop、lsof、

vmstat 命令说明:
Procs:r 显示有多少进程正在等待 CPU 时间。b 显示处于不可中断的休眠的进程数量。在等待 I/O

Memory:swpd 显示被交换到磁盘的数据块的数量。未被使用的数据块,用户缓冲数据块,用于操作系统的数据块的数量

Swap:操作系统每秒从磁盘上交换到内存和从内存交换到磁盘的数据块的数量。s1 和 s0 最好是 0

Io:每秒从设备中读入 b1 的写入到设备 b0 的数据块的数量。反映了磁盘 I/O

System:显示了每秒发生中断的数量(in)和上下文交换(cs)的数量

Cpu:显示用于运行用户代码,系统代码,空闲,等待 I/O 的 CPU 时间

iostat 命令说明
实例命令: iostat -dk 1 5
iostat -d -k -x 5 (查看设备使用率(%util)和响应时间(await))

tps:该设备每秒的传输次数。“一次传输”意思是“一次 I/O 请求”。多个逻辑请求可能会被合并为“一次 I/O 请求”。

iops :硬件出厂的时候,厂家定义的一个每秒最大的 IO 次数,"一次传输"请求的大小是未知的。

kB_read/s:每秒从设备(drive expressed)读取的数据量;

KB_wrtn/s:每秒向设备(drive expressed)写入的数据量;

kB_read:读取的总数据量;

kB_wrtn:写入的总数量数据量;这些单位都为 Kilobytes。

  1. 系统层面问题解决办法

你认为到底负载高好,还是低好呢?
在实际的生产中,一般认为 cpu 只要不超过 90% 都没什么问题 。

当然不排除下面这些特殊情况:
问题一:cpu 负载高,IO 负载低
内存不够

磁盘性能差

SQL 问题 ------>去数据库层,进一步排查 sql 问题

IO 出问题了(磁盘到临界了、raid 设计不好、raid 降级、锁、在单位时间内 tps 过高)

tps 过高: 大量的小数据 IO、大量的全表扫描

问题二:IO 负载高,cpu 负载低
大量小的 IO 写操作:

autocommit ,产生大量小 IO

IO/PS 磁盘的一个定值,硬件出厂的时候,厂家定义的一个每秒最大的 IO 次数。

大量大的 IO 写操作

SQL 问题的几率比较大

问题三:IO 和 cpu 负载都很高
硬件不够了或 SQL 存在问题

五、基础优化

  1. 优化思路

定位问题点:
硬件 --> 系统 --> 应用 --> 数据库 --> 架构(高可用、读写分离、分库分表)

处理方向:
明确优化目标、性能和安全的折中、防患未然

  1. 硬件优化

主机方面:
根据数据库类型,主机 CPU 选择、内存容量选择、磁盘选择

平衡内存和磁盘资源

DESTOON B2B网站管理系统
DESTOON B2B网站管理系统

DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。

下载

随机的 I/O 和顺序的 I/O

主机 RAID 卡的 BBU(Battery Backup Unit)关闭

cpu 的选择:
cpu 的两个关键因素:核数、主频

根据不同的业务类型进行选择:

cpu 密集型:计算比较多,OLTP 主频很高的 cpu、核数还要多

IO 密集型:查询比较,OLAP 核数要多,主频不一定高的

内存的选择:
OLAP 类型数据库,需要更多内存,和数据获取量级有关。

OLTP 类型数据一般内存是 cpu 核心数量的 2 倍到 4 倍,没有最佳实践。

存储方面:
根据存储数据种类的不同,选择不同的存储设备

配置合理的 RAID 级别(raid 5、raid 10、热备盘)

对与操作系统来讲,不需要太特殊的选择,最好做好冗余(raid1)(ssd、sas 、sata)

raid 卡:主机 raid 卡选择:
实现操作系统磁盘的冗余(raid1)

平衡内存和磁盘资源

随机的 I/O 和顺序的 I/O

主机 RAID 卡的 BBU(Battery Backup Unit)要关闭

网络设备方面:
使用流量支持更高的网络设备(交换机、路由器、网线、网卡、HBA 卡)

注意:以上这些规划应该在初始设计系统时就应该考虑好。

  1. 服务器硬件优化

1、物理状态灯:

2、自带管理设备:远程控制卡(FENCE 设备:ipmi ilo idarc),开关机、硬件监控。

3、第三方的监控软件、设备(snmp、agent)对物理设施进行监控

4、存储设备:自带的监控平台。EMC2(hp 收购了), 日立(hds),IBM 低端 OEM hds,高端存储是自己技术,华为存储

  1. 系统优化

Cpu:
基本不需要调整,在硬件选择方面下功夫即可。

内存:
基本不需要调整,在硬件选择方面下功夫即可。

SWAP:
MySQL 尽量避免使用 swap。阿里云的服务器中默认 swap 为 0

IO :
raid、no lvm、 ext4 或 xfs、ssd、IO 调度策略

Swap 调整(不使用 swap 分区)

这个参数决定了 Linux 是倾向于使用 swap,还是倾向于释放文件系统 cache。在内存紧张的情况下,数值越低越倾向于释放文件系统 cache。当然,这个参数只能减少使用 swap 的概率,并不能避免 Linux 使用 swap。

修改 MySQL 的配置参数 innodb_flush_method,开启 O_DIRECT 模式。这种情况下,InnoDB 的 buffer pool 会直接绕过文件系统 cache 来访问磁盘,但是redo log 依旧会使用文件系统 cache。值得注意的是,Redo log 是覆写模式的,即使使用了文件系统的 cache,也不会占用太多

IO 调度策略:

  1. 系统参数调整

Linux 系统内核参数优化:

用户限制参数(MySQL 可以不设置以下配置):

  1. 应用优化

业务应用和数据库应用独立,防火墙:iptables、selinux 等其他无用服务(关闭):

安装图形界面的服务器不要启动图形界面 runlevel 3,另外,思考将来我们的业务是否真的需要 MySQL,还是使用其他种类的数据库。用数据库的最高境界就是不用数据库。

六、数据库优化
SQL 优化方向:
执行计划、索引、SQL 改写

架构优化方向:
高可用架构、高性能架构、分库分表

  1. 数据库参数优化

调整:
实例整体(高级优化,扩展)

连接层(基础优化)
设置合理的连接客户和连接方式

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的MySQL教程视频栏目!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

707

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

327

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

349

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1201

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

360

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

798

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

581

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

422

2024.04.29

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 812人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号