数据库优化
数据库选型
阿里云拥有丰富的云数据库产品选项,涵盖关系型数据库、非关系型数据库、数据仓库、数据库生态工具四大板块,可以为企业数据生产和集成、实时处理、分析与发现、开发与管理提供全链路生命周期的服务。主要关系型数据库包括云数据库 RDS MySQL 版、云数据库 RDS PostgreSQL 版、云数据库 RDS SQL Server 版、云原生数据库 PolarDB MySQL 版、云原生数据库 PolarDB PostgreSQL 版、云原生数据库 PolarDB 分布式版等,主要NoSQL数据库包括云数据库 Tair(兼容 Redis)、云数据库 MongoDB 版、云原生内存数据库 Tair和云原生多模数据库 Lindorm等。数据库的选择需要根据客户上云以及上云后不同业务发展阶段、不同访问量、业务规模、不同业务特点来综合考虑,以更好地适配客户的业务诉求。以MySQL为例,比如在初创或刚上云的阶段,利用RDS MySQL 高可用实例及其主从复制满足基础容灾需求,随着业务发展生产环境可能需要利用RDS读写分离来承载 OLTP 读写压力,在高并发、机制弹性、海量存储的场景下可能需要PolarDB 系列来满足业务要求。
常见问题及优化
慢SQL问题及优化:导致慢SQL的原因很多,需要根据实际情况来优化。常见问题如下:SQL架构设计和库表索引设计会影响查询性能;不合理的设计,如表结构设计不合理、索引缺失、扫描行数过多等,都可能会造成慢SQL,根据实际业务情况优化SQL;数据库实例选型不满足业务增长的需求,造成资源满负荷达到实例瓶颈,需要升级实例规格;如果有大批量的数据查询和导入等操作,也会导致SQL执行变慢,可以考虑在业务低峰期执行大批量操作,或将大批量操作拆分后分批执行。上面是一些常见问题,更多的问题和优化可以利用数据库自治服务 DAS(Database Autonomy Service)来完成。
活跃线程堆积问题及优化:如果出现大量的活跃连接数,说明出现了SQL堆积和响应变慢,严重时会导致实例停止响应。同时活跃连接消耗连接池,当达到上限时会导致新的连接无法建立,数据库无法处理新的应用请求。常见问题如下:慢SQL堆积问题,如果有很多扫描行数太多的SQL,容易导致活跃连接数升高,可以使用SQL限流功能或结束会话,降低慢SQL的影响;表缓存 (Table Cache) 不足时,会导致大量SQL处于Opening table状态,在QPS过高或者表很多的场景中容易出现,可以考虑调整参数table_open_cache和table_open_cache_instances解决;当出现元数据锁(MDL)时,会导致大量SQL处于Waiting for table metadata lock的状态,在DDL prepare和commit阶段,DDL语句需要获取MDL锁,如果表上有未提交事务或慢SQL,会阻塞DDL操作,DDL操作又会阻塞其他的SQL,最终导致活跃线程数升高,可以通过中止未提交事务、慢SQL或正在执行的DDL来解决问题。
内存、磁盘、I/O等问题及优化:其他典型的问题还包括由于内存、磁盘、I/O等引起的问题,可能和Buffer Pool、临时表、索引和 Binlog 等诸多因素相关,更多的问题和优化可以利用数据库自治服务 DAS(Database Autonomy Service)来完成。
数据库自治服务 DAS(Database Autonomy Service)是一种基于机器学习和专家经验实现数据库自感知、自修复、自优化、自运维及自安全的云服务,帮助用户消除数据库管理的复杂性及人工操作引发的服务故障,有效保障数据库服务的稳定、安全及高效。利用DAS可以有效地发现并解决性能相关问题,其中的一键诊断、实时性能、锁分析、容量评估、性能洞察、性能趋势、慢SQL、SQL洞察和审计和自动SQL限流等功能可以帮助用户更好地洞察和优化数据库性能。