影响MySQL性能的几个要素
- 系统CPU内存 (需要购买性能优秀的机器)
- I/O,mysql进程状态,mysql服务器周期变化 => mysql版本 以及 电脑处理
- 业务 数据库设计 => 六大范式 (三大范式) => join
1、范式:在性能角度来说:不是范式越高越好 适量选择与冗余一些字段
2、项目中sql语句编写以及索引的建立
3、业务分析
需求变更( 设计的时候可以多考虑 提高 程序 扩展性)
业务架构-程序代码-!-SQL 分层 服务化 微服务服务
三大范式简介
- 1NF
属性的原子性约束。如addr能分成省市区就不要放在一起
关系型数据库都要遵循第一范式 - 2NF
记录的唯一性约束。每一列都和主键有关。
规定每一列都是主键的属性,完全依赖。
和类的单一性原则类似,针对实体对象的属性 - 3NF
字段冗余性的约束。
每一列都与主键直接相关。
规定了数据之间的关联关系
mysql优化思路
数据库-数据表的设计结构->sql语句优化->数据库参数配置(事务日志)->源头(源码角度 c++)(扩展)->硬件(堆配置)
性能优化:就是合理的利用可用的资源
可以使用 鱼骨图 来思考MySQL的性能问题
Linux常用的系统性能分析工具
ps,top,vmstat,sar,free
MySQL性能测试
show status
show processlist
show variables
mysqlslap
mysqlslap是mysql自带的基准测试工具,
优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较.
mysqlslap为mysql性能优化前后提供了直观的验证依据,建议系统运维和DBA人员应该掌握一些常见的压力测试工具,才能准确的掌握线上数据库支撑的用户流量上限及其抗压性等问题。
mysqlslap -h 127.0.0.1 -u root -p -c 100 -i 1 --create-schema tipaskx -q "select count(*) from ask_users" -e innodb --number-of-queries=5000
第三方的测试工具
- ab
ab官网 http://httpd.apache.org/docs/2.0/programs/ab.html
ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,因此是某些DDOS攻击之必备良药,老少皆宜。自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。 - JMeter
JMeter是一个java应用程序,可以加载其他应用并测试其性能。它虽然是设计用来测试Web应用的,但也可以用于测试其他诸如FTP服务器,或者通过JDBC进行数据库查询测试。
JMeter比ab要复杂的多。例如他可以通过控制预热时间等参数更加灵活地模拟真实用户的访问。JMeter拥有绘图接口,还可以对测试进行记录,然后离线重演测试结果。
注意需要下载java的jdbc jar包 -