管理表(四)

创建表空间

CREATE TABLESPACE assm
DATAFILE '/u01/oradata/denver/assm_1.dbf'
SIZE 100M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 128K
SEGMENT SPACE MANAGEMENT AUTO;
  • size 100M:设定了这个数据文件的初始大小为100兆字节(MB)。
  • exterl management local uniform size 128K
    • exterl management local 表示采用本地管理方式来管理表空间的存储空间分配。与字典管理方式相比,本地管理方式具有更好的性能和可维护性等优势。
    • uniform size 128K 意味着表空间中的所有区(extents)将被统一分配为128千字节(KB)的大小。这种统一分配方式有助于更高效地管理空间和减少空间碎片。
  • segment space management auto:指定了段空间管理方式为自动(auto)。在自动段空间管理模式下,数据库会自动处理段内空闲空间的管理等相关事宜,比如自动跟踪和管理空闲块等,使得数据库在空间利用和管理上更加智能化和高效。

创建用户并授予权限

创建用户:
create user msi identified by msi default tablespace mssm; created.
  • create user msi:明确指定了要创建的用户名为msi
  • identified by msi:设定了该用户的登录密码也是msi。这种设置密码的方式在实际环境中可能存在安全风险,因为密码过于简单且与用户名相同,通常建议使用更复杂且难以猜测的密码。
  • default tablespace mssm:指定了该用户的默认表空间为mssm。当这个用户创建数据库对象(如表格、索引等)时,如果没有特别指定表空间,这些对象将会被创建在mssm这个表空间中。
授予权限:
grant connect, resource to as1;
  • 功能:此语句的作用是授予用户as1两个系统权限,即connect权限和resource权限。
  • 详细解释
    • grant:是用于授予权限的SQL关键字。
    • connect:拥有该权限的用户可以连接到数据库。基本上,这是允许用户登录并与数据库进行交互的最基本权限之一。
    • resource:具有该权限的用户可以在其拥有的表空间内创建各种数据库对象,如表格、视图、索引等。通过授予resource权限,用户as1就能够在其相应的权限范围内进行数据库对象的创建和管理等操作。

创建表的示例

CREATE TABLE t (id INT,name CHAR(10)
)
STORAGE (INITIAL 128K,NEXT 128K,PCTINCREASE 0,MINEXTENTS 1,MAXEXTENTS 5
)
TABLESPACE assm;

语句解释

  • 创建表结构部分
    • CREATE TABLE t (:这是创建表的起始语句,表明要创建一个名为 t 的表。
    • id INT,:定义了表中的一个列名为 id,数据类型为整数类型(INT)。
    • name CHAR(10):定义了另一个列名为 name,数据类型为定长字符型,长度为10个字符。
  • 存储参数部分
    • STORAGE (:开始设置表的存储参数相关内容。
    • INITIAL 128K:指定了表在创建时分配的初始存储空间大小为128千字节
    • NEXT 128K:当表中已有空间用完,需要额外分配空间时,每次分配的空间大小为128千字节。
    • PCTINCREASE 0:设置每次分配额外空间时,相较于上一次分配空间大小的增长百分比为0%。即每次分配的额外空间大小保持固定,都是 NEXT 参数所设定的值(这里是128K)。
    • MINEXTENTS 1:规定表最少需要分配的区(extent,是数据库存储分配的一种单位)数量为1个。
    • MAXEXTENTS 5限制表最多能够分配的区数量为5个。这是为了防止表无限制地占用存储空间,起到一定的空间管理和控制作用。
  • 表空间指定部分
    • TABLESPACE assm指定了该表 t 将被创建在名为 assm 的表空间中。之前创建用户 msi 时指定了默认表空间为 mssm,但这里通过此语句可以将特定表创建在其他指定的表空间中(这里是 assm)。

自动段空间管理(ASSM)和手动段空间管理(MSSM)

简单介绍

这段内容主要围绕创建堆表时在不同段空间管理模式(自动段空间管理ASSM和手动段空间管理MSSM)下需要注意的重要选项进行阐述,具体如下:

  • FREELISTS(仅MSSM)
    • 功能:每个表通过它在堆中管理已分配的块,且表可拥有多个。
    • 影响:若预计有许多并发用户大量插入数据到表中,合理配置多个FREELISTS能显著提升性能,但会增加额外存储成本。其原理是可加速块分配过程,类似多窗口并行处理插入请求。
  • PCTFREE(ASSM和MSSM)
    • 功能:衡量在INSERT过程中一个块可被填满的程度,用于控制是否能向块中添加行,还能控制后续更新引起的行迁移。
    • 设置要点:需根据表的具体使用方式设置,设置不当会导致行迁移频繁或空间浪费等问题,如经常更新的数据表可适当增大,以插入为主的数据表可适当减小。
  • PCTUSED(仅MSSM)
    • 功能:衡量一个块再次成为插入候选块之前需空出的程度,小于PCTUSED使用空间的块可作为插入候选块。
    • 设置要点:与PCTFREE协同影响块空间利用和数据操作性能,设置不当会造成空间浪费或不必要的操作,要根据表的数据操作特性合理调整。
  • INITRANS(ASSM和MSSM)
    • 功能:指定最初分配给一个块的事务槽数量,用于记录并发事务对块的操作信息。
    • 设置要点:若设置过低,在多用户访问同一块且接近满且事务列表不能动态扩展时,会引发并发问题,若预计有大量并发更新相同块的情况,应适当提高该值。

很长的论述

在创建表语句(CREATE TABLE)中堆表重要选项的解析

在创建表语句(CREATE TABLE)的众多可用选项中,针对堆表(普通表/heap tabel),有若干重要选项值得特别关注。其中,在自动段空间管理(ASSM)模式下有两个关键选项,手动段空间管理(MSSM)模式下则有四个重要选项。

一、FREELISTS选项(仅适用于MSSM模式)

在MSSM模式下,每个表均通过自由列表来管理其在堆中所分配的块,且一个表能够拥有多个自由列表。当存在大量并发用户对表执行频繁插入操作的预期时,合理配置多个自由列表可显著提升性能,当然,这可能会伴随一定的额外存储开销。

具体而言,自由列表的主要作用在于加速块的分配过程,其工作原理是预先维护一系列可供插入数据的空闲块列表。例如,在一个电商系统的订单表中,如果在促销活动期间有众多用户同时下单(即并发插入订单数据),若仅设置一个自由列表,那么所有插入操作都需在该列表中排队等待空闲块分配,这将严重影响插入性能;而若配置多个自由列表,就如同开设多个服务窗口,可并行处理插入请求,大大提高整体效率。

二、PCTFREE选项(适用于ASSM和MSSM模式)

在插入数据(INSERT)过程中,它用于衡量一个块能够被填充的程度。当向表中插入数据时,数据库会依据PCTFREE的值来判定是否能将新行插入到当前块中。例如,若设定PCTFREE为20%,则意味着当块的已使用空间达到80%时,将不再允许新行插入该块,除非进行更新操作且更新后的行长度不超过剩余空间。

此外,PCTFREE还在控制后续更新操作引发的行迁移方面发挥关键作用。若PCTFREE设置过小,可能导致频繁的行迁移,这是因为更新操作可能使行长度增加,当块已满且无足够空间容纳更新后的行时,该行就需迁移至其他块,这无疑会增加数据库的开销并降低性能。反之,若PCTFREE设置过大,则会造成空间浪费,因为块过早地被标记为不可插入新行状态。因此,需根据表的具体使用场景谨慎设置该值,如对于经常更新且更新后行长度变化较大的数据表,可适当增大PCTFREE的值;而对于主要以插入操作为主、更新操作较少的数据表,则可适当减小PCTFREE的值。

三、PCTUSED选项(仅存在于MSSM模式)

它用于衡量一个块在经过一系列删除或更新操作后,需空出多少空间才能再次成为插入新行的候选块。例如,若设定PCTUSED为40%,那么当一个块因数据删除或更新导致其使用空间低于40%时,该块将被纳入可插入新行的候选块列表。

PCTUSED与PCTFREE协同工作,共同影响块的空间利用效率和数据操作性能。若PCTUSED设置过高,可能导致块在很长时间内无法被重新利用进行插入操作,造成空间浪费;若设置过低,则可能频繁地将仍有较多可用空间的块作为插入候选块,增加不必要的块扫描和数据移动操作,同样会影响性能。所以,在设置PCTUSED时,需充分考虑表的数据操作特性,如对于数据更新频繁且数据量波动较大的表,应合理调整PCTUSED的值,以实现块空间的高效循环利用。

四、INITRANS选项(适用于ASSM和MSSM模式)

它用于指定最初分配给一个块的事务槽数量。事务槽的作用在于记录并发事务对块的操作信息。若该值设置过低(其默认值与最小值均为2),在多个用户同时访问同一个块并进行事务操作时,尤其是在数据库块接近满且事务列表无法动态扩展的情况下,可能引发严重的并发问题。

例如,在一个银行系统的账户余额表中,若多个用户同时对同一账户进行转账操作(即并发更新相同块中的数据),而INITRANS设置为2,当有超过两个并发事务时,事务槽将供不应求,后续事务只能排队等待,导致系统响应变慢,甚至可能引发交易超时等问题。因此,若预估会有大量并发更新针对相同块的情况发生,应适当提高INITRANS的值,以确保事务能够顺利进行,避免因事务槽不足而导致的并发瓶颈。

创建表的指南

  • 将表放置在独立表空间:便于管理和维护,利于分类存放不同业务功能的表,方便备份、恢复与性能优化,还可避免某个表空间出问题影响其他表所在空间。
  • 采用本地管理表空间:由数据库自身管理区分配,相比传统字典管理更高效地分配和回收空间,能自动避免产生空间碎片,保证数据存储连续性与高效性,提升整体性能。
  • 使用少量标准区大小:使空间分配更规整、可预测,减少表空间碎片化,便于数据库快速定位和操作数据,提高效率。
  • 避免与特定段放一起:不要把表放在包含回滚段、临时段和索引的表空间内,因为它们用途和特性不同,一起存放会使管理复杂,影响性能,分开能精细化管理。

创建临时表

  • 创建方式:使用“GLOBAL TEMPORARY”子句创建。
  • 数据保留期限:仅在事务或会话期间保留数据,事务特定临时表的数据在事务持续期间存在,会话特定临时表的数据在整个会话期间存在,且各会话的数据相互独立,只能看到和修改自己的数据。
  • 锁相关情况:不会对临时表的数据获取数据操纵语言(DML)锁。
  • 可创建其他对象:能在临时表上创建索引、视图和触发器,也可用导出和导入工具导出导入临时表的定义,但即便用了包含行数据的选项(ROWS option)也不会导出数据,临时表的定义对所有会话可见。
    在这里插入图片描述

关于PCTFREE和PCTUSED的计算说明

  • PCTFREE计算
    • 公式为((Average Row Size - Initial Row Size) *100/Average Row Size)。这个公式的目的是计算出一个百分比值,用于衡量在数据块中应该为数据更新预留多少空间。
    • 其中(Average Row Size)(平均行大小)是表中每行数据的平均占用空间大小,(Initial Row Size)(初始行大小)可能是指插入数据时行的初始大小。通过这个公式计算出来的PCTFREE,表示为了应对行数据增长(例如更新操作导致行数据变大),在数据块中应该预留的空闲空间比例。
  • PCTUSED计算
    • 公式为(Average Row Size * 100/(100 - PCTFREE))(这里分母的(100 - PCTFREE)表示扣除预留更新空间后的可用空间比例),目的是计算出一个与数据块空间利用相关的百分比值。
    • 它衡量的是在经过一系列删除或更新操作后,一个块需要空出多少空间才能再次成为插入新行的候选块。这个值的计算涉及到数据块的整体空间利用情况,考虑了已经预留的更新空间(PCTFREE),以确定在什么情况下块可以重新用于插入新数据。
  • Available Data Space(可用数据空间):这里提到的“可用数据空间”可能是在计算PCTUSED过程中作为一个参考概念,即整个数据块空间扣除PCTFREE预留空间后,剩余的可用于其他操作(如插入新行)的空间。它与PCTUSED的计算紧密相关,因为PCTUSED的计算需要考虑在这个可用空间的基础上,块达到什么程度的空闲才可以再次用于插入新行。

设置 PCTFREE 和 PCTUSED

  • PCTFREE
    • 作用:在数据库块内为数据更新预留更多空间。
    • 适用场景:若表包含初始为 NULL 而后更新有值的列,或者包含因更新可能导致大小增加的列,就适合设置较高的 PCTFREE 值。不过较高的 PCTFREE 会使块密度降低,即每个块能容纳的行数变少。通过特定公式可确保块内有足够空闲空间供行数据增长。
  • PCTUSED:设置该参数是为了确保只有当块中有足够空间容纳平均行大小时,块才会被放回空闲列表。若空闲列表中的块没有足够空间插入一行,Oracle 服务器会查找空闲列表中的下一个块,这种线性扫描会持续,直到找到有足够空间的块或者到达列表末尾。利用给定公式可通过提高找到有足够空闲空间块的概率,减少扫描空闲列表所花费的时间。平均行大小的值可通过ANALYZE TABLE命令来估算。

临时表
临时表用于在事务或会话期间保存中间结果集。临时表中存储的数据仅对当前会话可见——即便当前会话提交了这些数据,其他任何会话也看不到该会话的数据。在临时表方面,多用户并发也不是问题,因为一个会话永远不会因使用临时表而阻塞另一个会话。即便我们“锁定”临时表,它也不会阻止其他会话使用它们各自的临时表。
正如我们在第9章中所了解到的,临时表产生的重做信息比常规表要少得多。然而,由于临时表必须为其所包含的数据生成回滚信息,所以它们还是会产生一定量的重做信息。其中,更新和删除操作会产生最多的重做信息,而插入和查询操作产生的重做信息最少。

Oracle的临时表与其他关系数据库中的临时表类似,主要的区别是它们是“静态”定义的。每个数据库创建一次,而不是数据库中的每个存储过程创建一次。它们始终存在一它们将作为对象存在于数据字典中,但是在会话将数据放入它们之前,它们始终显示为空。由于它们是静态定义的,因此可以创建引用临时表的视图,创建使用静态SQL引用临时表的存储过程,等等。

临时表会产生最少的重做,但它们仍然会产生一些重做,并且没有办法禁用它。重做是为回滚数据生成的,在大多数典型使用中,它可以忽略不计。如果只对临时表进行INSERT和SELECT操作,那么生成的重做量将不会明显。只有当你大量地删除或更新临时表时,你才会看到大量的重做生成。
CBO使用的统计数据可以谨慎地在临时表上生成;但是,可以使用DBMS_STATS包在临时表上设置更好的统计数据猜测集,或者由优化器在硬解析时使用动态采样动态收集统计数据。

临时表(Temporary Tables)相关的特点及性质

用途方面

临时表用于在事务(transaction)或者会话(session)期间存储中间结果集(intermediate result sets),也就是在特定的事务处理过程中或者整个会话持续阶段,临时存放一些过渡性的数据。

数据可见性方面

临时表中所存放的数据仅对当前会话可见,即便当前会话提交(COMMIT)了这些数据,其他会话也无法看到当前会话的数据,每个会话的数据都是相互独立、私有的。

多用户并发方面

在多用户并发场景下,临时表不会引发问题。因为一个会话使用临时表时,不会阻塞其他会话对各自临时表的使用,各会话之间不会相互干扰,不存在一个会话因为使用临时表而影响到其他会话正常操作的情况。

重做(redo)与回滚(undo)信息生成方面

相较于常规表,临时表产生的重做信息(redo)明显更少。不过,由于临时表必须为其所包含的数据生成回滚(undo)信息,所以还是会产生一定量的重做信息,其中执行更新(UPDATE)和删除(DELETE)操作时产生的重做信息最多,而插入(INSERT)和查询(SELECT)操作产生的重做信息最少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/33581.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

《无畏契约》运行时提示“d3dcompiler_43.dll丢失”是什么原因?“找不到d3dcompiler_43.dll文件”如何解决?

《无畏契约》运行时提示“d3dcompiler_43.dll丢失”是什么原因?“找不到d3dcompiler_43.dll文件”如何解决? 作为一位软件开发从业者,我深知在游戏运行过程中,遇到各种文件丢失、文件损坏和系统报错等问题是多么令人头疼。今天&a…

5.12【机器学习】卷积模型搭建

softmax输出时不可能为所有模型提供精确且数值稳定的损失计算 model tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape(28, 28)),tf.keras.layers.Dense(128, activationrelu),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10) ]) mnist tf.keras…

【H2O2|全栈】Node.js与MySQL连接

目录 前言 开篇语 准备工作 初始配置 创建连接池 操作数据库 封装方法 结束语 前言 开篇语 本节讲解如何使用Node.js实现与MySQL数据库的连接,并将该过程进行函数封装。 与基础部分的语法相比,ES6的语法进行了一些更加严谨的约束和优化&#…

Stable Diffusion Controlnet常用控制类型解析与实战课程 2

本节内容,给大家带来的是stable diffusion Controlnet常用控制类型解析与实战的第二节课程。在上期课程中,我们已经了解了关于线稿类控制类型的特征和用法,本节课程,我们将继续讲解一些常用的控制类型。 一:OpenPose …

TC3xx系列芯片--GPT12模块介绍

1、模块介绍 GPT1/2(General Purpose Timer Unit)是 Aurix TC3XX 内部的通用定时器模块,提供高精度定时功能,GPT1/2 包含 GPT1 和 GPT2 两个子模块,通用定时器单元块 GPT1 和 GPT2 具有非常灵活的多功能定时器结构,可…

uniapp 添加loading

在uniapp中添加loading可以使用uni的API uni.showLoading 方法。以下是一个简单的示例代码 // 显示loading uni.showLoading({title: 加载中 });// 假设这里是异步操作,比如网络请求 setTimeout(function () {// 隐藏loadinguni.hideLoading(); }, 2000);

基于反射内存的光纤交换机

在当今高度信息化的社会中,数据的高速传输与处理已成为各行各业不可或缺的一部分。特别是在航空航天、工业自动化、金融交易及高性能计算等领域,对数据实时性和可靠性的要求尤为严格。为满足这些需求,基于反射内存(Reflective Mem…

前端上传后端接收参数为null

记录一下工作中的问题 前端明明把文件传到后台了,但是后台接收参数为null 原因: 前端上传文件的name和后端接收参数名称不匹配 前端 后端 把前端上传的name由upfile改为file即可 本来是很基本的小问题,但因为自己钻了牛角尖一直没搞定&…

Web3的技术栈详解:解读区块链、智能合约与分布式存储

随着数字时代的不断发展,Web3作为下一代互联网的核心理念逐渐走进了大众视野。它承载着去中心化、用户主权以及更高效、更安全的网络环境的期望。Web3不再是由少数中心化机构主导的网络,而是通过一系列核心技术的支撑,给每个用户赋予了更多的…

芯食代冻干科技研究院:创新与品质并重,推动家用冻干机高质量发展

11月25日,芯食代首届食品冻干前沿与智能化升级创新大会在江苏常州成功举办。本次大会由芯食代冻干科技研究院(江苏)有限公司与芯食代(上海)科技发展有限公司联合主办,云集学界专家教授、商界企业精英,共议家用冻干机的未来创新发展。作为创新大会,芯食代冻干科技研究院也在本次…

相交的链表

力扣链接:160. 相交链表 - 力扣(LeetCode) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据…

PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

全文摘要 本文介绍了一种名为PETRv2的统一框架,用于从多视图图像中进行三维感知。该框架基于先前提出的PETR框架,并探索了时间建模的有效性,利用前一帧的时间信息来提高三维物体检测效果。作者在PETR的基础上扩展了三维位置嵌入(…

项目基于oshi库快速搭建一个cpu监控面板

后端&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.oshi</groupId><artifactId>oshi-…

设计模式——Chain(责任链)设计模式

摘要 责任链设计模式是一种行为设计模式&#xff0c;通过链式调用将请求逐一传递给一系列处理器&#xff0c;直到某个处理器处理了请求或所有处理器都未能处理。它解耦了请求的发送者和接收者&#xff0c;允许动态地将请求处理职责分配给多个对象&#xff0c;支持请求的灵活传…

【Nacos02】消息队列与微服务之Nacos 单机部署

Nacos 部署 Nacos 部署说明 Nacos 快速开始 Nacos 快速开始 版本选择 当前推荐的稳定版本为2.X Releases alibaba/nacos GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - Re…

查看 tomcat信息 jconsole.exe

Where is the jconsole.exe? location: JDK/bin/jconsole.exe

大数据新视界 -- Hive 元数据管理:核心元数据的深度解析(上)(27 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

大数据实验E5HBase:安装配置,shell 命令和Java API使用

实验目的 熟悉HBase操作常用的shell 命令和Java API使用&#xff1b; 实验要求 掌握HBase的基本操作命令和函数接口的使用&#xff1b; 实验平台 操作系统&#xff1a;Linux&#xff08;建议Ubuntu16.04或者CentOS 7 以上&#xff09;&#xff1b;Hadoop版本&#xff1a;3…

【Linux系统】Linux内核框架(详细版本)

Linux体系结构&#xff1a;Linux操作系统的组件详细介绍 Linux 是一个开源的类 UNIX 操作系统&#xff0c;由多个组件组成&#xff0c;具有模块化和层次化的体系结构。它的设计实现了内核、用户空间和硬件的高效协作&#xff0c;支持多用户、多任务操作&#xff0c;广泛应用于…

如何使用apache部署若依前后端分离项目

本章教程介绍,如何在apache上部署若依前后端分离项目 一、教程说明 本章教程,不介绍如何启动后端以及安装数据库等步骤,着重介绍apache的反向代理如何配置。 参考此教程,默认你已经完成了若依后端服务的启动步骤。 前端打包命令使用以下命令进行打包之后会生成一个dist目录…