版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年数据库优化考试题及答案一、单项选择题(每题2分,共20分)1.在MySQL8.0中,以下哪项参数对InnoDB缓冲池的预热速度影响最大?A.innodb_buffer_pool_sizeB.innodb_buffer_pool_dump_at_shutdownC.innodb_read_io_threadsD.innodb_old_blocks_pct答案:B解析:innodb_buffer_pool_dump_at_shutdown与innodb_buffer_pool_load_at_startup共同决定关闭时是否把LRU列表转储到磁盘,并在重启时快速预热,显著缩短冷启动后的性能低谷期。2.某业务表orders主键为order_id,查询条件为WHEREuser_id=?ANDstatus=?ANDcreate_timeBETWEEN?AND?,下列哪种索引设计最合理?A.(user_id,status)B.(status,user_id,create_time)C.(user_id,status,create_time)D.(create_time,user_id,status)答案:C解析:把等值过滤列user_id、status放在最左,范围列create_time置后,可一次性用到索引过滤并避免filesort。3.PostgreSQL15中,对分区表执行SELECTcount()FROMmeasurementWHERElogdateBETWEEN'2026-05-01'AND'2026-05-07',以下哪项技术能避免扫描全部分区?3.PostgreSQL15中,对分区表执行SELECTcount()FROMmeasurementWHERElogdateBETWEEN'2026-05-01'AND'2026-05-07',以下哪项技术能避免扫描全部分区?A.constraint_exclusionB.parallel_appendC.partitionwisejoinD.incrementalsort答案:A解析:constraint_exclusion根据check约束裁剪无关分区,是分区裁剪的核心机制。4.在Oracle21c的AutomaticIndexing流程中,以下哪一步会验证新索引是否带来负面性能?A.INDEXCREATIONB.INDEXVERIFICATIONC.INDEXUSAGED.INDEXCLEANUP答案:B解析:VERIFICATION阶段通过SQLPerformanceAnalyzer回放工作负载,比较执行计划与资源消耗,若出现退化则回退索引。5.某MongoDB7分片集群,chunk大小为128MB,balancer迁移时发现某shard上jumbochunk数量持续增加,最可能的原因是:A.片键单调递增B.文档平均体积小于1kBC.启用了writeConcernmajorityD.使用了复合片键答案:A解析:单调递增片键导致写操作集中到最后一个chunk,使其不断膨胀超过最大拆分阈值,形成jumbochunk。6.在Redis7.2中,以下哪项配置可最大限度降低RDB快照对请求延迟的影响?A.rdbcompressionnoB.save6010000C.rdb-save-incremental-fsyncyesD.repl-diskless-syncyes答案:C解析:incremental-fsync把大页写拆成4KB粒度,避免一次性刷盘造成秒级卡顿。7.某ClickHouse23.3表使用MergeTree引擎,按dt分区、按id排序,查询SELECTmax(score)FROMtableWHEREid=123456,下列哪项优化手段可减少读取数据量?A.增加分区粒度B.启用PREWHEREC.增加background_pool_sizeD.将max_threads调大答案:B解析:PREWHERE先利用主键索引过滤granule,再读取score列,减少IO。8.在TiDB7.1中,当统计信息健康度低于何值时,优化器会拒绝使用索引而退回全表扫?A.0.3B.0.5C.0.7D.0.9答案:B解析:健康度<0.5表示修改行数超过50%,优化器认为直方图失真严重,倾向全表扫。9.SQLServer2025行存储表开启延迟持久化后,以下哪种故障可能导致已提交事务丢失?A.操作系统崩溃B.数据库镜像故障转移C.检查点进程挂起D.事务日志备份链断裂答案:A解析:延迟持久化只把日志缓冲写入内存,未落盘,操作系统崩溃导致内存丢失。10.某MySQL实例使用组复制,单节点网络分区后剩余节点数小于group_replication_consistency=AFTER要求,此时新事务会:A.立即提交B.等待直到分区恢复C.回滚并报错D.降级为EVENTUAL答案:B解析:AFTER要求至少半数节点落盘,不足时事务挂起,保证一致性。二、多项选择题(每题3分,共15分)11.以下哪些做法可有效降低PostgreSQLWAL写放大?A.提高checkpoint_timeoutB.开启full_page_writesC.使用lz4压缩D.提高shared_buffers答案:A、C、D解析:延长checkpoint_timeout减少刷脏频率;lz4降低wal_compression体积;提高shared_buffers减少每次修改的页面数。full_page_writes反而增加WAL。12.对Oracle21c的JSON列使用以下哪些函数可导致使用JSON搜索索引?A.JSON_VALUEB.JSON_TABLEC.JSON_EXISTSD.JSON_SCALAR答案:A、C解析:JSON_VALUE与JSON_EXISTS可映射到搜索索引路径,JSON_TABLE仍需全扫描。13.在MySQL8.0中,以下哪些指标可直接通过performance_schema获取?A.行锁等待次数B.临时表磁盘创建次数C.索引页分裂次数D.线程池队列长度答案:A、B、D解析:index_page_splits属于InnoDBmetrics,需查information_schema.innodb_metrics。14.某Elasticsearch8.11集群写入吞吐不足,以下哪些调优手段可能有效?A.提高refresh_intervalB.启用indexingpressure保护C.增加translogflush阈值D.使用append-onlymapping答案:A、C、D解析:提高refresh_interval减少segment刷新;调大translogflush阈值降低磁盘写;append-only禁用doc_values可提速。indexingpressure是背压保护,非提速手段。15.在TiKV中,以下哪些场景会触发Region分裂?A.数据量超过region-split-sizeB.同一事务写入跨多个RegionC.热点key顺序写入D.coprocessor扫描行数过多答案:A、C解析:超过阈值或热点顺序写导致PD调度分裂。跨Region事务与coprocessor扫描不触发。三、判断题(每题1分,共10分)16.MySQL8.0的hashjoin无需索引即可用于非等值连接。答案:错解析:hashjoin仅支持等值连接,非等值需回退到nestloop。17.PostgreSQLBRIN索引适合高并发点查。答案:错解析:BRIN为块级索引,适合顺序存储的范围扫描,点查精度低。18.Oracle21c的In-Memory列格式与行格式可同时存在同一表。答案:对解析:双格式存储,行格式保证OLTP,列格式加速分析。19.MongoDB复合索引字段顺序对选择性无影响。答案:错解析:最左前缀原则决定选择性,顺序错误导致索引失效。20.Redis7.2的IO多线程默认开启且线程数等于CPU核数。答案:错解析:io-threads默认关闭,需手动设置且建议不超过8。21.ClickHouse的Join表引擎支持任意类型等值连接。答案:错解析:Join引擎仅支持内存哈希连接,且右表必须能全部装入内存。22.SQLServer的列存储索引可加速DELETE操作。答案:错解析:列存储对DELETE需标记删除位图,性能低于行存储。23.TiDB的TiFlash副本可提供一致性快照读。答案:对解析:TiFlash通过RaftLearner保证与TiKV一致性快照。24.Elasticsearch8的frozentier节点必须挂载对象存储。答案:对解析:frozentier依赖可搜索快照,底层为对象存储。25.Cassandra的LCS策略比STCS策略写放大更高。答案:对解析:LeveledCompactionStrategy保证读放大低,但写放大高。四、填空题(每空2分,共20分)26.MySQL8.0中,把InnoDB脏页比例控制在innodb_max_dirty_pages_pct_lwm以下,可提前__________,避免瞬间__________。答案:启动刷脏、IO尖刺27.PostgreSQL15通过__________参数可让vacuum进程在表上持有SHAREUPDATEEXCLUSIVE锁时间缩短,降低阻塞。答案:vacuum_defer_cleanup_age28.Oracle21c的AutomaticIndexing在__________阶段会把未使用索引加入候选删除列表。答案:QUARANTINE29.MongoDB7使用__________命令可手动拆分jumbochunk,参数bounds指定拆分范围。答案:splitChunk30.Redis7.2的__________算法可在RDB生成时同步回收过期键,减少内存峰值。答案:lazyfree-lazy-expire31.ClickHouse23.3的__________设置可让聚合查询在内存不足时溢出到磁盘。答案:max_bytes_before_external_group_by32.TiDB7.1的__________系统表可查看某条SQL被TiFlash拒绝的原因。答案:information_schema.tiflash_replica33.SQLServer2025的__________功能可在不重建列存储索引的情况下重新组织行组。答案:REORGANIZE…WITH(COMPRESS_ALL_ROW_GROUPS=ON)34.Elasticsearch8使用__________缓存来避免多次解析同样的searchtemplate。答案:scriptcache35.Cassandra4的__________压缩策略可同时降低读放大与写放大,适合时序数据。答案:TimeWindowCompactionStrategy五、简答题(每题8分,共24分)36.某电商大促期间,MySQL8.0主库CPU飙高,慢查询日志显示大量SELECT…FORUPDATEWHEREsku_id=?ANDstatus=0ORDERBYidLIMIT1。表数据量20亿行,explain显示Usingwhere;Usingfilesort。已存在索引(sku_id,status)。请给出三步优化方案并说明原理。答案:1)扩展索引为(sku_id,status,id)形成覆盖索引,消除filesort,利用索引有序性直接取第一条。2)将FORUPDATE改为SKIPLOCKED,避免锁等待导致的线程堆积。3)开启innodb_lock_schedule_algorithm=vats,让高并发锁请求按到达顺序排队,减少线程上下文切换。37.PostgreSQL15分区表measurement按logdate做月分区,业务出现“分区裁剪失效”导致全表扫描。请列举三种常见原因并给出排查命令。答案:1)分区键使用表达式to_timestamp(create_time),需改写成单调列。排查:explain(analyze,buffers)select…wherecreate_timebetween…2)分区约束未同步,使用\d+measurement_202605查看check约束缺失。3)参数constraint_exclusion未开启,showconstraint_exclusion;应为partition。4)查询条件使用OR连接非分区列,导致Postgres无法裁剪。5)使用了stable函数如now()±interval'1day',需改用literal常量。38.某Redis7.2集群使用32GB物理机,实际内存占用28GB,淘汰策略volatile-lru,但写入时报OOM。简述排查思路并给出两条根因。答案:1)使用infomemory查看used_memory_human与used_memory_peak_human,发现峰值30GB,超过maxmemory28GB。2)检查infostats中的evicted_keys为0,说明淘汰未触发,原因为所有key都没有过期时间。3)检查clientoutputbuffer与infoclients发现部分客户端堆积,占用2GB,未及时释放。根因:①所有数据均为持久键,volatile-lru无法淘汰;②outputbuffer未及时释放,导致内存统计超限。六、计算题(11分)39.某业务表orders行宽0.8kB,日均增量1亿行,MySQL8.0使用InnoDB,页大小16kB,填充因子默认15/16,写缓冲池命中率99%,磁盘随机写IOPS上限8000。(1)计算每日新增数据页数N(含changebuffer合并)。(2)若innodb_io_capacity=2000,后台刷脏能否在24h内完成?给出推导。(3)若将innodb_change_buffer_max_size调至50,可减少多少随机写?答案:(1)每页可存行数:16kB×15/16÷0.8kB≈187行每日页数:1×10^8÷187≈534759页(2)后台刷脏上限:innodb_io_capacity=2000IOPS24h可刷页数:2000×3600×24=1.728×10^8页远大于53万页,故可完成。(3)changebuffer合并后,二级索引更新随机写减少比例约等于命中率,假设二级索引更新占50%,则随机写减少:534759×50%×99%≈264708页换算IOPS:264708÷(24×3600)≈3.06IOPS,占比极低,但对延迟敏感型业务仍有意义。七、综合设计题(20分)40.某物流平台订单轨迹表trace(order_id,trace_time,loc,status),日均写入20亿条,峰值QPS30万,查询场景两类:A.实时查询:根据order_id查最近7天轨迹,返回按trace_time倒序前100条,平均耗时需<50ms,P99<200ms。B.离线分析:按小时统计各status订单量,扫描30天数据,要求分钟级完成。现有MySQL8.0主从,磁盘为NVMeSSD,64核256GB,但查询已无法满足。请给出完整重构方案,含数据模型、分区策略、索引设计、读写分离、缓存、一致性保障及容量评估,并说明为何原MySQL架构失效。答案:1)失效原因:单行0.2kB,7天数据约140亿行,MySQLB+树高度>4,随机IO放大约100倍,回表成本极高。大范围扫描导致InnoDB缓冲池污染,实时查询与离线分析互相干扰。二级索引插入产生changebuffer随机写,磁盘IOPS达上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论