A-speed

每个人都是🏆
  新随笔  :: 管理

Oracle大表索引创建阻塞测试报告

Posted on 2026-03-23 10:30  a-speed  阅读(0)  评论(0)    收藏  举报

Oracle大表索引创建阻塞测试报告

测试目的

验证在大表中创建索引时,是否会阻塞并发的DML操作(插入、更新、删除)。

测试环境

  • 数据库版本: Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0
  • 连接用户: test01@PDBTEST
  • 测试工具: SQL*Plus

测试方案

  1. 创建大表: 创建包含50,000条记录的表,包含10个大字段(VARCHAR2类型)
  2. 创建复合索引: 在多个大字段上创建复合索引,确保索引创建时间较长
  3. 并发DML操作: 在索引创建过程中执行1000个混合DML操作(插入、更新、删除)
  4. 验证结果: 检查索引状态和数据完整性

测试结果

1. 大表创建

  • 记录数: 50,000条
  • 创建耗时: 3309百分之一秒(约33秒)
  • 表结构: 包含12个字段(10个VARCHAR2字段,2个DATE字段)

2. 索引创建

  • 索引名称: IDX_LARGE_TABLE_COMPLEX
  • 索引类型: 复合索引(包含col2, col3, col4, col5, col6字段)
  • 创建耗时: 2999百分之一秒(约30秒)
  • 索引状态: VALID

3. DML操作执行

  • 操作总数: 1000个混合操作(插入、更新、删除)
  • 执行耗时: 3235百分之一秒(约32秒)
  • 操作分布:
    • 插入操作: 333个
    • 更新操作: 334个
    • 删除操作: 333个

4. 验证结果

  • 索引状态:

    • SYS_C008561 (主键索引): VALID
    • IDX_LARGE_TABLE_COMPLEX (复合索引): VALID
  • 数据完整性:

    • 表中实际记录数: 50,001条
    • 更新的记录数: 334条
    • 插入的记录数: 1条

结论

大表创建索引时不会阻塞DML操作

测试结果表明:

  1. 并发执行: 在创建耗时约30秒的索引过程中,1000个DML操作能够正常执行完成
  2. 操作成功: DML操作(插入、更新、删除)都成功执行,没有出现阻塞或死锁
  3. 数据一致性: 索引状态正常(VALID),数据完整性保持良好
  4. 性能影响: 虽然索引创建会对性能产生一定影响,但不会完全阻塞DML操作

技术原理

Oracle数据库在创建索引时使用共享表锁(Share Table Lock),这种锁允许:

  • 并发的DML操作(INSERT, UPDATE, DELETE)
  • 并发的查询操作(SELECT)
  • 但会阻塞其他需要独占锁的操作(如ALTER TABLE)

建议

  1. 在线索引创建: 对于生产环境的大表,可以安全地在线创建索引
  2. 性能考虑: 虽然不会阻塞,但索引创建会增加系统负载,建议在业务低峰期执行
  3. 监控建议: 创建索引过程中监控数据库性能和会话等待情况
  4. 并发控制: 对于超大规模表(亿级记录),建议考虑分批创建或使用在线重定义技术

测试脚本

测试脚本位于: /home/ora23/test_large_table_index.sql