如何从云平台学习优化mysql

前言

每个提供DBMS服务的云平台,背后都有一个/批顶级DBA,通过平台把这些顶级DBA批量复制,提供平台化服务。

作为用户可以更容易入手,入门门槛降低

作为非用户/野生DBA,可以从平台的白皮书中学习顶级DBA优化思路

厂商MySQL优化建议

AWS

Caching: innodb_buffer_pool_size

Database writes: innodb_flush_neighbors /innodb_log_file_size

read replica :SSD/MTS

合适的innodb_buffer_pool_size避免lru原因频繁读磁盘淘汰出内存( hotdataset)

数据写入考虑SSD的高性能,调整innodb_flush_neighbors=0不合并顺序刷新加快响应;设置innodb_log_file_size大小(1小时),减少checkpoint的频率,如ck被迫刷脏

读副本(从库)数据扩展读能力,在从库上使用SSD加快IO/使用MTS多线程回放

验证案例:



aliyun

RDS MySQL慢SQL问题
RDS MySQL内存使用问题
RDS MySQL I/O高问题
RDS MySQL活跃线程数高问题

RDS MySQL慢SQL问题

SQL异常:库表结构设计不合理、索引缺失、扫描行数太多 实例瓶颈:业务量持续增长超过设计上限,硬件老化,数据量一增长/分布倾斜 版本升级:执行计划变化,分析索引使用情况、扫描的行数等,预估查询效率,重构SQL语句、调整索引,提升查询效率 参数设置不当:innodb_buffer_pool_instances,join_buffer_size设置不合理 缓存失效:监控缓存命中率、QPS、TPS;使用Thread Pool、Fast Query Cache、自动SQL限流等功能提高性能 批量操作:大批量的数据导入、删除、查询操作;查看Binlog大小监控;在业务低峰期执行大批量操作,或将大批量操作拆分后分批执行 未关闭事务:突然变慢,查看CPU和IOPS的使用率并不高,而且活跃会话持续增多;检查导致事务冲突的锁并中止对应的SQL语句 定时任务:负载随时间有规律性变化,可能是存在定时任务;调整定时任务的执行时间,建议在业务低峰期执行