影响mysql性能的因素
1.商业需求对性能的影响
----->商业需求需要合理
----->论坛(小的需求)
----->实时统计帖子的总量 select count(*) 即可 如果现在标中已经有千万条记录
----->这样的一个查询就会有很大的消耗 成为性能的瓶颈
----->帖子的数目专门一张表一个字段来存放,那么该表就会变成高并发
即使innodb存储引擎也不行,因为行锁,而帖子数据就只有一行。无法应对高并发操作又会成为瓶颈
----->很多的统计信息都是准实时的而不是实时统计
----->网站的一些数量信息、分页信息、排序信息等等
一般都不是实时的而是准实时的。
----->在公司内部应该有一个评估来评估需求是否合理
----->产品经理提出新需求的时候,一定要给出预期的收益指标,以备上线后计算投入产出比率
----->在项目进行过程中,要详细记录投入(人了、硬件等)
----->上线之后实际的收益值
----->总结出一些规则和规律
2.系统架构(存储架构)及实现对性能的影响
---->数据存储架构要合理(后面会详细讲解 --->特别是分布式的情况)
---->架构合理才是雪中送炭的,然后才是其它方面的优化
---->你的数据是否都适合放在mysql中
----->流水队列数据
----->二进制多媒体数据
----->超大的文本数据
----->其它 文件、图片等等
----->是否做适当的缓存
---->数据库访问及其频繁的数据 是否做了热点缓存
---->数据库Server本身的缓存是否合理使用
---->什么样的数据是否放在缓存当中
---->热点数据
---->系统各种配置及规则数据
---->活跃用户的基本信息数据
---->准实时的统计信息数据
---->... ....
----->数据库设计、数据query语句的实现等等
3.query语句对数据库性能的影响(后面会详细讲解)
---->开发人员不能只关注查询结果不关注查询过程
--->例:每个用户查询各自相册列表(假设每个列显示10张相片),能够在相片后有留言,
我们要查看留言的数量。
--->方案1: select id,subject,url from photo where user_id=? limit 10
通过第一步的结果循环10次执行select count(*) from photo_comment where photo_id=?
--->方案2 :
第一步和上面是一样的
第二步通过程序拼装上面的到的10个photo_id,通过in查询
select photo_id,count(*) from photo_comment where photo_id in(?)group by photo_id"
一次得到10个photo_id所有的回复数量
---->简要分析的方案2更简单一些。
----->将来要具体看执行计划和性能损耗情况(cpu,io的损耗情况)
----->需要了解mysql整个查询的原理,性能损耗情况等情况在后续的章节中会详细讲解。
4.Schema设计对系统性能影响(后续章节也会详细讲解)
---->论坛帖子案例(假设现在是高并发的一个论坛系统)
---->高并发的论坛最高的并发在哪里?
----->最高的并发是查看帖子标题列表,现在往往帖子标题后面会跟一个作者的昵称
这里就需要有一个join查询
----->在高并发的操作当中是不应该用join查询的
----->我们会在帖子表中冗余存放作者昵称
---->违反了范式 ---->现在的设计经常范式和非范式结合使用
5.硬件环境对数据库的性能的影响
---->如何去选择服务器
---->添加后者购买数据库服务器有什么标准吗
---->很多企业在购买服务器的时候需要负责人员提出方案 该方案如何写。
----->了解TPC
----->TPMC---衡量服务器的处理能力的
----->如何去选择具体的硬件
---->OLTP系统
---->并发量大,整体数据量多,每次访问数据较少,访问数据比较离散,
有活跃数据并且比例不大。
---->要大的内存活跃数据可以Cache,访问频繁每次访问数据少
那么对磁盘的IOPS表现要好,吞吐量是次要的。并发高,CPU要求高
网络交互频繁网络设备要求较高
------>OLAP的系统
---->数据量大,并发访问不多,每次访问需要检索的数据都比较多,访问集中,
没有明显的活跃数据
---->尽可能大的磁盘吞吐量,并发不多,CPU要求不高。
----->总结:要根据自己系统的特性选择更适合更廉价的硬件设备。