
想学会更多实用技巧,欢迎加入青学会MOP技术社区(实名社区)。
加入方法:公众号后台回复关键字“加入”获取小助手微信,添加后登记入会。

同时欢迎大家在评论区留言互动交流!社区会不定期举行相关的抽奖、公开分享活动。
如果你有想了解的知识点希望我们发文可以后台私信。
最近联合几个 Oracle ACE技术专家 开通了一个付费微信群,都是具有10多年金融、医疗、制造业10年以上的一线专家,坑位费399/人,无限期。加群后会有一些福利(分享各类技术文档,干货资源,问题解答等等),更有特邀嘉宾会定期在群内直播,解读AWR,快问快答等!有问题我们尽量都解答,毕竟399不能都解决所有问题。有兴趣联系微:ywu0613
内部知识库正在筹建中,不止有oracle!

正文开始
干过Oracle运维的兄弟都知道,数据库一抽风,老板电话能追到你半夜三点。这时候要是不会看AWR报告,那真是两眼一抹黑,连问题在哪儿都摸不着!AWR报告说白了就是Oracle的“体检报告”,CPU爆了、SQL跑崩了、锁等麻了……全给你列得明明白白。但面试的时候,面试官要是问“AWR里DB Time和Elapsed Time啥区别?”“怎么从报告里挖出拖后腿的SQL?”,你要是支支吾吾,offer可能就飞了。今天咱就唠点实在的——怎么用大白话讲清楚那些必考题,让你面试直接怼到面试官心坎上!

AWR报告基础
问:AWR是什么?它的主要作用是什么?
答: AWR(Automatic Workload Repository)是Oracle 10g引入的自动负载信息库,用于收集、管理和保留数据库性能统计数据。其主要作用是生成性能报告,帮助DBA分析数据库负载、识别瓶颈。问:如何生成AWR报告?
答: 使用脚本awrrpt.sql
(单实例)或awrgrpt.sql
(RAC),指定快照区间,Oracle会自动生成HTML或文本格式的报告。问:快照(Snapshot)在AWR中的作用是什么?
答: 快照是数据库在某一时间点的性能数据快照,AWR通过对比两个快照的数据生成报告,分析期间内的性能变化。问:AWR报告中“DB Time”和“Elapsed Time”的区别是什么?
答: Elapsed Time是快照间隔的总时间,DB Time是数据库非空闲进程消耗的CPU和等待时间总和。若DB Time远小于Elapsed Time,说明数据库较空闲。问:如何判断数据库是否存在CPU瓶颈?
答: 查看AWR报告的“Load Profile”部分,若“% of DB Time”中“CPU time”占比较高,且操作系统CPU利用率接近100%,则存在CPU瓶颈。
性能指标分析
问:Buffer Hit Ratio是什么?如何计算?
答: Buffer Hit Ratio表示数据块在内存中的命中率,计算公式为:(1 - (physical reads (db block gets + consistent gets))) * 100
。理想值应高于90%。问:Shared Pool的“Library Hit %”低可能是什么原因?如何优化?
答: 可能因未使用绑定变量导致SQL硬解析过多。优化方法包括:使用绑定变量、增大Shared Pool、调整cursor_sharing
参数。问:如何通过AWR报告判断是否存在物理I/O瓶颈?
答: 检查“Top 5 Timed Events”中的I/O类事件(如db file sequential read
、db file scattered read
),若等待时间占比高,说明存在I/O问题。问:Log File Sync等待事件高可能是什么原因?如何解决?
答: 频繁提交小事务或Redo日志写入慢。解决方法:批量提交、将Redo日志放在高速磁盘、调整LOG_BUFFER
大小。问:Hard Parse和Soft Parse的区别是什么?
答: Hard Parse是SQL语句未在共享池中找到,需完整解析;Soft Parse是SQL已在共享池中,仅需验证执行计划。Hard Parse消耗更多资源。
SQL优化
问:如何通过AWR报告找到高负载的SQL语句?
答: 查看“SQL ordered by Elapsed Time”或“SQL ordered by Gets”部分,识别消耗资源最多的SQL。问:什么是逻辑读(Logical Reads)?高逻辑读可能意味着什么?
答: 逻辑读是从Buffer Cache中读取的数据块数。高逻辑读可能因全表扫描、索引效率低或SQL未优化。问:如何分析SQL的执行计划?
答: 使用EXPLAIN PLAN
命令。问:绑定变量(Bind Variables)对性能有何影响?
答: 绑定变量减少硬解析,提升共享池复用率,降低CPU消耗。未使用绑定变量可能导致大量硬解析。问:如何通过AWR报告发现未使用索引的SQL?
答: 查看“SQL ordered by Physical Reads”,若某SQL物理读高且逻辑读低,可能未使用索引。
实例与内存管理
问:Buffer Cache的大小如何影响性能?
答: 过小的Buffer Cache导致频繁物理读,过大会增加管理开销。建议根据AWR的“Buffer Pool Advisory”调整。问:PGA_AGGREGATE_TARGET的作用是什么?
答: 控制所有会话的PGA内存总量,用于排序、哈希连接等操作。若“sorts (disk)”高,需增大此参数。问:Shared Pool的“Memory Usage %”过高如何解决?
答: 若超过90%,可能需增大Shared Pool或优化SQL减少硬解析;若过低,说明存在浪费。问:如何诊断Buffer Busy Waits事件?
答: 检查等待的块类型(数据块、段头等),通过AWR的“Segment Statistics”找到热点对象,优化存储参数或业务逻辑。问:Log Buffer的大小如何影响性能?
答: 过小的Log Buffer导致频繁日志写入,增大LOG_BUFFER
或使用更快的磁盘存放Redo日志可优化。
等待事件与锁机制
问:Enqueue等待的常见类型有哪些?
答: TX(行锁)、TM(表锁)、ST(空间管理锁)等。需根据具体类型调整事务设计或存储参数。问:如何解决TX4 Enqueue(行锁)竞争?
答: 优化事务提交频率、使用较小的事务粒度、调整INITRANS
参数增加事务槽。问:Latch Free等待事件高可能是什么原因?
答: 共享池或Buffer Cache竞争。需优化SQL、增大相关内存区域或调整_SPIN_COUNT
参数。问:什么是“热块(Hot Block)”?如何解决?
答: 多个会话频繁访问同一数据块。解决方法:使用反转键索引、分区表、调整PCTFREE或增加ITL槽。问:如何减少DB File Sequential Read等待?
答: 优化索引(避免全索引扫描)、使用覆盖索引或调整SQL的连接顺序。
RAC与全局缓存
问:Global Cache Efficiency百分比低可能是什么原因?
答: RAC节点间数据块传输频繁,可能因应用设计不合理(如未分区)或频繁访问相同数据。问:如何优化RAC中的“gc cr block busy”事件?
答: 减少跨节点查询、使用本地分区表或调整_FAIRNESS_THRESHOLD
参数。问:GCS和GES分别是什么?
答: GCS(Global Cache Service)管理数据块缓存一致性;GES(Global Enqueue Service)管理全局锁资源。问:RAC中“gc buffer busy”事件高如何解决?
答: 优化热点块访问模式、使用应用分区或调整_GC_POLICY_TIME
参数。问:如何通过AWR报告分析RAC性能问题?
答: 查看“RAC Statistics”部分的全局缓存效率、消息传输延迟及节点间负载均衡情况。
备份与恢复
问:RMAN增量备份的优势是什么?如何配置?
答: 增量备份仅备份变化的数据块,节省存储和时间。配置方式:BACKUP INCREMENTAL LEVEL 1 DATABASE;问:闪回技术(Flashback)有哪些应用场景?
答: 恢复误删除数据(Flashback Query)、回滚表到历史状态(Flashback Table)、恢复数据库到特定时间点(Flashback Database)。问:如何通过数据泵(Data Pump)优化导出/导入性能?
答: 增加并行度(PARALLEL
)、使用压缩(COMPRESSION
)、调整STREAMS_POOL_SIZE
。问:RMAN中“恢复目录(Recovery Catalog)”的作用是什么?
答: 存储备份元数据,支持跨数据库恢复和长期备份管理,避免依赖控制文件。问:如何监控RMAN备份进度?
答: 查询视图V$SESSION_LONGOPS
或使用LIST BACKUP SUMMARY
命令。
高可用性
问:Data Guard的物理备库和逻辑备库的区别是什么?
答: 物理备库块级别复制,与主库结构一致;逻辑备库通过SQL应用,可异构存储或表结构。问:如何实现Data Guard的快速故障切换(Fast Failover)?
答: 使用Data Guard Broker配置Fast-Start Failover
,结合Observer进程自动切换。问:RAC中“脑裂(Split Brain)”是什么?如何避免?
答: 节点间通信中断导致数据不一致。通过配置投票磁盘(Voting Disk)和网络冗余避免。问:GoldenGate的核心组件有哪些?
答: Extract(捕获数据)、Pump(传输数据)、Replicat(应用数据)、Trail文件(存储变更)。问:如何优化GoldenGate的同步延迟?
答: 增大Extract/Replicat进程并行度、调整事务批处理大小、优化网络带宽。
分区与索引
问:分区表的设计原则是什么?
答: 根据业务访问模式选择分区键(如时间、地域),确保分区均衡,避免跨分区查询。问:全局索引(Global Index)和本地索引(Local Index)的区别?
答: 全局索引跨所有分区,维护成本高;本地索引按分区独立维护,适合分区维护操作。问:如何对分区表进行在线重定义(Online Redefinition)?
答: 使用DBMS_REDEFINITION
包,分步完成表结构变更,减少停机时间。问:索引分裂(Index Split)对性能的影响是什么?如何优化?
答: 频繁分裂导致锁竞争和I/O增加。优化方法:使用反向键索引或增大PCTFREE。问:如何监控索引的使用情况?
答: 查询V$OBJECT_USAGE
(单索引)或DBA_HIST_SQL_PLAN
(历史执行计划)。
并行处理
问:如何启用并行查询?
答: 使用提示/*+ PARALLEL(table_name, degree) */
或设置表属性PARALLEL DEGREE DEFAULT
。问:并行DML(PDML)的限制是什么?
答: 不支持触发器、外键约束、自增列,且需显式启用ALTER SESSION ENABLE PARALLEL DML;问:如何调整并行执行的内存分配?
答: 通过PGA_AGGREGATE_TARGET
和PARALLEL_EXECUTION_MESSAGE_SIZE
控制每个并行进程的内存。问:并行执行计划中出现“PX Deq Credit: send blkd”等待事件如何解决?
答: 增加PARALLEL_MAX_SERVERS
或优化SQL减少并行进程间数据传输。问:如何监控并行查询的执行情况?
答: 查询V$PQ_TQSTAT
(并行队列统计)和V$PX_SESSION
(并行会话信息)。
统计信息管理
问:自动统计收集任务的默认调度时间是什么?
答: 每天22:00至次日2:00(通过DBA_AUTOTASK_CLIENT
查看)。问:直方图(Histogram)的作用是什么?何时需要创建?
答: 统计列数据分布,优化非均匀数据查询。当列数据倾斜严重时需创建。问:动态采样(Dynamic Sampling)的作用是什么?
答: 在缺少统计信息时,通过采样实时生成临时统计信息,辅助优化器生成计划。问:如何手动锁定表的统计信息?
答: 使用DBMS_STATS.LOCK_TABLE_STATS
防止自动任务覆盖。问:统计信息过期可能导致什么问题?如何检测?
答: 导致执行计划劣化。检测方法:查询DBA_TAB_STATISTICS
的LAST_ANALYZED
字段。
自动任务与调度
问:如何禁用自动统计收集任务?
答:EXEC DBMS_AUTO_TASK_ADMIN.DISABLE('auto optimizer stats collection', NULL, NULL);问:DBMS_SCHEDULER和DBMS_JOB的区别是什么?
答:DBMS_SCHEDULER
功能更强大,支持复杂调度逻辑和资源管理;DBMS_JOB
已逐渐淘汰。问:如何监控自动维护任务的执行情况?
答: 查询视图DBA_AUTOTASK_JOB_HISTORY
和DBA_SCHEDULER_JOB_RUN_DETAILS
。问:自动段空间管理(ASSM)的优势是什么?
答: 使用位图管理空间,减少段头竞争,提升并发插入性能。问:如何调整自动UNDO保留时间?
答: 设置UNDO_RETENTION
参数(单位秒),结合UNDO_TABLESPACE
的RETENTION GUARANTEE属性。
SQL调优工具
问:SQL Tuning Advisor的作用是什么?
答: 分析高负载SQL,提供优化建议(如索引、统计信息、SQL重构)。问:如何通过SQL Plan Management(SPM)固定执行计划?
答: 使用DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE
捕获计划,并标记为接受状态。问:SQL Access Advisor的主要功能是什么?
答: 推荐索引、物化视图和分区策略,优化查询性能。问:如何生成SQL Profile?
答: 通过SQL Tuning Advisor生成,使用DBMS_SQLTUNE.ACCEPT_SQL_PROFILE
应用。问:AWR和ASH的区别是什么?
答: AWR保存快照级性能数据,ASH(Active Session History)记录会话级活动详情,粒度更细。
资源管理
问:Resource Manager的作用是什么?
答: 控制数据库资源(CPU、I/O、并行度)分配,保障关键任务优先级。问:如何限制用户会话的CPU使用?
答: 创建资源计划(Resource Plan),设置CPU_P1
优先级和UTILIZATION_LIMIT
。问:I/O资源管理(IORM)在Exadata中的应用场景是什么?
答: 在存储层控制不同数据库或PDB的I/O带宽,避免资源争用。问:如何监控Resource Manager的效果?
答: 查询V$RSRC_CONSUMER_GROUP
和V$RSRCMGRMETRIC
视图。问:什么是PDB级别的资源管理?
答: 在多租户环境中,通过PDB性能配置文件(Performance Profile)限制单个PDB的资源使用。
性能监控工具
问:如何实时监控数据库性能?常用的动态性能视图有哪些?
答: 使用V$SESSION
、V$SQL
、V$SYSTEM_EVENT
等视图。工具如OEM或SQL Developer可提供实时监控。问:ASH(Active Session History)的作用是什么?如何查询ASH数据?
答: ASH记录活跃会话的详细信息,用于分析瞬时性能问题。查询视图V$ACTIVE_SESSION_HISTORY
。问:如何诊断数据库的锁争用问题?
答: 使用V$LOCK
和DBA_BLOCKERS
视图,结合AWR报告的“Enqueue Waits”部分。问:ADDM(Automatic Database Diagnostic Monitor)如何生成报告?
答: 运行addmrpt.sql
脚本,ADDM会自动分析AWR快照并生成优化建议。问:如何通过SQL Trace分析单条SQL的性能?
答: 启用ALTER SESSION SET SQL_TRACE=TRUE;
,使用TKPROF工具解析跟踪文件。
安全与权限
问:如何审计用户的DDL操作?
答: 启用统一审计(Unified Auditing)并配置策略:CREATE AUDIT POLICY audit_ddl_policy ACTIONS CREATE TABLE, DROP TABLE;
AUDIT POLICY audit_ddl_policy BY scott;问:VPD(Virtual Private Database)的作用是什么?如何配置?
答: VPD通过策略动态过滤数据访问。配置步骤:创建策略函数,使用DBMS_RLS.ADD_POLICY
绑定到表。问:如何防止SQL注入攻击?
答: 使用绑定变量、输入验证、最小权限原则,并启用审计跟踪可疑操作。问:透明数据加密(TDE)如何保护数据?
答: TDE对表空间或列加密,数据在存储和备份时均为密文,密钥由Wallet管理。问:如何限制用户并发会话数?
答: 通过Profile设置:CREATE PROFILE user_profile LIMIT SESSIONS_PER_USER 5;
ALTER USER scott PROFILE user_profile;
高级调优技巧
问:如何利用结果集缓存(Result Cache)提升性能?
答: 在查询中添加/*+ RESULT_CACHE */
提示,或设置RESULT_CACHE_MODE=FORCE
。问:什么是自适应执行计划(Adaptive Execution Plans)?
答: Oracle 12c+根据运行时统计信息动态调整执行计划,例如切换连接方式或使用临时表。问:如何优化大表JOIN操作?
答: 使用哈希连接(HASH JOIN)、并行处理、物化视图或分区剪裁(Partition Pruning)。问:如何减少递归SQL(Recursive SQL)的开销?
答: 避免频繁DDL操作、优化数据字典查询、增大Shared Pool或使用绑定变量。问:如何通过In-Memory选项加速查询?
答: 启用In-Memory列存储,将表或列加载到内存:ALTER TABLE sales INMEMORY PRIORITY HIGH;
多租户与PDB管理
问:CDB和PDB的区别是什么?
答: CDB(容器数据库)是根容器,管理多个PDB(可插拔数据库),每个PDB独立运行应用。问:如何快速克隆PDB?
答: 使用CREATE PLUGGABLE DATABASE pdb2 FROM pdb1 FILE_NAME_CONVERT=('pdb1','pdb2');问:如何限制PDB的资源使用?
答: 创建PDB性能配置文件:CREATE PROFILE pdb_profile LIMIT CPU_PER_SESSION 100;
ALTER PLUGGABLE DATABASE pdb1 SET PROFILE pdb_profile;问:如何监控PDB的性能?
答: 在PDB中查询V$SYSSTAT
、V$SQL
,或通过CDB视图CDB_HIST_*
聚合数据。问:如何实现PDB的热迁移(Hot Clone)?
答: 使用DBMS_PDB.DESCRIBE
生成元数据文件,通过RMAN复制数据文件到目标CDB。
I/O与存储优化
问:如何识别数据库的I/O热点文件?
答: 查询V$FILESTAT
或AWR报告的“IO Stats”部分,按物理读/写排序。问:ASM(Automatic Storage Management)的优势是什么?
答: 简化存储管理、支持条带化和镜像、自动负载均衡,提升I/O性能。问:如何优化ASM磁盘组的性能?
答: 使用多路径I/O、分离数据与Redo日志的磁盘组、调整ASM_POWER_LIMIT
控制Rebalance速度。问:Direct NFS(dNFS)的作用是什么?
答: 绕过OS层NFS客户端,直接由Oracle内核管理NFS存储,减少上下文切换开销。问:如何监控ASM实例的性能?
答: 查看视图V$ASM_DISKGROUP_STAT
、V$ASM_OPERATION
,关注磁盘组响应时间和Rebalance进度。
高级故障诊断
问:如何分析ORA-01555(快照过旧)错误?
答: 检查Undo表空间大小、长事务或一致性读需求,增大UNDO_RETENTION
或优化查询。问:如何诊断数据库挂起(Hang)问题?
答: 收集Hang Analyze报告:ALTER SESSION SET EVENTS 'immediate trace name HANGANALYZE level 3';问:如何通过错误堆栈(Error Stack)定位问题?
答: 启用事件跟踪:ALTER SESSION SET EVENTS '600 trace name errorstack level 3';问:如何分析内存泄漏(Memory Leak)?
答: 监控V$PROCESS_MEMORY
、V$MEMORY_DYNAMIC_COMPONENTS
,结合Heapdump分析内存分配。问:如何通过Incident Packaging Service(IPS)收集诊断信息?
答: 使用ADRCI
工具生成问题包:adrci> ips create package incident <incident_id>
说白了,AWR报告就是个“数据库病历本”,关键得会“看病”。面试官问这些不是为了考倒你,而是想看你有没有实际解决问题的能力。今天聊的这些指标、等待事件、SQL优化,看起来零碎,但核心就一句:通过数据找证据,别瞎猜! 下次面试要是被问到AWR,你就记住——先甩两个专业术语镇场子,再用白话举例子,最后补一句“我之前用这方法真解决过线上问题”。保证面试官听得直点头。数据库这行,经验都是熬出来的,但至少这次面试,咱不能输在话术上对吧?
往期文章回顾
MOP社区新闻
金仓专栏
告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)
KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)
DBA实战小技巧
实战:记一次RAC故障排查
DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
DBA实战运维小技巧存储篇(一)根目录满了如何处理
DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储
MOP社区投稿-内核开发
简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理
简单讨论 PostgreSQL C语言拓展函数返回数据表的方式
简单分析 pg_config 程序的作用与原理
Redis 日志机制简介(一):SlowLog
Redis 日志机制简介(二):AOF 日志
Redis 日志机制简介(三):RDB 日志
pg_cron插件使用介绍
Redis 的指令表实现机制简介
pg几款源码工具介绍
Redis 事务功能简介




