MySQL性能优化

MySQL性能优化

对于性能优化的思路

  • 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语句
  • 其次使用explain命令查看有问题的SQL的执行计划
  • 最后可以使用show profiles 查看有问题的SQL的性能使用情况

下面针对着三个方面一次展开讲解。

慢查询

如果不是指定需要优化某条SQL语句,则需要使用慢查询日值来查找出查询时间比较长的SQL语句。

慢查询的基本配置
slow_query_log 启动停止慢查询日志
slow_query_log_file 指定慢查询日值的存储路径及文件
long_query_time 指定记录慢查询日值SQL执行时间的阈值(单位:秒,默认10s)
log_queries_not_using_indexes 是否记录未使用索引的SQL
log_output 日志存放的地方

配置了慢查询后,它会记录符合条件的SQL,包括

  • 查询语句
  • 数据修改的语句
  • 已经回滚的SQL
慢查询的开启

MySQL的慢查询日志功能,默认是关闭的,需要手动开启。

临时开启慢查询功能
--查看是否开启慢查询功能
show variables like '%slow_query_log%'
--开启慢查询与设置超时参数
set global slow_query_log=ON;
set global long_query_time=1;
永久开启慢查询功能

永久开启慢查询功能,需要修改/etc/my.cnf配置文件,重启MySQL,这种永久生效

[mysqld]
slow_query_log =ON
slow_query_log_file =/var/log/mysql/slow.log
long_query_time =1
执行计划

执行计划关注的点

id:id越大越先执行
type:
key:实际上使用的索引
extra:重要的信息

根据执行计划我们可以看到索引利用的情况,可以考虑是否添加索引,是否语句有问题导致索引失效。

show profile
  1. 查看是否已经开启show profile

    show variables like 'profiling';
    
  2. 开启show profile

    set profiling = ON;
    
  3. 运行几条sql,以便于show profile的日志分析

  4. show profiles;

  5. 诊断SQL

    用于单独分析某条sql,查看某条sql的生命周期以及各占用多少时间。

    show profile all for query id;
    #id 为show profiles 查出来的某条记录的id
    #参数说明
    ALL --显示所有的开销信息
    BLOCK IO--显示块IO相关开销
    CONTEXT SWITCHES--上下文切换开销
    CPU --显示CPU相关开销信息
    IPC --显示发送和接受相关开销信息
    MEMORY --显示内存相关开销信息
    PAGE FAULTS --显示页面错误相关开销信息
    SOURCE --显示和Source_function,Source_file,Source_line相关开销的信息
    SWAPS --显示交换次数相关开销信息
    
  6. 日常开发需要注意的结论

    如果show profile … for query id;出现如下四个,则必须优化这条sql

    converting HEAP to MyISAM:查询结果台打,内存不够用都往磁盘上搬了
    Creating tmp table :创建临时表(拷贝数据到临时表,用完在删除)
    Copying to tmp table on disk:把内存中临时表复制到磁盘,危险!!
    locked
    
总结

以上的三个方法都是针对SQL语句进行的优化,有的时候优化SQL语句不能达到效果,这个时候我们要考虑从表结构,硬件(要区分是IO密集型应用,还是CPU密集型应用),架构上读写分离,表分区,表的划分,垂直分表,水平分表,等综合考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL性能优化是提升数据库查询和操作效率的关键步骤。以下是一些常见的MySQL性能优化技巧: 1. 使用合适的索引:在经常用于查询的列上创建索引,可以大大提高查询性能。避免创建过多的索引,因为过多的索引可能会导致性能下降。 2. 优化查询语句:编写高效的查询语句是提升性能的关键。避免全表扫描,尽量使用索引来加速查询。使用EXPLAIN命令来分析查询计划,检查是否存在慢查询。 3. 适当分区:对于大型表,可以根据数据的特点将其分成多个分区,以提高查询和维护性能。 4. 调整缓冲区大小:适当调整MySQL的缓冲区大小,如innodb_buffer_pool_size和key_buffer_size,以提高读写性能。 5. 合理配置服务器参数:调整MySQL服务器的参数,如max_connections、innodb_buffer_pool_instances等,以适应实际需求并提高性能。 6. 避免过度规范化:过度规范化可能导致频繁的表连接操作,降低性能。根据实际情况进行适当的冗余设计,以减少表连接操作。 7. 使用批量插入和更新:使用批量插入和更新语句,如INSERT INTO ... VALUES(...), (...), ...,可以减少客户端和服务器之间的通信次数,提高性能。 8. 定期维护和优化表:定期进行表优化、碎片整理、统计信息更新等数据库维护操作,以提高性能。 这些是一些常见的MySQL性能优化技巧,根据具体场景和需求,还可以进行其他优化措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值