move和shrink的redo size的一点探讨

Oracle非归档模式测试
博客介绍了move和shrink机制的相关链接,给出测试环境,包括Oracle版本为10.1.0.2.0,操作系统为win2000 server,重点进行了非归档模式下的测试。

我们先了解一下move和shrink的机制:

http://blog.youkuaiyun.com/dlinger/archive/2004/07/12/39667.aspx

http://blog.youkuaiyun.com/dlinger/archive/2004/07/15/42491.aspx

测试环境:

oracle: 10.1.0.2.0? os:win2000 server?

非归档模式下的测试:

关于日志的问题,我们对比了同样数据量和分布状况的两张table,在moveshrink下生成的redo sizetable上没有index的情况下):

SQL> select tablespace_name,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces

2 where tablespace_name in('ASSM','HWM');

TABLESPACE_NAME            SEGMENT_SPACE_MANAGEMENT

------------------------------ ------------------------

ASSM                                       AUTO

HWM?                                       MANUAL

SQL> create table my_objects? tablespace ASSM as select * from all_objects where rownum<20000;

Table created

 

SQL> create table my_objects1 tablespace HWM ?as select * from all_objects where rownum<20000;

Table created

 

SQL> select bytes/1024/1024 from user_segments where segment_name = 'MY_OBJECTS';

BYTES/1024/1024

---------------

2.1875

 

SQL> delete from my_objects where object_name like '%C%';

7278 rows deleted

SQL> delete from my_objects1 where object_name like '%C%';

7278 rows deleted

SQL> delete from my_objects where object_name like '%U%';

2732 rows deleted

SQL> delete from my_objects1 where object_name like '%U%';

2732 rows deleted

SQL> commit;

Commit complete

SQL> alter table my_objects enable row movement;

Table altered

 

SQL> select value from v$mystat, v$statname

  2    where v$mystat.statistic# = v$statname.statistic#

  3    and v$statname.name = 'redo size';

VALUE

----------

27808792

 

SQL> alter table my_objects shrink space;

Table altered

 

SQL> select value from v$mystat, v$statname

  2  where v$mystat.statistic# = v$statname.statistic#

  3  and? v$statname.name = 'redo size';

   VALUE

----------

 32579712

 

SQL> alter table my_objects1 move;

Table altered

 

SQL> select value from v$mystat, v$statname

  2  where v$mystat.statistic# = v$statname.statistic#

  3  and? v$statname.name = 'redo size';

    VALUE

----------

   32676784

对于table my_objects

进行shrink,产生了32579712 – 27808792=4770920,约 4.5M redo

table my_objects1进行move,产生了32676784-32579712=?97072,95Kredo size

那么,与move比较起来,shrink的日志写要大得多。

 

move生成的日志量,在归档和非归档模式下是不一样的,具体信息,参考:

http://blog.youkuaiyun.com/dlinger/archive/2004/08/04/61874.aspx

 

使用logmnr来分析move和shrink的操作:

 

move:

SQL> select operation,count(*)?? from v$logmnr_contents group by operation;

OPERATION                        COUNT(*)
      -------------------------------- ----------
     COMMIT                      36
     DDL                           1
     DELETE                        1
     INTERNAL                     137
     START                        37
     UNSUPPORTED                   46
     UPDATE                   32

7 rows selected

shrink:

 

SQL> select operation,count(*) from v$logmnr_contents group by operation;

OPERATION                          COUNT(*)
     -------------------------------- ----------
     COMMIT                                  171
     DDL                                       1
     DELETE                                 6248
     INSERT                                 6248
     INTERNAL                                 96
     START                                   171
     UNSUPPORTED                              33
     UPDATE                                   26

8 rows selected

 

我们看到,shrink的操作中,比move多了很多的delete和insert的操作,

这应该是shrink生成的redo size较多的原因了。

 

那么,我们在归档模式下进行shrink操作,生成的redo size和非归档的一样,

说明shrink不像move那样,受是否归档的影响,推测这也是因为shrink操作多是delete和insert的原因吧。

那么。table nologging的状态应该对shrink的redo size也没有影响了。

<think> 首先,用户的问题是:“我想获取flex-growflex-shrink的详细解释”,意思是“我想获取flex-growflex-shrink的详细解释”。用户参考了站内引用,包括[1]、[2]、[3]、[4],这些引用提供了关于CSS中flex-growflex-shrink属性的信息。 我的响应需要遵循系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如:[^1]。 此外,用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 用户的上一次问题我的回答:用户上一次的问题是关于flex-growflex-shrink的详细解释,引用了一些资料。我需要参考这些引用来构建我的回答。 引用摘要: - [^1]:讨论了flex-growflex-shrink,控制Flexbox项目的大小。建议先熟悉基础概念。 - [^2]:解释了flex是flex-grow、flex-shrinkflex-basis的简写。例如,flex: 1; 设置flex-grow:1, flex-shrink:1, flex-basis:0。 - [^3]:详细描述了flex-grow、flex-shrinkflex-basis的含义协同作用。flex-basis设置初始大小,flex-grow控制多余空间的扩展比例,flex-shrink控制空间不足时的收缩比例。 - [^4]:专注于flex-shrink,定义在容器空间不足时项目的收缩比例。 用户的当前需求是获取flex-growflex-shrink的详细解释。 响应结构: 1. **介绍**:简要介绍flex-growflex-shrink在Flexbox中的作用。 2. **详细解释**:逐步解释每个属性: - flex-grow:如何工作,示例。 - flex-shrink:如何工作,示例。 - 强调它们与flex-basis的协同作用(根据引用)。 3. **示例**:提供代码示例来演示。 4. **总结**:简要总结它们的用途。 5. **相关问题**:生成相关问题。 引用标识:在回答中,当引用某个段落时,添加[^n]标识。例如,如果引用[^2]的解释,就在末尾加[^2]。 数学表达式:如果有数学概念(如比例计算),使用LaTeX格式。例如,比例可以用分数表示,如$1/2$。 使用中文回答。 生成相关问题:在最后添加相关问题。 最终响应结构: - 清晰段落。 - 使用HTML标签如<code>或Markdown代码块显示代码示例。 - 相关问题引用标识。 内容大纲: 1. **介绍**:Flexbox中flex-growflex-shrink的作用是基于容器空间调整项目大小。 2. **Flex-grow详细解释**: - 定义:控制项目在有多余空间时的扩展比例。 - 值:无单位数值,默认0(不扩展)。 - 示例:如果有两个项目,flex-grow:1 flex-grow:2,后者扩展更多。 - 引用[^1]、[^2]、[^3]。 3. **Flex-shrink详细解释**: - 定义:控制项目在空间不足时的收缩比例。 - 值:无单位数值,默认1(按比例收缩)。 - 示例:如果空间不足,flex-shrink值大的收缩更多。 - 引用[^4]。 4. **协同作用**:与flex-basis一起,flex-basis设置初始大小,然后在剩余空间上应用grow/shrink。 5. **代码示例**:显示一个简单的Flexbox布局代码。 6. **总结**:强调它们的实用性。 7. **相关问题**:生成2-3个相关问题。 相关问题想法: 1. flex-basis是什么?如何与grow/shrink交互? 2. 在实际项目中如何优化使用flex-growflex-shrink? 3. Flexbox布局中常见问题及解决方案。 确保LaTeX正确:如果有数学,如比例计算,使用$...$。 例如:比例计算可以用$\frac{a}{b}$表示。 </think> ### Flex-grow Flex-shrink 属性的详细解释 在 CSS Flexbox 布局中,`flex-grow` `flex-shrink` 是两个核心属性,用于控制弹性项目(flex item)在容器空间变化时的伸缩行为。它们与 `flex-basis` 属性协同工作,共同定义了项目的尺寸调整逻辑。下面我将逐步解释每个属性的含义、工作原理应用示例。 #### 1. **Flex-grow:控制项目在有多余空间时的扩展** - **定义**:`flex-grow` 属性指定当容器内有剩余空间时,项目如何按比例扩展以填充这些空间。它是一个无单位的数值,默认值为 `0`(表示项目不会主动扩展)。 - **工作原理**: - 当所有项目的总宽度小于容器宽度时,多余空间会按 `flex-grow` 值的比例分配。 - 比例计算基于数值的相对大小。例如: - 如果项目 A 的 `flex-grow: 1`,项目 B 的 `flex-grow: 2`,则多余空间会被分割为 $\frac{1}{3}$ $\frac{2}{3}$(即 B 扩展的空间是 A 的两倍)。 - 数学表达式:项目分配的额外空间量 = $\frac{\text{flex-grow值}}{\text{所有项目flex-grow值之}} \times \text{多余空间大小}$[^1][^2][^3]。 - **示例场景**: - 假设容器宽度为 `500px`,有两个项目:项目 A(宽度 `100px`,`flex-grow: 1`)项目 B(宽度 `100px`,`flex-grow: 2`)。 - 多余空间 = `500px - (100px + 100px) = 300px`。 - 项目 A 扩展空间 = $\frac{1}{3} \times 300\text{px} = 100\text{px}$,最终宽度 `200px`。 - 项目 B 扩展空间 = $\frac{2}{3} \times 300\text{px} = 200\text{px}$,最终宽度 `300px`。 - **代码示例**: ```css .container { display: flex; width: 500px; } .item-a { flex-grow: 1; /* 默认 flex-shrink:1, flex-basis:auto */ } .item-b { flex-grow: 2; } ``` 在此示例中,项目 B 会占据更多多余空间[^2][^3]。 #### 2. **Flex-shrink:控制项目在空间不足时的收缩** - **定义**:`flex-shrink` 属性指定当容器空间不足时,项目如何按比例收缩以适应容器。它同样是无单位的数值,默认值为 `1`(表示项目会按比例收缩),值 `0` 表示项目不会收缩。 - **工作原理**: - 当所有项目的总宽度大于容器宽度时,空间不足的部分会按 `flex-shrink` 值的比例从项目中扣除。 - 比例计算:收缩量基于项目的初始大小 `flex-shrink` 值。例如: - 如果项目 A 的 `flex-shrink: 1`,项目 B 的 `flex-shrink: 2`,则空间不足部分优先从 B 扣除(B 收缩量是 A 的两倍)。 - 数学表达式:项目收缩量 = $\frac{\text{flex-shrink值} \times \text{项目初始大小}}{\text{所有项目(flex-shrink值} \times \text{初始大小)之}} \times \text{不足空间大小}$[^1][^3][^4]。 - **示例场景**: - 假设容器宽度为 `300px`,有两个项目:项目 A(宽度 `200px`,`flex-shrink: 1`)项目 B(宽度 `200px`,`flex-shrink: 2`)。 - 不足空间 = `(200px + 200px) - 300px = 100px`。 - 项目 A 收缩量 = $\frac{1 \times 200}{(1 \times 200) + (2 \times 200)} \times 100\text{px} = \frac{200}{600} \times 100\text{px} \approx 33.3\text{px}$,最终宽度 `166.7px`。 - 项目 B 收缩量 = $\frac{2 \times 200}{600} \times 100\text{px} \approx 66.7\text{px}$,最终宽度 `133.3px`。 - **代码示例**: ```css .container { display: flex; width: 300px; } .item-a { flex-shrink: 1; /* 默认 flex-grow:0, flex-basis:auto */ } .item-b { flex-shrink: 2; } ``` 这里,项目 B 会收缩更多以维持布局[^4]。 #### 3. **flex-grow flex-shrink 的协同作用** - 这两个属性通常与 `flex-basis` 结合使用(后者设置项目的初始大小)。`flex-basis` 定义了分配多余或不足空间之前的基准尺寸(如 `flex-basis: 100px` 或 `auto`)。 - **关键点**: - 在 Flexbox 中,`flex-grow` 仅在有多余空间时生效,而 `flex-shrink` 仅在空间不足时生效。两者不会同时作用。 - 它们通过 `flex` 简写属性设置,例如 `flex: 1 1 auto;` 等价于 `flex-grow:1; flex-shrink:1; flex-basis:auto;`。这能简化代码并确保响应式行为[^2][^3]。 - **实际应用**:在响应式布局中,常用 `flex-grow` 确保项目填满空间(如导航栏等分),而 `flex-shrink:0` 防止内容溢出(如固定侧边栏)。 #### 4. **总结** `flex-grow` `flex-shrink` 是 Flexbox 布局的核心机制,用于动态调整项目尺寸。`flex-grow` 处理扩展,`flex-shrink` 处理收缩,两者基于比例系统工作,确保布局灵活适应容器变化。理解它们的协同作用能帮助你创建更健壮的响应式设计[^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值