- 先从一个突发的性能故障说起:
AWR (Automatic Workload Repository) 是自动负载信息库的英文缩写,AWR报告是Oracle10g以后版本提供的一种性能收集和分析工具,能提供一个时间段内整个系统资源使用情况的报告。
数据库突然出现大量异常等待事件。AWR报告TOP 5等待事件如截图所示:
系统正常和异常时,DB Time耗时对比如下:
分析思路:
1、丈二和尚,摸不着头脑。性能问题,数据库不会报错。
2、将数据库性能问题等同于SQL优化,花大精力去优化SQL。
3、快速重启数据库。可能解决问题,也可能不能解决。
4、可能命中Oracle bug,high version count导致此类问题不少。
5、大量等待事件都和内存争用有关,直觉经验判断系统内存出现问题。
深入分析机器磁盘的内存交换情况,发现系统在产生大量交换,进一步导致本地盘异常繁忙(交换空间所在磁盘):
那么是谁在吃内存?
对一个高手来讲,花了3分钟,根源就定位到了。
但我认为:这个技能不可复制性,也不是高效DBA的日常运维!
高效DBA日常运维在做什么?
1. 通过技术+行政手段,确保部署标准化
2. 通过各种技术手段(如监控),快速定位变化
关于变化:
所有的故障都是变化(变更)引起的
软件故障:如系统上线变更,SQL执行计划变更,软件bug
硬件故障:如内存、磁盘、网络、CPU资源故障
关于标准化
标准化,使用统一的模板
统一的操作系统,如使用linux 7
统一的数据库版本,如使用Oracle 19c 多租户特性、MySQL 5.7统一参数模板
高效DBA关注点是什么?(如何快速定位变化?)
1. 监控是第一要位
2. 实时邮件告警
3. 对数据库的高可用性、高可靠性涉及,包括容灾方案
4. 对性能差的SQL语句进行及时优化
如何高效SQL优化?
SQL优化的核心思想:让Oracle尽可能快速定位数据。主要方法:
减少数据级、提高处理效率(如并行,加索引等)
典型的OLTP系统,读写比例:8/2
宏观上:从逻辑读总次数及单次时间波动发现数据库性能变化
微观上:从每次执行所耗逻辑读次数观察SQL执行计划优劣
SQL的生命周期的四个阶段路径
核心指标- 联动性
综上所述:监控变化、重视变更是高效运维的核心思想之一!