pg数据库数据文件111代表什么

pg数据库数据文件111代表什么,第1张

仅供参考

所有数据库对象都有各自的oid(object identifiers),oid是一个无符号的四字节整数,相关对象的oid都存放在相关的system catalog表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中。

1、数据库集群-Database cluster

2、数据库-Database

3、表空间-tablespace

数据库在逻辑上分成多个存储单元,称作表空间。表空间用作把逻辑上相关的结构放在一起。数据库逻辑上是由一个或多个表空间组成。

新创建的数据库默认创建下面的表空间:

1)Catalog表空间 存放系统表信息2)System表空间 存放用户数据3)Temp表空间

4、模式-Schema

自动创建的系统模式如下:

1)PG_CATALOG2)PG_LARGEOBJECT3)PG_TOAST4)PG_PARTITION

默认的用户模式PUBLIC。

5、段-segment

6、区-extent

7、块-block

8、数据库对象-Database object

1)模式对象表、索引、序列、大对象、视图、函数、存储过程、触发器、包 … …2)非模式对象用户、数据库

9、数据表-Table

10、索引-Index

11、序列-Sequence

12、视图-View

二、物理存储结构

在执行initdb的时候会初始化一个目录,通常我们都会在系统配置相关的环境变量$PGDATA来表示,初始化完成后,会再这个目录生成相关的子目录以及一些文件。在postgresql中,tablespace的概念并不同于其他关系型数据库,这里一个tablespace对应的都是一个目录。如下图就是PG的物理结构:

e3b8db31b00c2f05d483b06281f4612bpng

1、存储系统主要包括三个部分:

内存中:buffer,MemoryContext;

数据文件,临时文件;

日志文件,日志缓存。

2、文件和目录相关作用描述:

b0bf0a554cc377fae5f8de898df5e43dpng

61b64f793a40b1d2a91e97af7f7c064fpng

3、数据文件结构

3c57d6e6090ee00e4ee3dd1e4ecb3550png

31、页

aefc00e308669659fe45719ea93668eapng

将数据文件中的空间从逻辑上划分成一个个页面(数据块)。页面是数据库I/O的基本单位,即只能整页读写数据文件, 页面的大小默认是8K。

页面可以分成两种:

1)数据页面:数据页面是用来存储用户数据的。

2)控制页面:控制页面用来管理这些数据页面。

数据库共享缓存中的空间划分也是按页为基本单位, 一个页的大小与数据文件中页的大小一致, 这样便于整页读取数据文件,并放入到数据库Buffer中, 从Buffer写入数据文件也同理,保证了缓存与数据文件结构和内容上的一致性。

32、Block(块)

概念上基本等同于Page, 但Block更多用于说明DMS中对数据文件中Page的描述。

例如: 对文件的读写的 *** 作, 文件读写位置的定位, 数据文件空间回收等 *** 作, 单位均是以块进行。

数据块的大小在系统初始化时指定,默认是8K,可以取值4K,8K,16K,32K。

33、Extent(区)

把数据文件中8个连续的Page构成的空间称为一个Extent。Extent是数据库进行数据文件空间分配/释放的基本单位。每个表、索引、序列对象都是由若干个区组成。数据文件被创建后,除自动保留部分区作为控制区外,其他区全部处于未分配状态。表、索引、序列对象的所有数据都存放在Extent中,当向这些Extent中插入数据时,若该Extent的所有页面都已占满,系统就会自动在所属表空间的数据文件中寻找一个尚未分配的区,并将其状态修改为数据区。

34、控制页面

用于空间管理的控制页面:PFS/GAM/IAM。

用于增量备份的控制页面:DCM。

判断可见性的控制页面:VM。

预留的控制页面:BCM/SGAM。

35、PFS

Page Free Space,简称PFS页

用于记录本数据文件中页面的空间使用情况。对文件中的每个页面,PFS中都有一个“字节”与之对应,该字节记录了该页面的状态。

PFS页前64bytes被预留为页头, 剩下81024-64=8128一共覆盖81288K=64MB空间

故PFS页每隔8128个页面出现一次, 系统初始化把第一个PFS页放在数据文件的第二个页面位置,即:第1号数据页面, 由此可知,第N个PFS页的位置在8128N+1

ed48dc29b411c3c5ef7bc7fe817ef757png

36、GAM

Global Allocation Map,简称GAM页。

功能:记录所在数据文件的Extent的分配情况,GAM页中除GAM头外,剩下空间的每一位(bit)均对应一个Extent的分配情况。若某bit位为1,则表明该bit位所关联的Extent已被分配出去,反之未被分配。

若一个GAM页面大小为8K,则除GAM头(64 bytes)外,一个GAM页面所能覆盖的文件范围是: (81024-64)8(88K),约4GB空间。此外,GAM页每隔881288个页面出现一个,系统要求第一个GAM页出现在文件的第3个页面位置(即:第2个索引位置),由此得知,第N个GAM页的出现位置是: 881288N+2

8787a745b70fe3df6b2e0df0671574b1png

37、IAM

Index Allocation Map,简称IAM页。

功能:每个IAM页只隶属于一个数据库对象(例如:表),但一个数据库对象可包含多个IAM页,由此可见IAM页与数据库对象的关系是1对1,而数据库对象与IAM页的关系是1对多

IAM的结构与GAM页类似,除IAM头外,剩下空间的每一位(bit)均对应着一个与IAM相关的Extent。若某bit位为1,则表明该bit位所关联的Extent已被分配给该IAM,反之未被分配。若一个IAM页面大小为8K,则除IAM头(64 bytes)外,一个IAM页面所能覆盖的文件范围是: (81024-64)8(88K),约4GB空间。

但与GAM也不同之处在于:IAM的出现位置不固定,只在在创建数据库对象的时候才分配。

6bc56896143910b2e3b060025dd891ebpng

三、逻辑与物理存储关系

1、逻辑关系存在表空间;

2、表空间存在对应的数据文件中;

新创建的数据库对应的数据文件的名称:

Catalog表空间 – databasenamedbfSystem表空间 – UdatabasenamedbfTemp表空间-- Tdatabasenamedbf

前面加 “U” 前缀代表用户数据表空间,用于保存用户表的数据。

不带 U 代表 是系统表的表空间,用于保存系统表的数据。

U 前缀的数据文件代表的表空间名为PG。

不带U 的数据文件代表的表空间为 CATALOG。

四、数据库文件、表空间、其他文件之间的关系

1、关系图如下:

1e59db43b34dcdd4d6c5cb6b89b2c194png

说明:

1)每一个数据库具有一个或多个数据文件,用户存放数据库的所有数据。

2)数据库的数据文件有以下特征:

一个数据库文件只能与一个数据库的一个表空间相连。

一个表空间可以由多个数据文件组成。

3)数据库对象与文件关系:

数据库对象放到表空间中。

表空间有多个数据文件。

表空间中有多个数据库对象。

4)数据库对象逻辑上是存储在表空间中,物理上是存储在与表空间相关联的数据文件中。

2、数据库包含的文件种类:

1)数据库文件:data/DB

数据库对象,如:数据库、表,索引,序列等对象。

2)控制文件:data/CTL

用来记录数据库集群的状态信息,如:版本信息、集群所管理的各种文件信息、检查点信息、事务状态信息等。

3)日志文件:data/REDOLOG

记录数据修改 *** 作的日志,用于系统发生故障时进行数据恢复。

4)临时文件:data/DB

存放数据库进行计算的过程中,生成的各种中间对象,如排序运算的外存归并单元。

5)参数文件:data目录下

五、Postgresql 底层存储管理方式:

Postgresql的每个数据库均存放在一个目录中,以db_oid命名,该目录中存放每个表对应的文件,文件名以该数据表对应的relfilenode_oid命名。当表中的数据量足够大,导致表文件的大小大于1GB的时候,postgresql会自动创建新的文件用于存放新插入的数据。新文件的名称为: relfilenode_iod1, relfilenode_iod2 等。使用该策略是为了防止在某些文件系统中,最大支持文件尺寸不能大于1GB的情形。

db_oid, relfilenode_oid可以从pg_class系统表中查询得出。

Linux下PostgreSQL数据库服务启动后自动停止的原因可能有很多,下面是一些可能的解决方案:

检查日志:在/var/log/postgresql/目录下查看日志文件,看是否有任何错误或异常信息。

检查配置文件:检查/etc/postgresql/版本号/main/postgresqlconf配置文件,确保所有配置都正确。

检查内存和硬盘空间:确保服务器上有足够的内存和硬盘空间来运行PostgreSQL服务器

需要存储过程实现。

1、创建输出路径,比如你要在d盘test目录下输出,你就先在d盘根目录下建立一个test的目录。

2、sqlplus下以sysdba登录,执行以下语句

12345

create or replace directory TMP as 'd:\test';  grant read,write on directory TMP to scott; --比如我用的scott用户  alter system set utl_file_dir='d:\test' scope=spfile;

3、以上步骤执行完,需要重启数据库。

4、创建一个存储过程,代码如下(基本是不用改动,原封复制即可):

CREATE OR REPLACE PROCEDURE SP_OUTPUT_PROCEDURE is  file_handle     utl_filefile_type;  Write_content   VARCHAR2(1024);  Write_file_name VARCHAR2(50);  v_name          varchar2(50);  v_text          varchar2(2000);  cursor cur_procedure_name is    select distinct name from user_source where type = 'PROCEDURE';  cursor cur_sp_out is    select ttext      from (select 0 line, 'CREATE OR REPLACE ' text              from dual            union            select line, text              from user_source             where type = 'PROCEDURE'               and name = v_name) t     order by line;begin  open cur_procedure_name;  loop    fetch cur_procedure_name      into v_name;    exit when cur_procedure_name%notfound;    write_file_name := v_name || 'txt';    open cur_sp_out;    loop      fetch cur_sp_out        into v_text;      exit when cur_sp_out%notfound;      file_handle   := utl_filefopen('TMP', write_file_name, 'a');      write_content := v_text;      --write file      IF utl_fileis_open(file_handle) THEN        utl_fileput_line(file_handle, write_content);      END IF;      --close file      utl_filefclose(file_handle);    end loop;    close cur_sp_out;  end loop;  close cur_procedure_name;end;

5、创建完毕执行存储过程,这个就不赘述了,执行完毕后,你会发现d盘test目录下的文件名就是以存储过程名命名的txt文件,如图:

6、里边内容(就是存储过程创建时的代码,可能排版看着难看点,但是不影响使用):

并发(concurrent)和并行(parallel)这两个概念,在数据库系统的资料中经常出现,然而有关它们的定义和区别却没有明确的说法。这里,我们根据这两个概念在资料中的使用,对它们的不同做一个说明。

并发是指多个任务的同时执行,任务与任务之间没有联系。由于数据库系统要同时为许多用户提供服务,每个用户都可以发出自己的访问请求,一个请求就是一个任务。在一个时间点,数据库系统可能要同时处理多个任务。因此,数据库系统一定要具备并发处理能力。

并行是指将一个任务划分为多个子任务,这些子任务同时执行。在所有子任务处理完成后,将它们的结果进行合并,就得到该任务的最终处理结果。在数据库系统中,如果要执行一个大的数据查询,为了提高速度、降低响应时间,用户可以通过系统配置或者在命令中,要求对该大数据量查询进行并行处理,将该查询划分成多个子查询。这些子查询同时执行,最后系统将所有子查询的处理结果进行合并,作为该查询处理的最终结果。现有的大型数据库系统都支持并行处理。

需要说明的是,并发和并行与数据库系统采用多进程还是多线程体系结构无关。对采用多进程结构的数据库系统,所有的任务、子任务通过进程来处理;而对采用多线程结构的数据库系统,这些工作是由线程来完成。

数据库系统的并发控制,涉及到任务的调度、数据的一致性及可靠性等,而数据库系统的并行处理,主要涉及任务的处理速度、系统性能等方面。

PG物化视图(Materialized View)是PostgreSQL中一种特殊的视图,是对基本表数据的聚合和简化,并将结果缓存到物理表中。物化视图可以提高查询的执行效率,并且可以实现对基本表数据的定期刷新,确保数据的正确性。其主要优缺点如下:

优点:

1 提高查询性能。物化视图的使用可以避免大量 joins、group by 和聚集函数,可以加快查询速度。也可以在物化视图中进行预计算,简化表的复杂查询。

2 降低数据冗余。物化视图将计算结果保存在物理表中,相比动态视图或查询,无需每次执行查询时计算全部数据,可以有效减少数据冗余。

3 优化查询计划。物化视图可以作为附加的优化器提高查询计划的效率,特别是当查询中有多个相同的联结、聚合函数或固有的查询逻辑时。

4 常用于大数据量的系统。当查询结果集是大数据量的时候,直接读取物化视图,而非直接查询源数据表,这对于大数据量系统的性能改善是非常显著的。

缺点:

1 物化视图增加了存储成本。使用物化视图会占用更多的磁盘空间,增加存储和维护成本。

2 物化视图必须定期刷新。使用物化视图需要定期刷新保证数据的正确性,如果刷新的时间不当,可能导致数据不一致。

3 物化视图可能不适合高并发的应用场景。当物化视图的更新频率高,而且许多查询同时访问物化视图的时候,可能会产生锁问题。

4 物化视图的维护有一定的复杂性。如果物化视图对基本表进行了除了简单查询之外的 DML *** 作,就需要对物化视图进行重新计算或刷新,或禁止对基本表进行 DML *** 作,这需要一定的管理和维护成本。

总之,PG物化视图具有明显的性能优势和简化查询的能力,但是也需要权衡其缺点,特别是存储和维护成本。

以上就是关于pg数据库数据文件111代表什么全部的内容,包括:pg数据库数据文件111代表什么、linux下pg数据库服务启动后自动停止、我想导出pg数据库中的所有存储过程,每个存储过程一个文件,文件名就是存储过程的名字。可以实现吗感谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10200354.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存