增加物理内存,并调大MySQL的各种缓冲分配参数值
缺点:
临时解决方案需要持续关注内存使用量,且需要频繁地操作,而且,这是挖东墙补西墙的做法
增加物理内存,除了增加成本之外,还会对业务造成一定影响(服务器需要关机)
1.3. 单个事务过大导致查询性能低下
传统解决方案:将大事务拆分成小事务
无法拆分的大事务,在硬件规格不变的前提下,可以对读写事务分别做一些优化。例如:写可以在执行前,
会话级别将binlog格式修改为statement,以减少主从实例之间传输的binlog日志量;读事务可以拆分到只
读从库中,以减少主库的访问压力
缺点:
将大事务拆分成小事务,并不会让原本大事务需要完成的工作任务少做一些,而是拆分成小事务之后,降低
对其他并行事务的影响(例如:大事务可能长时间的持有锁、二进制日志文件句柄资源等,从而导致长时间
的阻塞其他并行事务,导致并行事务执行失败)
1.4. 并发查询数过高导致数据库实例负载过高
传统解决方案:
杀死高负载查询会话、后续优化慢查询
读写分离,并增加只读从库,扩展只读能力
数据拆分,将数据分散到多个数据库实例中,扩展读/写能力。
* 对大表做数据拆分,先做垂直拆分(按业务拆分,将不同业务的字段拆分到不同的表、或不同的数据
库、甚至不同的实例中),然后做水平拆分(对于无法继续拆分字段的表,如果数据量仍然大到影响性能,则
可能还需要以不超过1000W行数据量的标准继续对大表执行拆分,即就是我们常说的数据分片)
缺点:无论是垂直拆分还是水平拆分,都需要应用配合相应的改造,而且,数据拆分之后,会引入新的痛
点,类似如下(虽然这些痛点可以通过技术改造来解决,但成本过高,而且需要较长时间来磨合才能够使其
达到稳定,另外,可能需要和业务深度契合改造,不同的客户可能需要做不一样的改造):跨分片访问,导
致不得不启用分布式事务来保证跨分片访问的数据一致性,而分布式事务本身除了实现起来有一定工程量之
外,应用本身也需要配合改造
如果分片跨了不同的实例,则无法做到数据的全局一致性备份,要实现跨实例多数据分片的全局数据一致性
备份,需要中间件、数据库都做一些改造
不受事务控制的DDL语句,无法通过分布式事务来保证数据的全局一致性,因此,还需要额外的机制来保证
数据的全局一致性
如果分片数据出现倾斜、或者访问负载出现倾斜,则还可能需要频繁地做分片数据的迁移(将大数据量的分
片、高负载实例中的分片,迁移到较为空闲的实例中)
2、计算存储是如何解决数据库的瓶颈与痛点的?
针对计算存储,我这里列出3个我认为比较重要的特性,先对其原理做简单的介绍(关于相关原理的详细介
绍,可参考文末的链接),然后再说说这些特性是如何解决上述数据库的瓶颈与痛点的
评论