1.影响Mysql性能的因素
- 数据库服务器的硬件
- 服务器所使用的操作系统
- 数据存储引擎(MyISAM不支持事务,表级锁。InnoDB支持事务,行级锁)
- 数据库参数配置(影响比前三个大)
- 数据库表结构的涉及和SQL语句(比前面四个都大很多)所以重点就是这个
2.数据库服务器硬件
- CPU资源
如何选择CPU?最理想的当然是最高的频率和最大的核心数,但是成本太TM高了。
所以从应用服务入手,看看我们的应用是不是CPU密集型的应用,如果是那么我们将选择更好的CPU而不是更多的CPU。 并且SQL不支持多个CPU进行并发的处理,所以多个CPU对于提高sql的效率没有多大的帮助。接下来还要了解我们的系统的并 发量如何,并发量大那么一个CPU处理一个SQL,多个CPU处理多个SQL,此时CPU的数量就比频率显得更加的重要。 MYSQL5.6以上对多核CPU比较好的支持。系统要选64位的。
- 可用内存大小
内存对读写读写都有影响,尤其是对读的影响明显,虽然写入不可避免要操作磁盘,但是缓存可以把多次数据写入合并为一次的数据写入,不同数据库的存储引擎在缓存中存的数据也是不一样的。这里如何选择内存呢,内存的主频和CPU的主频是类似的,最好选择服务器主板所支持频率最高的内存。大小就考虑比热数据大很多的内存。还要考虑业务数据增长。
- 磁盘的选择
磁盘都有哪些?
1.如何选择传统机器硬盘?传统机器硬盘容量大,访问慢。
2.RAID技术增加传统机械硬盘的性能。
3.固态存储(SSD和PCI-E)
相比于传统机械硬盘有更好的随机读写性能,第二就是能支持更好的并发,固态磁盘更容易损坏。
数据库中常用的是SSD(固态硬盘),使用SATA接口,可以直接替换传统的磁盘,而不需要特殊的驱动接口,这是他的速度受制于SATA接口,所以替换的时候要对着接口来,其次SSD也支持RAID技术。因为接口还是SATA。
PCI-E(Fusion-IO一种使用闪存技术的PCI-E卡设备),无法使用SATA接口,需要特殊的驱动和接口,这个不受SATA的接口限制,相比于SSD有更好的性能。PCI-E设备还需要服务器的大量的内存,这个也不建议使用RAID
固态存储的使用场景,适合使用存在大量随机IO的场景,适合适用于单线程负载的IO瓶颈,例如如果只有一块固态存储设备应该把它放到Mysql主从设备的从节点上,因为数据的复制时单线程的。
4.使用网络存储
网络储存所适合的一些场景,因为顺序储存的性能好,但是随机的性能不好,所以他不适合Mysql的存储。适合数据库的备份文件,最大的性能时带宽。
3.操作系统的影响
win的大小写不敏感,linux对大小写敏感,CentsOS的参数优化。
4.MySQL的存储引擎对性能的影响
- MySql的体系架构 插件式存储引擎
MyISAM:
Innodb:
设置为off后:
1.TPS和QPS
TPS 即 Transactions Per Second 的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。
QPS:全名 Queries Per Second,意思是“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
2.什么影响SQL的性能?
- 超高的qps和tps
- 大量的并发和超高的CPU使用率(导致数据库连接池占满和CPU资源耗尽宕机)
- 磁盘IO,磁盘IO的性能突然下降(可能有其他影响磁盘性能的计划任务)
- 网卡流量,可以减从服务器的数量,和缓存分级,避免前端大量缓存的失效,避免select * ,不需要的字段消耗网络流量,分离业务网络和管理网络
3.大表带来的影响
一个表的数据超过千万行,就会对数据库的性能造成影响。
解决办法:
大表导致慢查询,大表建里索引很慢
百分之八十可以优化SQL
4.大事务带来的影响
解决办法: