MySQL性能问题以及查找和处理
性能问题因素图
性能问题
1,需求问题及处理
问题:需求要求 innodb表(非myIsm)的千万级数据量的实时更新汇总,sql语句是:
select count(*) form 表
优化方案1:
创建统计表,每增加数据时统计表执行+1操作。弊端:数据库IO开销增加
优化方案2:
每日定时更新统计表的数据汇总。弊端:非实时更新数据汇总
优化方案3:
使用redis记录增加数据时统计字段执行+1操作,每日定时写入数据库
2,硬件问题
CPU1核、运行内存1G 压测并发能抗100
CPU8核、运行内存16G 压测并发能抗5000
3,数据库设计
a,冷热数据分离
b,text(64kb)、mediumtext(16MB)和longtext(4GB)字段切分使用varchar存储
c,innodb索引的添加和使用,优化sql语句where条件,使用explain语句进行索引命中率优化
4,架构设计
a,技术选项,如laravel可以使用swoole加速
b,数据库尽量不存储超文本数据和二进制多媒体文件(音频、视频、图片等)
c,使用缓存(客户端资源请求缓存(图片、js、css)、服务请求缓存(nginx)、服务逻辑缓存(php)、数据库请求缓存)
Linux性能查询命令以及管道
1,ps命令(查询进程)
进程CPU占用率倒叙前十进程:
ps -aux --sort=-%cpu|head -n11
进程运行内存占用率倒叙前十进程:
ps -aux --sort=-%mem|head -n11
进程运行内存占用倒叙前十进程:
ps -aux --sort=-rss|head -n11
查找MySQL的进程
ps -ef|grep mysqld
ps -ef|grep 3306
stat状态说明:
D //无法中断的休眠状态(通常 IO 的进程);
R //正在运行可中在队列中可过行的;
S //处于休眠状态;
T //停止或被追踪;
W //进入内存交换 (从内核2.6开始无效);
X //死掉的进程 (基本很少见);
Z //僵尸进程;
< //优先级高的进程
N //优先级较低的进程
L //有些页被锁进内存;
s //进程的领导者(在它之下有子进程);
l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ //位于后台的进程组;
2,top命令
说明参考:linux top命令详解(看这一篇就够了)_Steven.1的博客-CSDN博客_linux top命令详解
MySQL分页优化
问题:千万级的数据量表分页查询怎么优化?原本的语句:
select count(*) FROM 表 limit 9999999,10
方法1:通过主键子查询和主键搜索优化
select count(*) from 表 where id >= (select id FROM 表 limit 9999999,1) limit 10;
方法2:先查分页的id,再用in的查询
select count(*) from 表 where id in (select id FROM 表 limit 9999999,10);
如果报版本不支持的错误:This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
则改为
select * FROM 表 where id in (SELECT t.* FROM (select id FROM 表 limit 1) t);
方法3:增加查询字段的索引(针对单表优化)
索引类型:
btree索引(适合范围查询,【二叉树算法】,会降低数据写入速度,比hash索引还要慢一些)
hash索引(适合类别查询,【哈希算法】)
fulltext索引(适合长文本查询,【文本按字数拆分】,一般用es分布式搜索引擎代替)
R-tree索引
方法4:垂直(单表一百万的数据量)和水平分表(冷热数据拆分)
MySQL-IO的执行过程
MySQL性能问题以及查找和处理相关推荐
- 8核32g mysql性能_MySQL性能优化之参数配置
1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...
- Mysql性能优化二
接上一篇Mysql性能优化一 建立适当的索引 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千 ...
- MySQL 性能监控4大指标——第一部分
[编者按]本文作者为 John Matson,主要介绍 mysql 性能监控应该关注的4大指标. 第一部分将详细介绍前两个指标: 查询吞吐量与查询执行性能.文章系国内 ITOM 管理平台 OneAPM ...
- MySQL性能优化之参数配置
1.目的: 通过根据服务器目前状况,修改MySQL的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...
- MySQL 性能优化技巧
原文地址:MySQL 性能优化技巧 博客地址:www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 S ...
- mysql查看隔离模式_InnoDB 隔离模式对 MySQL 性能的影响
过去的几个月我写了两篇文章,一篇是InnoDB 事务历史相关的危险债务,另一篇是关于MVCC 可能导致MySQL严重的性能问题的真相.在这篇文章里我将讨论一个相关的主题 – InnoDB 事务隔离模式 ...
- MySQL性能突发事件问题排查技巧
导读:数据库是导致应用系统运行缓慢的常见原因.面对数据库引性能问题,很多开发者或者DBA却束手无策.本文作者经过多年的实际经验,整理了一些材料,将Linux环境下MySQL性能突发事件问题排查技巧分享 ...
- MySQL 性能调优专题一(索引数据结构详解)
索引的本质 索引是帮助MySQL 高效获取数据的排好序的数据结构. MySQL 默认使用的是B+Tree数据结构. 磁盘的读取原理 在介绍结构之前,先简单说下磁盘的读取原理: 操作系统读写磁盘的基本单 ...
- MySQL性能调优与架构设计——第4章 MySQL安全管理
第4章 MySQL安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...
最新文章
- mysql增加字段默认位置_MySQL语句增加字段,修改字段名,修改类型,修改默认值
- Linux 小知识翻译 - 「RAID」
- python用sqlite数据库,python 中使用sqlite数据库
- 【Mybatis】MyBatis 实现多表查询
- java linkedlist 用法_Java LinkedList addLast()用法及代码示例
- 3. 机器学习中为什么需要梯度下降?梯度下降算法缺点?_一起学习西瓜书2
- Open3d之表面重建
- Response.Write() Alert后页面布局改变
- 机器学习中的数学基础
- Allegro 17.4 PCB设计流程与经验
- 概念讲解:大地水准面 | 地球椭球体 | 参考椭球体 | 大地基准面 | 地图投影
- 改变世界的15个网站
- delphi实现FTP上传与下载
- linux系统双显卡切换显卡驱动,Linux 下双显卡切换
- 计算机找不到ac97前面板怎么办,计算机Win7系统前面板上的耳机插孔没有声音。解决方法(音频设置+前面板插入方法)...
- git push出现 remote: Support for password authentication was removed on August 13, 2021.
- 如何在低代码开发平台上,实施表单设计流程
- 有没有可以跨平台的待办事项清单软件推荐?
- 《信创数据库选型专项测试用例》分享
- 告诉你游戏服务器到底是什么