暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

面试通关秘籍:这100题藏着10个隐藏技巧,背完直接涨薪30%!

点击上方蓝字,关注我们


想学会更多实用技巧,欢迎加入青学会MOP技术社区(实名社区)。

加入方法:公众号后台回复关键字“加入”获取小助手微信,添加后登记入会。

同时欢迎大家在评论区留言互动交流!社区会不定期举行相关的抽奖、公开分享活动。

如果你有想了解的知识点希望我们发文可以后台私信。

DataDocks 数据码头 💬

最近联合几个 Oracle ACE技术专家 开通了一个付费微信群,都是具有10多年金融、医疗、制造业10年以上的一线专家,坑位费399/人,无限期。加群后会有一些福利(分享各类技术文档,干货资源,问题解答等等),更有特邀嘉宾会定期在群内直播,解读AWR,快问快答等!有问题我们尽量都解答,毕竟399不能都解决所有问题。有兴趣联系微:ywu0613

内部知识库正在筹建中,不止有oracle!


正文开始

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


AWR报告基础

  1. 问:AWR是什么?它的主要作用是什么?
    答: AWR(Automatic Workload Repository)是Oracle 10g引入的自动负载信息库,用于收集、管理和保留数据库性能统计数据。其主要作用是生成性能报告,帮助DBA分析数据库负载、识别瓶颈。

  2. 问:如何生成AWR报告?
    答: 使用脚本awrrpt.sql
    (单实例)或awrgrpt.sql
    (RAC),指定快照区间,Oracle会自动生成HTML或文本格式的报告。

  3. 问:快照(Snapshot)在AWR中的作用是什么?
    答: 快照是数据库在某一时间点的性能数据快照,AWR通过对比两个快照的数据生成报告,分析期间内的性能变化。

  4. 问:AWR报告中“DB Time”和“Elapsed Time”的区别是什么?
    答: Elapsed Time是快照间隔的总时间,DB Time是数据库非空闲进程消耗的CPU和等待时间总和。若DB Time远小于Elapsed Time,说明数据库较空闲。

  5. 问:如何判断数据库是否存在CPU瓶颈?
    答: 查看AWR报告的“Load Profile”部分,若“% of DB Time”中“CPU time”占比较高,且操作系统CPU利用率接近100%,则存在CPU瓶颈。


性能指标分析

  1. 问:Buffer Hit Ratio是什么?如何计算?
    答: Buffer Hit Ratio表示数据块在内存中的命中率,计算公式为:
    (1 - (physical reads (db block gets + consistent gets))) * 100
    。理想值应高于90%。

  2. 问:Shared Pool的“Library Hit %”低可能是什么原因?如何优化?
    答: 可能因未使用绑定变量导致SQL硬解析过多。优化方法包括:使用绑定变量、增大Shared Pool、调整cursor_sharing
    参数。

  3. 问:如何通过AWR报告判断是否存在物理I/O瓶颈?
    答: 检查“Top 5 Timed Events”中的I/O类事件(如db file sequential read
    db file scattered read
    ),若等待时间占比高,说明存在I/O问题。

  4. 问:Log File Sync等待事件高可能是什么原因?如何解决?
    答: 频繁提交小事务或Redo日志写入慢。解决方法:批量提交、将Redo日志放在高速磁盘、调整LOG_BUFFER
    大小。

  5. 问:Hard Parse和Soft Parse的区别是什么?
    答: Hard Parse是SQL语句未在共享池中找到,需完整解析;Soft Parse是SQL已在共享池中,仅需验证执行计划。Hard Parse消耗更多资源。


SQL优化

  1. 问:如何通过AWR报告找到高负载的SQL语句?
    答: 查看“SQL ordered by Elapsed Time”或“SQL ordered by Gets”部分,识别消耗资源最多的SQL。

  2. 问:什么是逻辑读(Logical Reads)?高逻辑读可能意味着什么?
    答: 逻辑读是从Buffer Cache中读取的数据块数。高逻辑读可能因全表扫描、索引效率低或SQL未优化。

  3. 问:如何分析SQL的执行计划?
    答: 使用EXPLAIN PLAN
    命令。

  4. 问:绑定变量(Bind Variables)对性能有何影响?
    答: 绑定变量减少硬解析,提升共享池复用率,降低CPU消耗。未使用绑定变量可能导致大量硬解析。

  5. 问:如何通过AWR报告发现未使用索引的SQL?
    答: 查看“SQL ordered by Physical Reads”,若某SQL物理读高且逻辑读低,可能未使用索引。


实例与内存管理

  1. 问:Buffer Cache的大小如何影响性能?
    答: 过小的Buffer Cache导致频繁物理读,过大会增加管理开销。建议根据AWR的“Buffer Pool Advisory”调整。

  2. 问:PGA_AGGREGATE_TARGET的作用是什么?
    答: 控制所有会话的PGA内存总量,用于排序、哈希连接等操作。若“sorts (disk)”高,需增大此参数。

  3. 问:Shared Pool的“Memory Usage %”过高如何解决?
    答: 若超过90%,可能需增大Shared Pool或优化SQL减少硬解析;若过低,说明存在浪费。

  4. 问:如何诊断Buffer Busy Waits事件?
    答: 检查等待的块类型(数据块、段头等),通过AWR的“Segment Statistics”找到热点对象,优化存储参数或业务逻辑。

  5. 问:Log Buffer的大小如何影响性能?
    答: 过小的Log Buffer导致频繁日志写入,增大LOG_BUFFER
    或使用更快的磁盘存放Redo日志可优化。


等待事件与锁机制

  1. 问:Enqueue等待的常见类型有哪些?
    答: TX(行锁)、TM(表锁)、ST(空间管理锁)等。需根据具体类型调整事务设计或存储参数。

  2. 问:如何解决TX4 Enqueue(行锁)竞争?
    答: 优化事务提交频率、使用较小的事务粒度、调整INITRANS
    参数增加事务槽。

  3. 问:Latch Free等待事件高可能是什么原因?
    答: 共享池或Buffer Cache竞争。需优化SQL、增大相关内存区域或调整_SPIN_COUNT
    参数。

  4. 问:什么是“热块(Hot Block)”?如何解决?
    答: 多个会话频繁访问同一数据块。解决方法:使用反转键索引、分区表、调整PCTFREE或增加ITL槽。

  5. 问:如何减少DB File Sequential Read等待?
    答: 优化索引(避免全索引扫描)、使用覆盖索引或调整SQL的连接顺序。


RAC与全局缓存

  1. 问:Global Cache Efficiency百分比低可能是什么原因?
    答: RAC节点间数据块传输频繁,可能因应用设计不合理(如未分区)或频繁访问相同数据。

  2. 问:如何优化RAC中的“gc cr block busy”事件?
    答: 减少跨节点查询、使用本地分区表或调整_FAIRNESS_THRESHOLD
    参数。

  3. 问:GCS和GES分别是什么?
    答: GCS(Global Cache Service)管理数据块缓存一致性;GES(Global Enqueue Service)管理全局锁资源。

  4. 问:RAC中“gc buffer busy”事件高如何解决?
    答: 优化热点块访问模式、使用应用分区或调整_GC_POLICY_TIME
    参数。

  5. 问:如何通过AWR报告分析RAC性能问题?
    答: 查看“RAC Statistics”部分的全局缓存效率、消息传输延迟及节点间负载均衡情况。


备份与恢复

  1. 问:RMAN增量备份的优势是什么?如何配置?
    答: 增量备份仅备份变化的数据块,节省存储和时间。配置方式:BACKUP INCREMENTAL LEVEL 1 DATABASE;

  2. 问:闪回技术(Flashback)有哪些应用场景?
    答: 恢复误删除数据(Flashback Query)、回滚表到历史状态(Flashback Table)、恢复数据库到特定时间点(Flashback Database)。

  3. 问:如何通过数据泵(Data Pump)优化导出/导入性能?
    答: 增加并行度(PARALLEL
    )、使用压缩(COMPRESSION
    )、调整STREAMS_POOL_SIZE

  4. 问:RMAN中“恢复目录(Recovery Catalog)”的作用是什么?
    答: 存储备份元数据,支持跨数据库恢复和长期备份管理,避免依赖控制文件。

  5. 问:如何监控RMAN备份进度?
    答: 查询视图V$SESSION_LONGOPS
    或使用LIST BACKUP SUMMARY
    命令。


高可用性

  1. 问:Data Guard的物理备库和逻辑备库的区别是什么?
    答: 物理备库块级别复制,与主库结构一致;逻辑备库通过SQL应用,可异构存储或表结构。

  2. 问:如何实现Data Guard的快速故障切换(Fast Failover)?
    答: 使用Data Guard Broker配置Fast-Start Failover
    ,结合Observer进程自动切换。

  3. 问:RAC中“脑裂(Split Brain)”是什么?如何避免?
    答: 节点间通信中断导致数据不一致。通过配置投票磁盘(Voting Disk)和网络冗余避免。

  4. 问:GoldenGate的核心组件有哪些?
    答: Extract(捕获数据)、Pump(传输数据)、Replicat(应用数据)、Trail文件(存储变更)。

  5. 问:如何优化GoldenGate的同步延迟?
    答: 增大Extract/Replicat进程并行度、调整事务批处理大小、优化网络带宽。


分区与索引

  1. 问:分区表的设计原则是什么?
    答: 根据业务访问模式选择分区键(如时间、地域),确保分区均衡,避免跨分区查询。

  2. 问:全局索引(Global Index)和本地索引(Local Index)的区别?
    答: 全局索引跨所有分区,维护成本高;本地索引按分区独立维护,适合分区维护操作。

  3. 问:如何对分区表进行在线重定义(Online Redefinition)?
    答: 使用DBMS_REDEFINITION
    包,分步完成表结构变更,减少停机时间。

  4. 问:索引分裂(Index Split)对性能的影响是什么?如何优化?
    答: 频繁分裂导致锁竞争和I/O增加。优化方法:使用反向键索引或增大PCTFREE。

  5. 问:如何监控索引的使用情况?
    答: 查询V$OBJECT_USAGE
    (单索引)或DBA_HIST_SQL_PLAN
    (历史执行计划)。


并行处理

  1. 问:如何启用并行查询?
    答: 使用提示/*+ PARALLEL(table_name, degree) */
    或设置表属性PARALLEL DEGREE DEFAULT

  2. 问:并行DML(PDML)的限制是什么?
    答: 不支持触发器、外键约束、自增列,且需显式启用ALTER SESSION ENABLE PARALLEL DML;

  3. 问:如何调整并行执行的内存分配?
    答: 通过PGA_AGGREGATE_TARGET
    PARALLEL_EXECUTION_MESSAGE_SIZE
    控制每个并行进程的内存。

  4. 问:并行执行计划中出现“PX Deq Credit: send blkd”等待事件如何解决?
    答: 增加PARALLEL_MAX_SERVERS
    或优化SQL减少并行进程间数据传输。

  5. 问:如何监控并行查询的执行情况?
    答: 查询V$PQ_TQSTAT
    (并行队列统计)和V$PX_SESSION
    (并行会话信息)。


统计信息管理

  1. 问:自动统计收集任务的默认调度时间是什么?
    答: 每天22:00至次日2:00(通过DBA_AUTOTASK_CLIENT
    查看)。

  2. 问:直方图(Histogram)的作用是什么?何时需要创建?
    答: 统计列数据分布,优化非均匀数据查询。当列数据倾斜严重时需创建。

  3. 问:动态采样(Dynamic Sampling)的作用是什么?
    答: 在缺少统计信息时,通过采样实时生成临时统计信息,辅助优化器生成计划。

  4. 问:如何手动锁定表的统计信息?
    答: 使用DBMS_STATS.LOCK_TABLE_STATS
    防止自动任务覆盖。

  5. 问:统计信息过期可能导致什么问题?如何检测?
    答: 导致执行计划劣化。检测方法:查询DBA_TAB_STATISTICS
    LAST_ANALYZED
    字段。


自动任务与调度

  1. 问:如何禁用自动统计收集任务?
    答: EXEC DBMS_AUTO_TASK_ADMIN.DISABLE('auto optimizer stats collection', NULL, NULL);

  2. 问:DBMS_SCHEDULER和DBMS_JOB的区别是什么?
    答: DBMS_SCHEDULER
    功能更强大,支持复杂调度逻辑和资源管理;DBMS_JOB
    已逐渐淘汰。

  3. 问:如何监控自动维护任务的执行情况?
    答: 查询视图DBA_AUTOTASK_JOB_HISTORY
    DBA_SCHEDULER_JOB_RUN_DETAILS

  4. 问:自动段空间管理(ASSM)的优势是什么?
    答: 使用位图管理空间,减少段头竞争,提升并发插入性能。

  5. 问:如何调整自动UNDO保留时间?
    答: 设置UNDO_RETENTION
    参数(单位秒),结合UNDO_TABLESPACE
    的RETENTION GUARANTEE属性。


SQL调优工具

  1. 问:SQL Tuning Advisor的作用是什么?
    答: 分析高负载SQL,提供优化建议(如索引、统计信息、SQL重构)。

  2. 问:如何通过SQL Plan Management(SPM)固定执行计划?
    答: 使用DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE
    捕获计划,并标记为接受状态。

  3. 问:SQL Access Advisor的主要功能是什么?
    答: 推荐索引、物化视图和分区策略,优化查询性能。

  4. 问:如何生成SQL Profile?
    答: 通过SQL Tuning Advisor生成,使用DBMS_SQLTUNE.ACCEPT_SQL_PROFILE
    应用。

  5. 问:AWR和ASH的区别是什么?
    答: AWR保存快照级性能数据,ASH(Active Session History)记录会话级活动详情,粒度更细。


资源管理

  1. 问:Resource Manager的作用是什么?
    答: 控制数据库资源(CPU、I/O、并行度)分配,保障关键任务优先级。

  2. 问:如何限制用户会话的CPU使用?
    答: 创建资源计划(Resource Plan),设置CPU_P1
    优先级和UTILIZATION_LIMIT

  3. 问:I/O资源管理(IORM)在Exadata中的应用场景是什么?
    答: 在存储层控制不同数据库或PDB的I/O带宽,避免资源争用。

  4. 问:如何监控Resource Manager的效果?
    答: 查询V$RSRC_CONSUMER_GROUP
    V$RSRCMGRMETRIC
    视图。

  5. 问:什么是PDB级别的资源管理?
    答: 在多租户环境中,通过PDB性能配置文件(Performance Profile)限制单个PDB的资源使用。


性能监控工具

  1. 问:如何实时监控数据库性能?常用的动态性能视图有哪些?
    答: 使用V$SESSION
    V$SQL
    V$SYSTEM_EVENT
    等视图。工具如OEM或SQL Developer可提供实时监控。

  2. 问:ASH(Active Session History)的作用是什么?如何查询ASH数据?
    答: ASH记录活跃会话的详细信息,用于分析瞬时性能问题。查询视图V$ACTIVE_SESSION_HISTORY

  3. 问:如何诊断数据库的锁争用问题?
    答: 使用V$LOCK
    DBA_BLOCKERS
    视图,结合AWR报告的“Enqueue Waits”部分。

  4. 问:ADDM(Automatic Database Diagnostic Monitor)如何生成报告?
    答: 运行addmrpt.sql
    脚本,ADDM会自动分析AWR快照并生成优化建议。

  5. 问:如何通过SQL Trace分析单条SQL的性能?
    答: 启用ALTER SESSION SET SQL_TRACE=TRUE;
    ,使用TKPROF工具解析跟踪文件。


安全与权限

  1. 问:如何审计用户的DDL操作?
    答: 启用统一审计(Unified Auditing)并配置策略:

    CREATE AUDIT POLICY audit_ddl_policy ACTIONS CREATE TABLEDROP TABLE;
    AUDIT POLICY audit_ddl_policy BY scott;

  2. 问:VPD(Virtual Private Database)的作用是什么?如何配置?
    答: VPD通过策略动态过滤数据访问。配置步骤:创建策略函数,使用DBMS_RLS.ADD_POLICY
    绑定到表。

  3. 问:如何防止SQL注入攻击?
    答: 使用绑定变量、输入验证、最小权限原则,并启用审计跟踪可疑操作。

  4. 问:透明数据加密(TDE)如何保护数据?
    答: TDE对表空间或列加密,数据在存储和备份时均为密文,密钥由Wallet管理。

  5. 问:如何限制用户并发会话数?
    答: 通过Profile设置:

    CREATE PROFILE user_profile LIMIT SESSIONS_PER_USER 5;
    ALTER USER scott PROFILE user_profile;


高级调优技巧

  1. 问:如何利用结果集缓存(Result Cache)提升性能?
    答: 在查询中添加/*+ RESULT_CACHE */
    提示,或设置RESULT_CACHE_MODE=FORCE

  2. 问:什么是自适应执行计划(Adaptive Execution Plans)?
    答: Oracle 12c+根据运行时统计信息动态调整执行计划,例如切换连接方式或使用临时表。

  3. 问:如何优化大表JOIN操作?
    答: 使用哈希连接(HASH JOIN)、并行处理、物化视图或分区剪裁(Partition Pruning)。

  4. 问:如何减少递归SQL(Recursive SQL)的开销?
    答: 避免频繁DDL操作、优化数据字典查询、增大Shared Pool或使用绑定变量。

  5. 问:如何通过In-Memory选项加速查询?
    答: 启用In-Memory列存储,将表或列加载到内存:

    ALTER TABLE sales INMEMORY PRIORITY HIGH;


多租户与PDB管理

  1. 问:CDB和PDB的区别是什么?
    答: CDB(容器数据库)是根容器,管理多个PDB(可插拔数据库),每个PDB独立运行应用。

  2. 问:如何快速克隆PDB?
    答: 使用CREATE PLUGGABLE DATABASE pdb2 FROM pdb1 FILE_NAME_CONVERT=('pdb1','pdb2');

  3. 问:如何限制PDB的资源使用?
    答: 创建PDB性能配置文件:

    CREATE PROFILE pdb_profile LIMIT CPU_PER_SESSION 100;
    ALTER PLUGGABLE DATABASE pdb1 SET PROFILE pdb_profile;

  4. 问:如何监控PDB的性能?
    答: 在PDB中查询V$SYSSTAT
    V$SQL
    ,或通过CDB视图CDB_HIST_*
    聚合数据。

  5. 问:如何实现PDB的热迁移(Hot Clone)?
    答: 使用DBMS_PDB.DESCRIBE
    生成元数据文件,通过RMAN复制数据文件到目标CDB。


I/O与存储优化

  1. 问:如何识别数据库的I/O热点文件?
    答: 查询V$FILESTAT
    或AWR报告的“IO Stats”部分,按物理读/写排序。

  2. 问:ASM(Automatic Storage Management)的优势是什么?
    答: 简化存储管理、支持条带化和镜像、自动负载均衡,提升I/O性能。

  3. 问:如何优化ASM磁盘组的性能?
    答: 使用多路径I/O、分离数据与Redo日志的磁盘组、调整ASM_POWER_LIMIT
    控制Rebalance速度。

  4. 问:Direct NFS(dNFS)的作用是什么?
    答: 绕过OS层NFS客户端,直接由Oracle内核管理NFS存储,减少上下文切换开销。

  5. 问:如何监控ASM实例的性能?
    答: 查看视图V$ASM_DISKGROUP_STAT
    V$ASM_OPERATION
    ,关注磁盘组响应时间和Rebalance进度。


高级故障诊断

  1. 问:如何分析ORA-01555(快照过旧)错误?
    答: 检查Undo表空间大小、长事务或一致性读需求,增大UNDO_RETENTION
    或优化查询。

  2. 问:如何诊断数据库挂起(Hang)问题?
    答: 收集Hang Analyze报告:

    ALTER SESSION SET EVENTS 'immediate trace name HANGANALYZE level 3';

  3. 问:如何通过错误堆栈(Error Stack)定位问题?
    答: 启用事件跟踪:

    ALTER SESSION SET EVENTS '600 trace name errorstack level 3';

  4. 问:如何分析内存泄漏(Memory Leak)?
    答: 监控V$PROCESS_MEMORY
    V$MEMORY_DYNAMIC_COMPONENTS
    ,结合Heapdump分析内存分配。

  5. 问:如何通过Incident Packaging Service(IPS)收集诊断信息?
    答: 使用ADRCI
    工具生成问题包:

    adrci> ips create package incident <incident_id>


说白了,AWR报告就是个“数据库病历本”,关键得会“看病”。面试官问这些不是为了考倒你,而是想看你有没有实际解决问题的能力。今天聊的这些指标、等待事件、SQL优化,看起来零碎,但核心就一句:通过数据找证据,别瞎猜! 下次面试要是被问到AWR,你就记住——先甩两个专业术语镇场子,再用白话举例子,最后补一句“我之前用这方法真解决过线上问题”。保证面试官听得直点头。数据库这行,经验都是熬出来的,但至少这次面试,咱不能输在话术上对吧?



END

往期文章回顾

MOP社区新闻

  青学会MOP技术社区成立了!

  青学会专家顾问团成员介绍

金仓专栏

  告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)

  KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)

  KingbaseES数据脱敏-青学会&金仓专栏(3)

  KingbaseES后台服务管理-青学会&金仓专栏(4)

  电科金仓KES日常运维命令集锦-青学会&金仓专栏(5)

DBA实战小技巧

  推荐一款超实用的openGauss数据库安装工具!

  实战:记一次RAC故障排查
  DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
  DBA实战运维小技巧存储篇(一)根目录满了如何处理
  DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储

MOP社区投稿-内核开发

  浅谈 PostgreSQL GUC 模块原理

  简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理

  简单讨论 PostgreSQL C语言拓展函数返回数据表的方式

  简单分析 pg_config 程序的作用与原理
  Redis 日志机制简介(一):SlowLog
  Redis 日志机制简介(二):AOF 日志
  Redis 日志机制简介(三):RDB 日志
  pg_cron插件使用介绍
  Redis 的指令表实现机制简介
  pg几款源码工具介绍
  Redis 事务功能简介

MOP顾问说

   MOP顾问说:MOP 三种主流数据库常用 SQL(一)

  MOP顾问说: 服务器内存

  MOP 顾问说:Linux Nice 值与 CPU 优先级揭秘


文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论