当前位置: 首页 > news >正文

存储结构及关系(一)

学习目标

  • 描述数据库的逻辑结构
  • 列出段类型及其用途
  • 列出控制块空间使用的关键字
  • 获取存储结构信息

在这里插入图片描述
在这里插入图片描述

段的类型

段是数据库中占用空间的对象。它们使用数据库数据文件中的空间。介绍不同类型的段。

表是在数据库中存储数据的最常用方法。表段用于存储既没有集群也没有分区的表的数据。表段中的数据没有特定的存储顺序,数据库管理员(DBA)对表中块中的行位置几乎没有控制。一个表段中的所有数据必须存储在一个表空间中。

表分区

当数据库中的表具有高并发使用时,可伸缩性和可用性是主要关注的问题。在这种情况下,表中的数据可能存储在几个分区中,每个分区驻留在不同的表空间中。Oracle服务器目前支持按键值范围、按散列算法和按值列表进行分区。
如果对表进行了分区,则每个分区都是一个段,并且可以指定存储参数以独立控制它们。使用这种类型的段需要在Oracle9i企业版中使用分区选项。

集群

与表一样,集群也是一种数据段。集群中的行是根据键列值存储的。集群可以包含一个或多个表。集群中的表属于同一段,具有相同的存储特征。可以使用索引或散列算法访问集群表中的行。

索引

一个特定索引的所有条目都存储在一个索引段中。如果一个表有三个索引,则使用三个索引段。此段的目的是根据指定的键查找表中行的位置。

在这里插入图片描述

  1. 索引组织表(Index-Organized Table)

    • 数据直接存储在索引中,基于键值进行组织。
    • 不需要额外的表查找,数据可以直接从索引树中检索。
  2. 索引分区(Index Partition)

    • 索引可以被分区并分布在多个表空间中。
    • 每个索引分区对应一个段,不能跨多个表空间。
    • 主要用于减少争用,通过分散索引的输入/输出(I/O)来提高性能。
  3. 撤销段(Undo Segment)

    • 用于存储事务在修改数据库之前的旧值。
    • 允许用户撤销对数据或索引块所做的更改。
  4. 临时段(Temporary Segment)

    • 当执行如 CREATE INDEXSELECT DISTINCTSELECT GROUP BY 等命令时,Oracle服务器尝试在内存中进行排序。
    • 如果排序所需的空间超过内存可用空间,临时结果将写入磁盘,临时段用于存储这些中间结果。

在这里插入图片描述

  1. LOB段
    表中的一个或多个列可用于存储大型对象(lob),如文本文档、图像或视频。如果列很大,Oracle服务器将这些值存储在称为LOB段的单独段中。该表只包含一个定位器或指向相应LOB数据位置的指针。
  2. 嵌套表
    表中的列可以由用户定义的表组成,就像订单中的项一样。在这种情况下,内部表(称为嵌套表)作为单独的段存储。
  3. 引导段
    引导段(也称为缓存段)由sql语句创建。创建数据库时的BSQ脚本。当实例打开数据库时,此段用于初始化数据字典缓存。
    引导段不能被查询或更新,也不需要数据库管理员进行任何维护。

存储条款优先级

    • 如果更改了存储参数,则新选项仅应用于尚未分配的区段。
    • 某些参数不能在表空间级别指定。这些参数只能在段级别指定。
    • 如果为表空间指定了最小区段大小,则该大小适用于将来为表空间中的段分配的所有区段。

Oracle 数据库中的 Extent(区)分配和释放

Extent(区)

  • 定义:Extent 是在表空间中为段(Segment)分配的一块连续的存储空间。每个 Extent 由多个数据块(Block)组成。

Extent 的分配(Allocation)

Extent 会在以下情况下被分配:

  1. 创建(Created):当创建一个新的段(例如表或索引)时,Oracle 会为该段分配一个或多个 Extent。

  2. 扩展(Extended):当段的空间不足以存储新的数据时,Oracle 会自动为该段分配更多的 Extent,以满足存储需求。

  3. 修改(Altered):在某些情况下,修改段的结构(如增加列)可能会导致需要额外的 Extent。

Extent 的释放(Deallocation)

Extent 会在以下情况下被释放:

  1. 删除(Dropped):当段被删除时,所有与该段相关的 Extent 会被释放。

  2. 修改(Altered):某些修改操作可能会导致 Extent 的释放,尤其是当段的结构被显著改变时。

  3. 截断(Truncated):当段被截断时,所有数据会被删除,相关的 Extent 可能会被释放。

使用块和空闲块

在 Oracle 数据库中,表空间(Tablespace)是用于组织和存储数据库对象的逻辑存储单元。以下是表空间中已使用和空闲 Extent 的介绍:

数据文件头部(Header)

  • 定义:当创建表空间时,数据文件中的第一个数据块或多个数据块被用作表空间的头部,用于存储关于表空间的元数据信息。

已使用 Extent 和空闲 Extent

  1. 已使用 Extent

    • 定义:当创建段(Segment)时,段会从表空间中的空闲 Extent 中分配空间,这些被段占用的连续空间被称为已使用 Extent。
    • 特点:已使用 Extent 是被段实际占用的存储空间,用于存储段的数据。
  2. 空闲 Extent

    • 定义:当段释放空间时,释放的 Extent 会成为表空间中的空闲 Extent,可供其他段使用。
    • 特点:空闲 Extent 是未被任何段占用的存储空间,可以被新创建的段或需要扩展的段使用。

操作过程

  • 段创建:当创建新的表或索引等段时,Oracle 会从表空间的空闲 Extent 中分配连续的空间给该段。

  • 段释放:当段被删除、截断或修改导致空间释放时,释放的 Extent 会成为表空间的空闲 Extent,可以被其他段使用。

优化和管理

  • 空间管理:定期进行空间管理和维护,确保表空间中有足够的空闲 Extent,避免空间不足导致性能问题。

  • 性能优化:合理分配和释放 Extent,避免空间碎片化,提高数据库性能和存储效率。

数据库块(Database Block)

数据库块的重要性

  1. 最小单位的 I/O

    • 数据库块是 Oracle 数据库中最小的 I/O 单元,所有的数据读取和写入操作都以数据库块为基本单位进行。
  2. 操作系统块的组合

    • 数据库块通常由一个或多个操作系统块组成,这取决于操作系统和数据库配置。多个操作系统块组合成一个数据库块有助于提高数据的读取和写入效率。
  3. 表空间创建时设置

    • 数据库块的大小是在创建表空间时设置的,不同的表空间可以有不同大小的数据库块。通过设置不同大小的数据库块,可以根据不同的需求来优化数据库的性能和存储管理。
  4. DB_BLOCK_SIZE 是默认块大小

    • DB_BLOCK_SIZE 是 Oracle 数据库中用于设置数据库块大小的参数,默认情况下,它定义了数据库的默认块大小。在创建表空间时,如果未指定数据库块的大小,则会使用默认的 DB_BLOCK_SIZE

数据库块的应用

  • 数据库块的大小直接影响数据库的性能和存储效率。较小的数据库块可以提高空间利用率,但可能增加 I/O 操作的开销;而较大的数据库块可以减少 I/O 操作次数,但可能造成空间浪费。

  • 通过合理设置数据库块的大小,可以根据数据库的需求来平衡性能和存储效率。

举例说明
  • 当数据库需要读取或写入数据时,数据会以数据库块为单位从磁盘读取到内存中进行处理,然后再写回磁盘。

  • 如果数据库块大小为 8KB,而操作系统块大小为 4KB,那么一个数据库块可能由两个操作系统块组成。

# 查看数据库块大小
[oracle@localhost /oracle/app/dbs]$ cd /oracle/app/dbs
[oracle@localhost /oracle/app/dbs]$ ls
hc_DBUA0.dat      init.ora           lkGUOORACLE     orapworacleSID
hc_guooracle.dat  initoracleSID.ora  lkORCL          spfileguooracle.ora
hc_oracleSID.dat  lkGUOORACL         orapwguooracle  spfileoracleSID.ora
[oracle@localhost /oracle/app/dbs]$ strings spfileoracleSID.ora | grep -i db_block
*.db_block_size=8192    

多种块大小支持
可以使用标准块大小和最多四个非标准块大小创建数据库。块大小可以是2 KB到32 KB之间的任意2次幂值。

DB_CACHE_SIZE

在 Oracle 数据库中,标准块大小是在数据库创建时使用 DB_BLOCK_SIZE 参数设置的,一旦设置后,除非重新创建数据库,否则无法更改。标准块大小通常用于 SYSTEM 和 TEMPORARY 表空间。此外,DB_CACHE_SIZE 参数用于指定标准块大小的默认缓冲区缓存大小,具体特点如下:

  • 设置方式:在数据库创建时使用 DB_BLOCK_SIZE 参数设置,决定了数据库中标准块的大小。

  • 不可更改性:一旦设置了标准块大小,通常情况下无法在不重新创建数据库的情况下更改。

  • 应用范围:标准块大小通常用于 SYSTEM 和 TEMPORARY 表空间,用于存储系统数据和临时数据。

  • DB_CACHE_SIZE 参数DB_CACHE_SIZE 参数用于指定标准块大小的默认缓冲区缓存大小。

  • 最小大小:缓冲区缓存的最小大小为一个 granule(通常为 4 MB 或 16 MB)。

  • 默认值:默认情况下,DB_CACHE_SIZE 的默认值为 48 MB。

DB_BLOCK_SIZEDB_CACHE_SIZE 初始化参数的详细介绍:

DB_BLOCK_SIZE 参数

  • 定义DB_BLOCK_SIZE 初始化参数指定数据库的标准块大小。该块大小用于 SYSTEM 表空间和任何临时表空间。

  • 默认值:除非另有指定,标准块大小也用作表空间的默认块大小。Oracle 支持最多四个额外的非标准块大小。

  • 选择标准块大小:通常应选择最常用的块大小作为标准块大小。在许多情况下,这可能是您需要指定的唯一块大小。典型的 DB_BLOCK_SIZE 设置为 4 KB 或 8 KB。如果未指定,默认数据块大小取决于操作系统,通常是足够的。

  • 不可更改性:数据库创建后,块大小无法更改,除非重新创建数据库。

DB_CACHE_SIZE 参数

  • 定义DB_CACHE_SIZE 初始化参数替代了以前版本中使用的 DB_BLOCK_BUFFERS 参数。DB_CACHE_SIZE 参数指定标准块大小缓冲区的缓存大小,标准块大小由 DB_BLOCK_SIZE 指定。

  • 向后兼容性:为了向后兼容,DB_BLOCK_BUFFERS 参数仍然有效,但它是一个静态参数,不能与任何动态调整参数结合使用。

Granule 是连续虚拟内存分配的单位。Granule 的大小取决于估计的总 SGA 大小,其计算基于 SGA_MAX_SIZE 参数的值:

  • 如果估计的 SGA 大小 < 128 MB,则 granule 大小为 4 MB。
  • 否则,granule 大小为 16 MB。

Oracle 数据库中的缓存管理

在使用非标准块大小时,如何配置和管理数据库缓冲区缓存(Database Buffer Cache)以及相关的初始化参数。

1. 数据库缓冲区缓存(Database Buffer Cache)

数据库缓冲区缓存(SGA 的一部分)用于存储数据库的数据块。数据块是数据库的基本单位,当执行查询时,Oracle 会首先尝试从缓存中读取数据,而不是从磁盘中读取。这样可以显著提高查询性能。

2. 非标准块大小(Nonstandard Block Size)

通常,Oracle 数据库的默认数据块大小是 8 KB,但在一些情况下,可能需要使用不同的块大小(例如 2 KB、4 KB、16 KB 等)。当使用非标准块大小时,必须配置相应的缓冲区缓存,以确保数据库在运行时能够处理不同大小的数据块。

3. DB_CACHE_SIZE 和 DB_nK_CACHE_SIZE 参数

  • DB_CACHE_SIZE:此参数决定了标准块大小的缓存大小。标准块大小通常是数据库实例的默认块大小(例如 8 KB)。如果不使用非标准块大小,可以仅配置此参数。
  • DB_nK_CACHE_SIZE:此参数用于指定用于特定块大小的缓存。例如,DB_2K_CACHE_SIZE 用于指定 2 KB 块大小的缓存大小,DB_8K_CACHE_SIZE 用于 8 KB 块大小的缓存大小。对于每个非标准块大小,都需要设置一个对应的 DB_nK_CACHE_SIZE 参数。
配置要求
  • 如果你打算使用多个块大小(例如 2 KB、4 KB、8 KB 等),你需要同时配置 DB_CACHE_SIZE 和至少一个 DB_nK_CACHE_SIZE 参数。
  • DB_nK_CACHE_SIZE 默认值为 0,但如果你有在线表空间使用某个特定的块大小(如 2 KB、4 KB 等),则不能将 DB_nK_CACHE_SIZE 设置为 0。

4. 平台特定的块大小限制

不同的平台有不同的块大小限制。例如:

  • 如果平台的最大块大小小于 32 KB,那么就不能设置 DB_32K_CACHE_SIZE
  • 如果平台的最小块大小大于 2 KB,那么就不能设置 DB_2K_CACHE_SIZE

因此,在配置这些参数时,必须考虑操作系统和硬件平台对块大小的限制。

5. 标准块大小的缓存

请注意,DB_nK_CACHE_SIZE 参数只能用于非标准块大小的缓存(例如 2 KB、4 KB、16 KB 等)。标准块大小的缓存始终由 DB_CACHE_SIZE 来控制,因此,不能单独为标准块大小设置 DB_2K_CACHE_SIZEDB_4K_CACHE_SIZE 等。

6. 使用 Oracle Enterprise Manager 配置额外的缓存

如果你希望通过 Oracle Enterprise Manager (OEM) 配置这些缓存参数,可以按照以下步骤操作:

  1. 登录到 Oracle Enterprise Manager 控制台。

  2. 导航到 Configuration

  3. 选择 All Initialization Parameters(所有初始化参数)。

  4. 修改相关参数,具体包括:

    • DB_2K_CACHE_SIZE
    • DB_4K_CACHE_SIZE
    • DB_8K_CACHE_SIZE
    • DB_16K_CACHE_SIZE
    • DB_32K_CACHE_SIZE
  5. 点击 OK 保存修改。

7. 配置示例

假设你有一个数据库,使用 8 KB 和 16 KB 的块大小,你可以这样配置缓存:

  • DB_CACHE_SIZE:指定 8 KB 块大小的缓存。
  • DB_16K_CACHE_SIZE:指定 16 KB 块大小的缓存。

通过合理配置这些缓存参数,可以优化数据库的性能,特别是在使用多个块大小的数据库环境中。

总结

  • DB_CACHE_SIZE 控制标准块大小的缓存大小。
  • DB_nK_CACHE_SIZE 用于控制特定非标准块大小的缓存。
  • 必须为每个使用的非标准块大小配置相应的缓存参数。
  • 配置时需要注意平台的块大小限制。
  • Oracle Enterprise Manager 提供了一个方便的界面来配置这些缓存参数。

合理的缓存配置可以显著提高数据库性能,尤其是在涉及多个表空间和块大小时。

Oracle9i 中如何创建非标准块大小的表空间


1. 非标准块大小表空间的创建

在 Oracle 中,表空间的默认块大小通常是 8 KB。但你可以使用 BLOCKSIZE 子句来创建一个具有非标准块大小的表空间。这允许你根据需要为不同类型的数据配置不同的块大小。

示例:
CREATE TABLESPACE tbs_1 
DATAFILE 'tbs_1.dbf' 
SIZE 10M BLOCKSIZE 4K;
  • BLOCKSIZE 4K:这里指定了表空间的块大小为 4 KB。
  • DATAFILE 'tbs_1.dbf' SIZE 10M:指定了表空间的文件大小为 10MB。

2. 指定块大小时的配置要求

在创建具有非标准块大小的表空间时,Oracle 数据库的缓冲区缓存(Buffer Cache)必须支持指定的块大小。因此,除了创建表空间时使用 BLOCKSIZE 子句外,还需要配置初始化参数。

缓存参数:
  • DB_CACHE_SIZE:该参数用于设置数据库缓冲区缓存的大小,缓存的块大小默认为标准块大小(例如 8 KB)。它控制数据库的标准块缓存。
  • DB_nK_CACHE_SIZE:这是针对每个非标准块大小的缓存参数。例如,如果要使用 4 KB 块大小的表空间,必须设置 DB_4K_CACHE_SIZE 参数,指示为该块大小分配缓冲区。

例如:

  • 如果要创建一个 4 KB 块大小的表空间,就必须配置 DB_4K_CACHE_SIZE 参数。

    ALTER SYSTEM SET DB_4K_CACHE_SIZE = 500M;
    
配置的规则:
  • 如果使用 BLOCKSIZE 子句指定了某个非标准块大小(例如 4 KB、2 KB 等),你必须确保 DB_nK_CACHE_SIZE 对应的缓存参数已设置,并且设置的值与块大小相匹配。

3. 限制条件

  • 临时表空间的限制
    你不能为 临时表空间(即通过 TEMPORARY 关键字指定的表空间)指定非标准块大小。

    • 例如,以下语句会失败,因为它尝试为临时表空间指定一个非标准块大小:
      CREATE TEMPORARY TABLESPACE tbs_temp
      DATAFILE 'tbs_temp.dbf'
      SIZE 10M BLOCKSIZE 4K;
      
    • 临时表空间通常用于排序、临时存储等操作,它的性能要求与常规表空间不同,因此 Oracle 禁止为其指定非标准块大小。
  • 与用户的临时表空间关联
    如果你计划将某个表空间指定为用户的临时表空间,则该表空间也不能使用非标准块大小。

4. 字典视图和查看块大小

在 Oracle 数据库中,有一个 *_TABLESPACES 字典视图(如 DBA_TABLESPACES),它显示了所有表空间的信息。自 Oracle 9i 起,添加了一个新的列 BLOCK_SIZE,它记录每个表空间所使用的块大小。

你可以通过查询字典视图来查看表空间的块大小:

SELECT TABLESPACE_NAME, BLOCK_SIZE 
FROM DBA_TABLESPACES;
输出示例:
TABLESPACE_NAME  BLOCK_SIZE
----------------  ------------
TBS_1            4096
TBS_2            8192
...

此查询将列出所有表空间及其对应的块大小(以字节为单位)。

5. 成功创建表空间的前提条件

在你能够成功创建一个具有非标准块大小的表空间之前,必须满足以下条件:

  • 缓存必须已经配置:例如,若你创建一个 4 KB 块大小的表空间,系统中必须已经设置了 DB_4K_CACHE_SIZE,并且该缓存应该是有效的(即有足够的内存来支持该缓存)。
  • 块大小匹配BLOCKSIZE 子句中指定的块大小(如 4K)必须与数据库初始化参数中的对应缓存(如 DB_4K_CACHE_SIZE)匹配。

6. 总结

  1. 创建非标准块大小表空间

    • 使用 BLOCKSIZE 子句来指定块大小,如 BLOCKSIZE 4KBLOCKSIZE 2K 等。
    • 需要确保数据库中配置了对应的缓存参数(如 DB_4K_CACHE_SIZE),否则创建表空间会失败。
  2. 缓存配置要求

    • 如果表空间使用了非标准块大小(例如 4 KB、8 KB、16 KB 等),则需要为这些块大小配置相应的缓存,如 DB_4K_CACHE_SIZE
  3. 限制

    • 不能为临时表空间指定非标准块大小。
    • 不能将非标准块大小表空间用作用户的临时表空间。
  4. 字典视图

    • 通过查询 DBA_TABLESPACES 等字典视图,可以查看表空间的块大小。

通过合理配置这些参数,可以优化数据库的性能,尤其是在有多个表空间且不同块大小的数据库环境中。


多个块大小规则

1. 分区对象

  • 规则:所有分区对象的分区必须存储在使用相同块大小的表空间中。
  • 解释:对于分区表、分区索引或其他分区对象,所有分区必须使用相同的块大小。不能将一个分区对象的不同分区存放在使用不同块大小的表空间中。每个分区表的所有分区在块大小上必须一致。

2. 临时表空间

  • 规则:所有临时表空间,包括作为默认临时表空间使用的永久表空间,必须使用标准块大小
  • 解释:临时表空间用于处理排序、哈希以及临时数据存储等操作。临时表空间必须使用系统的标准块大小(通常是 8 KB,或者根据系统配置的块大小)。不能为临时表空间指定非标准块大小(如 4 KB、16 KB 等)。

3. 索引组织表溢出段和外部存储的 LOB 段

  • 规则索引组织表(IOT)溢出段外部存储的 LOB 段可以存储在与基表块大小不同的表空间中。
  • 解释:虽然 索引组织表(IOT) 的基表或 LOB(大对象) 的基表可能有某个块大小,但 Oracle 允许这些表的溢出段或 LOB 段存储在与基表块大小不同的表空间中。这样可以针对特定数据类型(例如 LOB 或 IOT 的溢出数据)优化存储,因为这些数据类型可能有不同的访问模式或存储需求。

关键规则总结:

  1. 分区对象:所有分区必须在相同块大小的表空间中。
  2. 临时表空间:必须使用标准块大小。
  3. 溢出段和 LOB 段:可以使用与基表不同的块大小。

Oracle 数据块(Database Block)

1. Oracle 数据块的结构

Oracle 数据块(也称为数据库块)是 Oracle 存储数据的最小单元。每个数据块通常包含三个部分:

  • 块头(Block Header)

    • 内容:块头包含数据块的地址、表目录、行目录和事务槽等信息。
    • 作用:块头用于记录有关数据块的元数据,帮助 Oracle 数据库管理数据块。事务槽用于追踪对该块中行的操作,当事务修改某行数据时,会在事务槽中创建一条记录。
    • 增长方式:块头从数据块的顶部向下增长,逐渐填充块头部分的信息。
  • 数据空间(Data Space)

    • 内容:数据行(Row Data)存储在数据空间中。
    • 作用:Oracle 将行数据从数据块的底部开始向上插入,以便在数据块中逐步填充空间。
    • 增长方式:数据空间的增长是从数据块底部开始的,数据行是逐行存储的。
  • 空闲空间(Free Space)

    • 内容:空闲空间位于数据块的中部,用于存储后续插入的新行或更新数据时留下的空间。
    • 作用:在表插入数据、更新数据时,空闲空间使得数据块能够容纳新的行或修改。
    • 增长方式:空闲空间是连续的,并且随着行的插入和更新会发生变化。空闲空间可能会变得碎片化,这时 Oracle 会进行空间合并(Coalescing)以优化空间使用。

2. 块空间利用参数

为了有效管理和优化数据块的空间利用,Oracle 提供了多个参数,用于控制数据块空间的分配和使用。以下是这些参数的详细解释:

2.1 控制并发性的参数: INITRANSMAXTRANS
  • INITRANS:设置每个块初始化时创建的事务槽的最小数量。事务槽用于跟踪同时对同一个数据块进行更改的事务。

    • 默认:数据段的默认值为 1,索引段为 2。
    • 作用INITRANS 保证了块内并发事务的最小数量。如果 INITRANS 设置为 3,Oracle 会确保至少有 3 个事务可以并发地修改这个数据块。超过这个数量的事务会使用额外的事务槽,这些事务槽从空闲空间中分配。
  • MAXTRANS:设置一个数据块中可以同时进行更改的最大事务数。

    • 默认:255。
    • 作用:该参数限制了事务槽的数量,确保有足够的空间用于事务操作,而不会占用太多数据空间,影响数据行的存储。
2.2 控制数据空间利用的参数: PCTFREEPCTUSED
  • PCTFREE:指定每个数据块中预留空间的百分比,用于容纳由于更新数据而需要增加的行空间。

    • 默认:10%。
    • 作用:当数据行在块中被更新时,Oracle 会使用 PCTFREE 参数指定的空间来处理更新所需的空间。如果更新后的数据行增大,Oracle 会将其保留在该空间中。
    • 计算方式PCTFREE 是基于数据空间的百分比计算的,而数据空间是指在扣除块头空间后的剩余部分。
  • PCTUSED:指定数据块中必须使用的最小空间百分比。只有当块的使用空间超过 PCTUSED 参数时,Oracle 才会将块从空闲块列表中取出并用于新的插入。

    • 默认:40%。
    • 作用:如果数据块中的使用空间小于 PCTUSED,该块将被放回空闲块列表中,等待插入新的数据行。PCTUSED 保证了数据块的最低使用率。
    • 计算方式PCTUSED 是基于数据空间计算的。
2.3 控制空闲空间的利用: FREELISTS
  • FREELISTS:指定一个表或段使用的空闲空间列表的数量。通过增加空闲空间列表,Oracle 可以提高并发插入的效率,减少锁竞争。
    • 作用:通过配置多个空闲列表,Oracle 可以在多个并发插入操作时,减少等待和锁冲突,从而提高插入性能。

3. 这些参数的优化作用

  • 提高并发性INITRANSMAXTRANS 参数通过管理每个数据块可以并发处理的事务数,确保数据库在高并发环境下仍能正常工作,并最大化并发事务的吞吐量。
  • 优化空间利用PCTFREEPCTUSED 确保数据块空间得到了合理的管理,避免了过多的空闲空间和存储碎片,确保数据块空间利用最大化。
  • 减少插入冲突:通过配置多个 FREELISTS,可以在并发插入操作中减少锁的争用,提高性能。

4. 拓展:数据块空间利用与性能优化

  • 空间碎片化与合并:随着数据的插入、更新和删除,数据块中的空闲空间可能会变得碎片化,这影响了块的空间利用率。Oracle 会在必要时自动进行空闲空间合并(coalescing),以确保更高效的存储。
  • 合理设置 PCTFREEPCTUSED:在设计数据库时,需要根据数据更新的特点来设置这些参数。例如,如果表中的数据行更新频繁,可以将 PCTFREE 设置为较高值,以便为更新操作留出更多空间。如果表中的数据不经常更新,可以将 PCTUSED 设置为较低值,以便更早地将块返回到空闲列表。
总结:
  1. 数据块结构:包括块头、数据空间和空闲空间。
  2. 空间利用参数:包括 INITRANSMAXTRANSPCTFREEPCTUSEDFREELISTS,这些参数帮助管理数据块的空间利用、并发事务、更新空间预留和插入冲突。
  3. 优化:合理配置这些参数可以有效提高数据库的并发性能、存储利用率和整体性能。

相关文章:

存储结构及关系(一)

学习目标 描述数据库的逻辑结构列出段类型及其用途列出控制块空间使用的关键字获取存储结构信息 段的类型 段是数据库中占用空间的对象。它们使用数据库数据文件中的空间。介绍不同类型的段。 表 表是在数据库中存储数据的最常用方法。表段用于存储既没有集群也没有分区的表…...

玄机应急:linux入侵排查webshell查杀日志分析

目录 第一章linux:入侵排查 1.web目录存在木马&#xff0c;请找到木马的密码提交 2.服务器疑似存在不死马&#xff0c;请找到不死马的密码提交 3.不死马是通过哪个文件生成的&#xff0c;请提交文件名 4.黑客留下了木马文件&#xff0c;请找出黑客的服务器ip提交 5.黑客留…...

python爬虫安装教程

Python爬虫是用于从网站上自动抓取信息的程序。在开始之前&#xff0c;请确保您了解并遵守目标网站的服务条款&#xff0c;尊重版权法&#xff0c;并且在合理合法的范围内使用爬虫技术。 安装环境 安装Python&#xff1a;首先确保您的计算机上已经安装了Python。推荐版本为3.…...

田忌赛马五局三胜问题matlab代码

问题描述&#xff1a;在可以随机选择出场顺序的情况下&#xff0c;如果把比赛规则从三局两胜制改为五局三胜制&#xff0c;齐王胜出的概率是上升了还是下降了&#xff1f;五局三胜的赛制下&#xff0c;大家的马重新分为5个等级。前提条件仍然是齐王每种等级的马都优于田忌同等级…...

Spring循环依赖问题的解决

项目启动提示如下异常&#xff1a; The dependencies of some of the beans in the application context form a cycle 这表明在我们的应用中存在了循环依赖&#xff0c;示例&#xff1a; Bean A 中注入了Bean B依赖&#xff0c;然后 Bean B 中注入了Bean A依赖。也就是说&…...

KAN-Transfomer——基于新型神经网络KAN的时间序列预测

1.数据集介绍 ETT(电变压器温度)&#xff1a;由两个小时级数据集&#xff08;ETTh&#xff09;和两个 15 分钟级数据集&#xff08;ETTm&#xff09;组成。它们中的每一个都包含 2016 年 7 月至 2018 年 7 月的七种石油和电力变压器的负载特征。 traffic(交通) &#xff1a;描…...

鸿蒙学习自由流转与分布式运行环境-价值与架构定义(1)

文章目录 价值与架构定义1、价值2、架构定义 随着个人设备数量越来越多&#xff0c;跨多个设备间的交互将成为常态。基于传统 OS 开发跨设备交互的应用程序时&#xff0c;需要解决设备发现、设备认证、设备连接、数据同步等技术难题&#xff0c;不但开发成本高&#xff0c;还存…...

【k8s深入理解之 Scheme 补充-2】理解 register.go 暴露的 AddToScheme 函数

AddToScheme 函数 AddToScheme 就是为了对外暴露&#xff0c;方便别人调用&#xff0c;将当前Group组的信息注册到其 Scheme 中&#xff0c;以便了解该 Group 组的数据结构&#xff0c;用于后续处理 项目版本用途使用场景k8s.io/apiV1注册资源某一外部版本数据结构&#xff0…...

uni-app写的微信小程序每次换账号登录时出现缓存上一个账号数据的问题

uni-app写的微信小程序每次更换另外账号登录时出现缓存上一个账号数据的问题&#xff1f; 清除缓存数据&#xff1a;在 onShow 钩子中&#xff0c;我们将 powerStations、list 和 responseRoles 的值重置为初始状态&#xff0c;以清除之前的缓存数据。重新获取数据&#xff1a…...

数据分析流程中的Lambda架构,以及数据湖基于Hadoop、Spark的实现

文章目录 一、Lambda架构1、Lambda的三层架构2、简单解释&#xff1a;3、Lambda架构的优缺点 二、数据湖基于Hadoop、Spark的实现1、架构2、数据管理&#xff08;存储层的辅助功能&#xff09; 一、Lambda架构 1、Lambda的三层架构 Batch View&#xff08;批处理视图层&#…...

Android 原生解析 Json 字符串

Android 原生解析 JSON 字符串 1. JSON 基础2. Android 原生 JSON 解析方法2.1 解析 JSON 字符串到 JSONObject关键方法 2.2 解析 JSON 数组到 JSONArray关键方法 2.3 解析嵌套的 JSON 对象 3. 处理异常4. 总结 在 Android 开发中&#xff0c;我们经常需要从服务器获取 JSON 格…...

Windsurf可以上传图片开发UI了

背景 曾经羡慕Cursor的“画图”开发功能&#xff0c;这不Windsurf安排上了。 Upload Images to Cascade Cascade now supports uploading images on premium models Ask Cascade to build or tweak UI from on image upload New keybindings Keybindings to navigate betwe…...

Qt UI设计 菜单栏无法输入名字

在UI界面“在这里输入”&#xff0c;直接双击填写名称&#xff0c;无论是中文还是英文都没有反应。解决方案 2个&#xff1a; 1.双击“在这里输入之后”&#xff0c;在可编辑状态下&#xff0c;空格→enter键&#xff0c;然后在右下角属性框的title中直接填写中文或英文名&…...

blender 视频背景

准备视频文件 首先&#xff0c;确保你有想要用作背景的视频文件。视频格式最好是 Blender 能够很好兼容的&#xff0c;如 MP4 等常见格式。 创建一个新的 Blender 场景或打开现有场景 打开 Blender 软件后&#xff0c;你可以新建一个场景&#xff08;通过点击 “文件” - “新建…...

【python】OpenCV—Tracking(10.5)—dlib

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数dlib.correlation_tracker() 6、参考 1、功能描述 基于 dlib 库&#xff0c;实现指定类别的目标检测和单目标跟踪 2、代码实现 caffe 模型 https://github.com/MediosZ/MobileNet-SSD/tree/master/…...

音视频入门基础:MPEG2-TS专题(9)——FFmpeg源码中,解码TS Header的实现

一、引言 FFmpeg源码对MPEG2-TS传输流/TS文件解复用时&#xff0c;在通过read_packet函数读取出一个transport packet后&#xff0c;会调用handle_packet函数来处理该transport packet&#xff1a; static int handle_packets(MpegTSContext *ts, int64_t nb_packets) { //..…...

解决“磁盘已插上,但Windows系统无法识别“问题

电脑上有2块硬盘&#xff0c;一块是500GB的固态硬盘&#xff0c;另一块是1000GB的机械硬盘&#xff0c;按下开机键&#xff0c;发现500G的固态硬盘识别了&#xff0c;但1000GB的机械硬盘却无法识别。后面为了描述方便&#xff0c;将"500GB的固态硬盘"称为X盘&#xf…...

论文笔记-WWW2024-ClickPrompt

论文笔记-WWW2024-ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction ClickPrompt: CTR模型是大模型适配CTR预测任务的强大提示生成器摘要1.引言2.预备知识2.1传统CTR预测2.2基于PLM的CTR预测 3.方法3.1概述3.2模态转换3.…...

53 基于单片机的8路抢答器加记分

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 首先有三个按键 分别为开始 暂停 复位&#xff0c;然后八个选手按键&#xff0c;开机显示四条杠&#xff0c;然后按一号选手按键&#xff0c;数码管显示&#xff13;&#xff10;&#xff0c;这…...

【java数据结构】二叉树OJ题

【java数据结构】二叉树OJ题 一、检查两颗树是否相同二、另一颗树的子树三、翻转二叉树四、对称二叉树五、判断一颗二叉树是否是平衡二叉树六、给定一个二叉树, 找到该树中两个指定节点的最近公共祖先七、根据一棵树的前序遍历与中序遍历构造二叉树练习&#xff1a;八、二叉树前…...

IIC和SPI的时序图

SCL的变化快慢决定了通信速率&#xff0c;当SCL为低电平的时候&#xff0c;无论SDA是1还是0都不识别&#xff1a; ACK应答&#xff1a;当从设备为低电平的时候识别为从设备有应答&#xff1a; 谁接收&#xff0c;谁应答&#xff1a; 起始位和停止位&#xff1a; IIC的时序图&am…...

MySQL数据库表的操作

1、总述 今天我跟大家分享MySQL数据库中表的创建&#xff0c;查看&#xff0c;修改&#xff0c;删除。 2、创建表 create table table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明&#xff1…...

.net core 创建linux服务,并实现服务的自我更新

目录 创建服务创建另一个服务&#xff0c;用于执行更新操作给你的用户配置一些systemctl命令权限 创建服务 /etc/systemd/system下新建服务配置文件&#xff1a;yourapp.service&#xff0c;内容如下&#xff1a; [Unit] Descriptionyourapp Afternetwork.target[Service] Ty…...

springboot338it职业生涯规划系统--论文pf(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;it职业生涯规划系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以…...

oracle将select作为字段查询

在Oracle中&#xff0c;如果你想将一个SELECT语句作为字段的值&#xff0c;你可以使用子查询或者使用WITH子句&#xff08;也称为公用表表达式CTE&#xff09;。以下是两种方法的示例&#xff1a; 方法1&#xff1a;使用子查询 语法如下&#xff1a; SELECTcolumn1,(SELECT …...

Java数据结构和算法相关面试题

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

网络安全风险评估

项目背景 随着信息化技术的快速发展&#xff0c;特别是面向社会、政府机构、企业等业务系统的投入使用&#xff0c;各组织机构对网络和信息系统安全防护都提出了新的要求。为满足安全需求&#xff0c;需对组织机构的网络和信息系统的安全进行一次系统全面的评估&#xff0c;以…...

ADAM优化算法与学习率调度器:深度学习中的关键工具

深度学习模型的训练效果离不开优化算法和学习率的选择。ADAM&#xff08;Adaptive Moment Estimation&#xff09;作为深度学习领域中广泛应用的优化算法之一&#xff0c;以其高效性和鲁棒性成为许多任务的默认选择。而学习率调度器则是优化算法的“助推器”&#xff0c;帮助训…...

岛屿数量C++11新特性

每日一题 200. 岛屿数量 class Solution {//使用深度的优先搜索来搜索岛屿图//遍历整个图片 当char数组的值为1时开始从这个点开始往外扩散搜索//注意处理边界 图不是正方形 public:int ans;int d[4][2] {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};int N;int M;void dfs(vector<…...

Git 快速入门:全面了解与安装步骤

Git 快速入门&#xff1a;全面了解与安装步骤 一、关于Git 1.1 简介 Git 是一个开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年创建&#xff0c;最初是为了更好地管理 Linux 内核开发而设计。 Git用于跟踪计算机文件的变化&#xff0c;特别是源代码文件…...

做网站前提需要什么/南京百度seo公司

QLDB之于Amazon数据库生态 Andy Jassy展示了Amazon的database freedom&#xff0c;如图3-1(引用自ref[1])&#xff0c;Amazon提供诸多数据解决方案&#xff0c;涵盖关系型、K-V、内存等存储&#xff0c;并包含图、时序、账本等特型数据库&#xff0c;QLDB即特型数据库之一。 Q…...

上海做网站定制/宁波seo公司

1)淘宝可以批量检索违反广告法的图片,具体位置是在买家中心>宝贝管理>体验中心>商品自检>自检工具,可以批量查询自己店铺中违反广告法的图片! 2)找到了违反广告法的图片,但是不知道是那个词出现了错误可以使用ocr图片识别工具或者网站,识别图片中的所有文字,复制到…...

记事本做网站怎么不行啦/怎么建立个人网站

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2021年起重机械指挥考试及起重机械指挥找答案&#xff0c;包含起重机械指挥考试答案和解析及起重机械指挥找答案练习。由安全生产模拟考试一点通公众号结合国家起重机械指挥考试最新大纲及起重机械指挥考试真题汇总&a…...

免费网站的app/东莞搜索seo网站关键词优化

讨论 实际上&#xff0c;大家对于在Python中如何正确使用 super() 函数普遍知之甚少。 你有时候会看到像下面这样直接调用父类的一个方法&#xff1a; classBase:def __init__(self):print(Base.__init__)classA(Base):def __init__(self): Base.__init__(self)print(A.__init_…...

网站建设南昌/网上有卖网站链接的吗

2、查看python是否安装成功 : 在终端输入python出现>>>&#xff0c;代表安装成功&#xff0c;已进入python环境 3、mac自带Python&#xff0c;需查看版本号是否是Python3的版本&#xff0c;执行 python --version 却发现返回的是2.7版本&#xff0c;说明还需要配置环境…...

用ip地址做网站/seo关键词优化经验技巧

Beev1.11.0.2.4 (2022北京冬奥会版) 添加二级缓存扩展, Redis缓存支持 Bee&#xff0c;互联网新时代的Java ORM工具&#xff0c;更快、更简单、更自动&#xff0c;开发速度快&#xff0c;运行快&#xff0c;更智能&#xff01; Bee让程序员/软件工程师&#xff0c;从手工编码…...