段头块的结构和包含的信息

TOP 第十二章 之 段头块的争用

继续贴出 Troubleshooting Oracle Performance 一书第十二章《优化物理设计》的翻译稿的部分节录。最近真是筋疲力竭。翻译不止是考验技术水平、英文水平、中文驾驭能力,还有耐心和信心。



段头块的争用

每个表和索引段都会有一个头数据块(header block)。这个数据块包含以下元数据:关于这个段的高水位(highwatermark)的信息,组成这个段的区间(extent)的列表以及关于空闲空间的信息。为了管理空闲空间,根据使用的段空间管理方式的不同,头数据块会含有一个空闲列表(freelist)或者一组包含自动段空间管理(automatic segment space management)的信息的数据块。比较典型的情况是,段头数据块在多个进程并发地修改其内容时会发生争用。注意,头数据块在以下几种情形下将会发生修改:

  • 插入语句使得有必要提高高水位
  • 插入语句使得有必要分配新的区间
  • 删除、插入或更新语句使得有必要修改空闲列表

解决这些问题的一个可能思路是,对这个段进行分区以将压力分布到多个段头块上去。虽然有时候根据负载以及分区键值(partition key)其它的分区方式也可以实现,但是在大部分时候,可以通过散列分区实现这一点。然而,如果是由于第二或第三种情形导致这个问题,还可以使用其它的解决办法。对于第二种情形,可以使用更大的区间(extent)来解决。这样,新的区间分配将很少发生。对于第三种情形,空闲队列(freelist)可以被空闲队列组(freelist group)移动到其它数据块,这对于使用自动段空间管理模式(automatic segment space management)的表空间不适合。事实上,在使用多个空闲列表组的时候,空闲列表就不再被存储在段头数据块(segment header block)中了(它们被分布到与参数FREELIST GROUPS数量一致的数据块中,这样在它们上面的争用将减少,而不仅仅是将争用移往别处而已)。另一个可能是使用自动段空间管理的表空间而不是空闲列表段空间管理的表空间。

注意:长期存在一个关于Oracle数据库引擎的神话是,空闲列表组只有在使用RAC(Real Application Cluster)的时候才是有用的。大谬。空闲列表组在任何数据库中都是有用的。之所以特别强调这一点是因为我看到听到这种错误信息太多次了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC中信息法用于创建地图符号数据结构,可以使用CObList类来存储符号信息。具体步骤如下: 1. 创建一个符号信息类,例如CSymbolBlock。 2. 在符号信息类中定义符号属性,例如颜色、形状等。 3. 创建一个CObList对象,用于存储符号信息。 4. 在CView中的OnDraw函数中遍历CObList对象,根据每个符号信息的属性绘制符号。 以下是一个简单的示例代码: ``` // CSymbolBlock.h class CSymbolBlock : public CObject { public: CSymbolBlock(COLORREF color, int shape); virtual ~CSymbolBlock(); COLORREF m_color; int m_shape; }; // CSymbolBlock.cpp CSymbolBlock::CSymbolBlock(COLORREF color, int shape) { m_color = color; m_shape = shape; } CSymbolBlock::~CSymbolBlock() { } // CMyView.cpp void CMyView::OnDraw(CDC* pDC) { // 创建CObList对象 CObList listSymbols; // 添加符号信息 listSymbols.AddTail(new CSymbolBlock(RGB(255, 0, 0), 1)); listSymbols.AddTail(new CSymbolBlock(RGB(0, 255, 0), 2)); listSymbols.AddTail(new CSymbolBlock(RGB(0, 0, 255), 3)); // 遍历符号信息,绘制符号 POSITION pos = listSymbols.GetHeadPosition(); while (pos != NULL) { CSymbolBlock* pSymbol = (CSymbolBlock*)listSymbols.GetNext(pos); // 设置画笔属性 CPen pen(PS_SOLID, 1, pSymbol->m_color); pDC->SelectObject(&pen); // 绘制符号 switch (pSymbol->m_shape) { case 1: pDC->Rectangle(10, 10, 20, 20); break; case 2: pDC->Ellipse(30, 10, 40, 20); break; case 3: pDC->RoundRect(50, 10, 60, 20, 5, 5); break; default: break; } } // 释放符号信息 pos = listSymbols.GetHeadPosition(); while (pos != NULL) { delete listSymbols.GetNext(pos); } listSymbols.RemoveAll(); } ``` 在上述示例代码中,CSymbolBlock类表示符号信息包含了颜色和形状两个属性。CObList类用于存储符号信息。在OnDraw函数中,首先创建CObList对象并添加符号信息,然后遍历CObList对象,根据每个符号信息的属性绘制符号。最后释放符号信息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值