PostgreSQL 物理文件映射解析
我们知道,在PG中,每个relation,也就是表,都有好几个fork对应。存放主表数据的为ldquo;MAINrdquo; fork;管理空余空间的为
我们知道,在PG中,每个relation,也就是表,都有好几个fork对应。存放主表数据的为“MAIN” fork;管理空余空间的为“FSM” fork;存放可视化视图的为“visibility” fork。
那么PG又是如何将每个表的fork管理起来,并跟pg_class中的relfileno对应起来的呢?这可以分为两类:一类是常规表;一类是系统表。
1.常规表
假设我有一张表叫”tab_mvcc_test”,它在postgres数据库中。因此我们得先找到数据库目录。查pg_database,得到oid为“12896”。
接着去base目录下,找到相应的数据库目录。“12896”目录就是我们想要的。
然后从pg_class中,我们查到”tab_mvcc_test”的relfilenode为“16483”。
接着我们进入数据库目录“12896”,然后list一把,提到以下相关的三个文件。以“_fsm”后缀的就是Free Space Mapping文件。以”vm”后缀的就是visibility map。
而没有后缀的那个就是我们的主表数据文件,里面还存放了索引数据。
2.系统表
另外像系统的catalog表,如pg_class,它的refileno是”0“,又是什么原因呢?PG对于系统表处理,不能像常规表一样。这就有点类似于”鸡生蛋,还是蛋生鸡“。因为系统表是来管理常规表的。
PG对于这些catalog表,放到一个文件中去管理,将oid与relfileno做映射。这个文件就是著名的”pg_filenode.map“。这个文件的大小为512,,刚好是一个OS disk sector的大小。
PG做了对齐处理,在源码上用RelMapFile结构体与之对应。结构体大小为:62*8+4*4=496+16=512。也就是说这个文件最多存放62条系统catalog表的记录。
由于这个文件的重要性,刚好与disk sector大小对齐,减少文件crash的机率。
我们接下来把pg_filenode.map DUMP出来看一下,里面是什么数据:
第一个圈中的数据为PG文件头的魔法数据字,那么第二个圈中的,到底对应的是哪个catalog表呢?我们可以计算下:“4eb”对应十进制数据就是”1259“,刚好是pg_class的oid。
而后面的”3172”对应的就是12658。刚好是relfilenode。完美的对应了起来。
再得到文件如下:
记录数刚好14,跟上面图中两个红色圈之间的数字”000e“对起来。这个文件还存放了这些系统表对应的索引文件filenode。
------------------------------------华丽丽的分割线------------------------------------
CentOS 6.3环境下yum安装PostgreSQL 9.3
PostgreSQL缓存详述
Windows平台编译 PostgreSQL
Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)环境的配置与安装
Ubuntu上的phppgAdmin安装及配置
CentOS平台下安装PostgreSQL9.3
PostgreSQL配置Streaming Replication集群
如何在CentOS 7/6.5/6.4 下安装PostgreSQL 9.3 与 phpPgAdmin
------------------------------------华丽丽的分割线------------------------------------
PostgreSQL 的详细介绍:请点这里
PostgreSQL 的下载地址:请点这里
本文永久更新链接地址:

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

MySQL と PostgreSQL: Web 開発のベスト プラクティス はじめに: 現代の Web 開発の世界では、データベースは不可欠なコンポーネントです。データベースを選択する場合、一般的な選択肢は MySQL と PostgreSQL です。この記事では、Web 開発で MySQL と PostgreSQL を使用するためのベスト プラクティスについて説明し、いくつかのコード例を示します。 1. 適用可能なシナリオ MySQL は、ほとんどの Web アプリケーション、特に高いパフォーマンス、スケーラビリティ、使いやすさを必要とするアプリケーションに適しています。

MySQL と PostgreSQL: パフォーマンスの比較と最適化のヒント Web アプリケーションを開発する場合、データベースは不可欠なコンポーネントです。データベース管理システムを選択する場合、MySQL と PostgreSQL の 2 つが一般的な選択肢となります。これらはどちらもオープンソースのリレーショナル データベース管理システム (RDBMS) ですが、パフォーマンスと最適化にはいくつかの違いがあります。この記事では、MySQL と PostgreSQL のパフォーマンスを比較し、最適化のヒントをいくつか紹介します。 2 つのデータベース管理を比較したパフォーマンスの比較

MySQL と PostgreSQL: データ セキュリティとバックアップ戦略 はじめに: 現代社会では、データはビジネスと個人の生活に不可欠な部分になっています。データベース管理システムでは、データを損失や損傷から保護し、回復されたデータの信頼性と整合性を確保するために、データ セキュリティとバックアップ戦略が非常に重要です。この記事では、2 つの主流のリレーショナル データベース システム、MySQL と PostgreSQL のデータ セキュリティとバックアップ戦略に焦点を当てます。 1. データセキュリティ: (1) ユーザーの権利

Go 言語は、Web サービスやバックエンド アプリケーションの構築に適した高速かつ効率的なプログラミング言語です。 PostgreSQL は、より高い信頼性、拡張性、データ セキュリティを提供するオープンソースのリレーショナル データベース管理システムです。この記事では、Go での PostgreSQL の使用について詳しく説明し、いくつかの実用的なコード例とヒントを提供します。 PostgreSQL のインストールとセットアップ まず、PostgreSQL をインストールしてセットアップする必要があります。公式ウェブサイトでご覧いただけます

Go 言語でデータベース関数を学習し、PostgreSQL データの追加、削除、変更、クエリ操作を実装する現代のソフトウェア開発において、データベースは不可欠な部分です。 Go 言語は強力なプログラミング言語として、データベースの追加、削除、変更、クエリ操作を簡単に実装できる豊富なデータベース操作関数とツールキットを提供します。この記事では、Go言語でデータベース機能を学び、実際の運用でPostgreSQLデータベースを利用する方法を紹介します。ステップ 1: 各データベースに Go 言語でデータベース ドライバーをインストールする

データベース技術の発展に伴い、データベース管理システムにもさまざまな選択肢があり、開発者はニーズや好みに応じて最適なデータベースを選択できます。高度なオープンソース リレーショナル データベース システムとして、PostgreSQL は開発者によってますます注目され、使用されています。では、PHP プログラミングで PostgreSQL データベースを使用するにはどうすればよいでしょうか? 1. PostgreSQL データベースのインストールと設定 PostgreSQL を使用する前に、PostgreSQL データベースをインストールして設定する必要があります。初め

インターネットの発展に伴いデータ量は増加し続けており、データ管理の必要性はますます高まっています。リレーショナル データベースはデータ管理の重要な方法であり、その中でも PostgreSQL はその柔軟性、拡張性、セキュリティの点で人気があります。この記事では、PHP 言語を使用してオープン ソースの PostgreSQL リレーショナル データベースを実装する方法を紹介します。これが、対応するニーズを持つ開発者の役に立つことを願っています。概要 PostgreSQL は、SQL 標準に準拠した強力なリレーショナル データベース システムであり、多くの機能を備えています。

データベースの容量計画と拡張: MySQL と PostgreSQL はじめに: インターネットの急速な発展とビッグデータ時代の到来により、データベースの容量計画と拡張の重要性がますます高まっています。 MySQL と PostgreSQL は 2 つの一般的なリレーショナル データベース管理システム (RDBMS) であり、データベース容量の計画と拡張において異なる特性と適用可能なシナリオを持っています。この記事では、2 つのデータベースを比較し、その違いを示すコード例をいくつか示します。 1.MySQ
