直接路径法和在线重定义分区比较

本文对比了直接路径法分区和在线重定义分区两种方法,并详细记录了每种方法的执行时间和产生的日志大小,最终总结了两种方法各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在对大表进行分区时,有两种方式,一种是直接路径法分区,另一种是在线重定义分区,脚本示例如附录。最近对公司一张600多万的表进行分区,表上有9个索引,索引占的空间比表大。对比了下两种方式的优缺点:

a. 用直接路径转换分区
     只是分区完成耗时2分9秒,共产生5.18M日志。
     建索引耗时8分39秒,产生5.5M日志。
     总计:耗时10分48秒,产生10.68M。
     原理:直接路径插入
     优点:速度快,产生redo少
     缺点:要停服务

b. 在线重定义
     只是分区完成耗时3分15秒,共产生183M日志。

     建索引耗时8分39秒,产生5.5M日志。

     总计:耗时11分54秒,产生188.5M。
     原理:利用物化视图更新表
     优点:不用停服务,适合7*24小时
     缺点:慢一点点,会锁表,对DML语句造成等待;如果在客户端操作断开,那重定义会在后台运行,对你是不可见。

总计:两种方式都各自有优势,具体选择哪种方式要看你的业务场景。

 

附录:

create table test as select * from dba_objects;
alter table test  add constraint PK_ID primary key (object_id);
create index ind_t_object_id on test(data_object_id);
create table test_partition
(
  OWNER          VARCHAR2(30),
  OBJECT_NAME    VARCHAR2(128),
  SUBOBJECT_NAME VARCHAR2(30),
  OBJECT_ID      NUMBER,
  DATA_OBJECT_ID NUMBER,
  OBJECT_TYPE    VARCHAR2(19),
  CREATED        DATE,
  LAST_DDL_TIME  DATE,
  TIMESTAMP      VARCHAR2(19),
  STATUS         VARCHAR2(7),
  TEMPORARY      VARCHAR2(1),
  GENERATED      VARCHAR2(1),
  SECONDARY      VARCHAR2(1)
)partition by list (object_type)
(
  partition p1 values ('TABLE'),
  partition p2 values ('TABLE PARTITION'),
  partition p3 values ('INDEX'),
  partition p4 values ('INDEX PARTITION'),
  partition p5 values ('PROCEDURE'),
  partition p6 values ('FUNCTION'),
  partition other values (default)
);

 alter table test_partition  add constraint PK_PID primary key (object_id);

方式一手工分区:

alter table test_partition nologging;
insert /*+append*/ into test_partition select * from test;
commit;
alter table test_partition logging;
create index ind_tp_object_id on test_partition(data_object_id) nologging;
ALTER TABLE test RENAME TO test_BAK;
ALTER TABLE test_partition RENAME TO test;
exec dbms_stats.gather_table_stats(user,'test',cascade=>true);

 

方式二在线重定义分区:
在线重定义脚本(具体的实验请见 http://blog.youkuaiyun.com/stevendbaguo/article/details/9849311):
EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'TEST', DBMS_REDEFINITION.CONS_USE_PK);
EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'TEST', 'TEST_PARTITION');
EXEC dbms_redefinition.sync_interim_table(user, 'TEST','TEST_PARTITION') ;
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'TEST', 'TEST_PARTITION');

create index ind_tp_object_id on test_partition(data_object_id) nologging;
ALTER TABLE test RENAME TO test_BAK;
ALTER TABLE test_partition RENAME TO test;
exec dbms_stats.gather_table_stats(user,'test',cascade=>true);

### Ubuntu 安装过程中的自动分区手动分区 #### 自动分区概述 当用户选择 **自动分区** 的方式时,Ubuntu 安装程序会根据硬盘的整体容量以及预设的标准来分配空间。这种方式适合新手用户,因为它简化了安装流程并减少了错误的可能性[^1]。 - 自动分区通常会在磁盘上创建几个主要的分区: - `/` (根目录):这是操作系统的核心文件所在的位置。 - `swap` 或者交换分区/文件:用于虚拟内存管理,在物理内存不足的情况下提供额外的空间支持。 - 如果是 UEFI 启动模式,则还会自动生成 EFI 系统分区 (`/boot/efi`) 来存储启动所需的文件[^3]。 这种策略的优点在于快速简便,不需要深入了解底层细节就可以完成系统的部署;然而缺点也很明显——缺乏灵活性,无满足特定用途下的个性化需求。 #### 手动分区详解 相比之下,**手动分区** 提供了极大的自由度让用户能够精确控制每一个分区的具体参数,比如位置、大小、挂载点文件系统类型等设置[^2]。 以下是进行手工划分的主要考虑因素: - **根分区 (/)** 这是最基本也是最重要的一个逻辑卷或者实际物理区域,所有的基础软件包都将被放置于此处。一般建议至少留出约20GB以上的可用空间以便日后更新维护之需。 - **家目录 (~ or /home)** 用户数据个人偏好设定存放在/home下各自的子文件夹里。将其单独设立成独立区段可以保护个人资料不受重新安装OS的影响。 - **引导加载器(/boot)** 包含kernel镜像其他必要的开机资源的小型专用区块。除非特殊情况下才需要调整其尺寸,默认值通常是足够的。 - **交换( swap )** 根据RAM的实际数量决定合适的规模。现代计算机拥有较大的内存条,因此可能不再必要建立庞大的Swap Area 。不过仍然保留一定量作为应急措施不失为明智之举。 - **ESP(EFI System Partition)** 对于采用UEFI而非传统BIOS架构的新机型而言必不可少的部分。它负责保存固件初始化阶段读取到的信息从而实现成功进入GRUB或其他多重选项菜单界面的目的。 #### 如何执行具体的手工分片动作? 在图形化的Ubiquity工具里面找到Advanced Features按钮之后就能开启定制化布局向导页面。按照提示逐步定义各项属性直至确认无误提交为止即可。 ```bash # 示例命令行操作(仅作参考) sudo fdisk -l # 查看当前设备列表 sudo mkfs.ext4 /dev/sdaX # 将选定驱动器格式转换为目标形式(ext4为例) sudo mount /dev/sdaX /mnt # 把新制备好的单元连接至临时路径准备后续拷贝工作 ``` 以上就是关于ubuntu 自动分区对比手动分区的一些基本信息及相关指导说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值