关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » MySQL »MySQL性能优化实战

    MySQL性能优化实战

    2015-08-01 00:00:00 出处:ITJS
    分享

    过年这段时间由于线上数据库经常压力过大导致响应非常缓慢甚至死机,咬咬牙下大决心来解决效率不高的问题!

    首先是由于公司秉承快速开发原则,频繁上线,导致每次忽视了性能问题!日积月累,所以导致系统越来越慢,所以如果你的系统查询语句本来就优化的很好了可能参考意义不大!

    提取慢查询日志文件,应该在你的DataDir目录下面

    通过程序处理慢查询文件,将文件格式的慢查询导入到数据库中:

    1 mysql> desc slow_query;
    2 +---------------+-------------+------+-----+---------+-------+
    3 | Field         | Type        | Null | Key | Default | Extra |
    4 +---------------+-------------+------+-----+---------+-------+
    5 | Date          | varchar(32) | NO   |     |         |       | 查询发生的时间
    6 | user          | varchar(64) | NO   |     |         |       |
    7 | host          | varchar(64) | NO   |     |         |       |
    8 | content       | text        | NO   |     |         |       | 将Statement进行Mask后的语句,

    便于Group By 9 | query_time | int(11) | NO | | | | 查询所用时间,直接性能指标 10 | lock_time | int(11) | YES | | 0 | | 等待锁定的时间 11 | rows_sent | int(11) | YES | | 0 | | 返回的结果行数 12 | rows_examined | int(11) | YES | | 0 | | 扫描行数 13 | statement | text | YES | | NULL | | 实际查询语句 14 +---------------+-------------+------+-----+---------+-------+

    然后发挥您的想象力在这个表中尽力捕捉你想捕捉的,那类型语句压力最大、扫描行数最多、等锁最久……

    比如:

    优化后:

    mysql> select sum(query_time)/count(*),count
    (*),sum(query_time),min(Date),Max(Date) from slow where Date>'2008-02-20 22:50:52'

    and Date<'2008-02-21 17:34:35'; +--------------------------+----------+-----------------+---------------------+---------------------+ | sum(query_time)/count(*) | count(*) | sum(query_time) | min(Date) | Max(Date) | +--------------------------+----------+-----------------+---------------------+---------------------+ | 5.7233 | 2197 | 12574 | 2008-02-20 22:51:16 | 2008-02-21 17:34:10 | +--------------------------+----------+-----------------+---------------------+---------------------+ 1 row in set (0.09 sec)

    优化前:

    mysql> select sum(query_time)/count(*),count(*),sum(query_time),min(Date),Max(Date) from slow 

    where Date>'2008-02-17 22:50:52' and Date<'2008-02-18 17:34:35'; +--------------------------+----------+-----------------+---------------------+---------------------+ | sum(query_time)/count(*) | count(*) | sum(query_time) | min(Date) | Max(Date) | +--------------------------+----------+-----------------+---------------------+---------------------+ | 2.5983 | 16091 | 41810 | 2008-02-17 22:50:58 | 2008-02-18 17:34:34 | +--------------------------+----------+-----------------+---------------------+---------------------+ 1 row in set (0.15 sec)

    再比如,优化前:

    基本信息:

    慢查询统计从 2008-02-17 17:59:34 到2008-02-18 22:45:22时间段,接近29个小时的数据;

    总共有慢查询28914个,平均一小时有1000个慢查询;(花了一天优化降到每小时100个的样子了,成就感啊)

    所有慢查询耗费总时间75690秒;

    慢查询时间设置是大于2秒

    参数说明:

    sum--总执行时间(秒);

    count--执行次数;

    avg--平均执行时间(秒);

    content--类似SQL语句的表达通式,其中'DD'代表数字;

    statement--某一条具体执行的SQL语句

    由于访问时的锁,导致update非常慢:

    1 mysql> select count(*) as n,sum(query_time) as s, sum(query_time)/count(*) as avg,

    substring_index(statement,' ',2)

    as u from slow where statement like 'update%' and query_time>14 group by u; 2 +-----+------+---------+--------------------------+ 3 | n | s | avg | u | 4 +-----+------+---------+--------------------------+ 5 | 7 | 112 | 16.0000 | update conversation | 6 | 151 | 2413 | 15.9801 | update user | 7 | 4 | 65 | 16.2500 | update user_modification | 8 +-----+------+---------+--------------------------+

    说明程序中还是存在一些忘记释放事务锁的情况

    最耗费资源的10个查询:

    其中第1,2,5应该是同一类查询,这样的话这一类查询占总查询的一半以上,每分钟出现10个以上这样的慢查询,需要重点解决!

    1 mysql> select sum(query_time) as sum, count(*) as count, sum(query_time)/count(*) 

    as avg,statement from slow wher 2 e host like '%69.12.23.%' group by content order by sum desc limit 0,10G 3 *************************** 1. row *************************** 4 sum: 27326 5 count: 11681 6 avg: 2.3394 7 …………

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

    Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

    Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

    小米路由器买哪款?Miwifi热门路由器型号对比分析

    DESTOON标签(tag)调用手册说明(最新版)

    Destoon 9.0全站伪静态规则设置清单(Apache版)

    Destoon 9.0全站伪静态规则设置清单(Nginx版)

    Destoon 8.0全站伪静态规则设置清单(Apache版)

    Destoon 8.0全站伪静态规则设置清单(Nginx版)

    Destoon会员公司地址伪静态com/目录如何修改?两步轻松搞定,适合Nginx和Apache

    IT头条

    StorONE 的高效平台将 Storage Guardian 数据中心占用空间减少 80%

    11:03

    年赚千亿的印度能源巨头Nayara 云服务瘫痪,被微软卡了一下脖子

    12:54

    国产6nm GPU新突破!砺算科技官宣:自研TrueGPU架构7月26日发布

    01:57

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    技术热点

    12个Java长久占居主要地位的原因

    Swift如何调用Objective-C代码

    sql server表格变量的用法

    MySQL升级:从4.1到5.0

    SQL语句优化提升整体效能

    sql server安全的两层模型

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。