【PostgreSQL】我对PostgreSQL的内存进行了一番研究,了解到了很多东西

首先

这是我在研究PostgreSQL内存的时候记录的笔记。

请提供具体的内容。

我对PostgreSQL的内存不太了解……

总的来说,PostgreSQL中使用的内存可以分为两种:共享内存和由后台进程分配的进程内存。

我主要参考了以下页面。
非常有益于学习,推荐一定要看!
– http://www.nminoru.jp/~nminoru/postgresql/pg-table-and-block-structure.html#block-and-page
– https://gihyo.jp/dev/feature/01/dex_postgresql/0002?page=2
– https://qiita.com/Brutus/items/972dcfb0abc3ef561ba0

共享缓冲区(shared_buffers)

严格来说,据说共享缓冲区内被划分为4个部分,详细信息请参阅以下链接:https://gihyo.jp/dev/feature/01/dex_postgresql/0002?page=2

    • 共有バッファ派、テーブルやインデックスのデータをページ単位でキャッシュ

 

    • PostgreSQL インスタンス(=※データベースクラスタ)毎に確保されるバッファで、postgresql.conf の中の shared_buffers オプションでそのサイズが指定される

 

    • 共有バッファは,shared_buffersの項目で値を設定でき、デフォルト値は32MB

 

    • 共有メモリバッファを介してデータを読み取ることによってディスクに直接アクセスする回数を減らして読み取り性能を向上させることができる

 

    • →データアクセス時にデータベースファイルをページ単位でメモリ上に展開しているから

 

    • 共有バッファが大きければええやんって感じるが、メモリ領域を圧迫して、※ディスクスワップの発生によって性能を低下させる

 

    • 目安としてメモリを1GB以上搭載したサーバの場合、搭載メモリ量の25%程度を設定するのが推奨

 

    → 「見積りサイズ = サーバのメモリ容量 * 25 / 100」

工作内存(work_mem)是进程内存的一部分。

严格来说,进程内存似乎被分成了三个部分,具体详情请参考以下链接:
https://gihyo.jp/dev/feature/01/dex_postgresql/0002?page=2

    • 作業メモリは,クエリの実行時にソートやハッシュテーブルの利用のために使われる領域

 

    • サービス開始当初はwork_memの値が小さくても取り扱うデータも小さいため問題にならなかったものが,サービスの成長とともに取り扱うデータサイズが大きくなり,ソートの際にメモリからあふれることがある

 

    • →このようなことを防ぐため,work_memの値は適切にチューニングする必要がありますし,スワップを監視する必要がある

 

    • →「(OSの実メモリ – shared_buffers) / max_connections」を超えないように設定する。

 

    • work_memはクライアント同時接続数に比例し、さらにその数倍の物理メモリを消費

 

    → よって、メモリ不足からスワップが発生しかえって性能が悪くなるため、注意が必要

请提供更多的上下文或详细信息,以便能够准确地为您提供中文的同义句。

・http://www.nminoru.jp/~nminoru/postgresql/pg-table-and-block-structure.html#block-and-page
-> http://www.nminoru.jp/〜nminoru/postgresql/pg-table-and-block-structure.html#block-and-page

・https://qiita.com/Brutus/items/972dcfb0abc3ef561ba0
-> https://qiita.com/Brutus/items/972dcfb0abc3ef561ba0

我写下了我不知道的以下术语。

虽然感到有些尴尬,但我会将上述句子中我不熟悉的单词列举出来。

数据库集群是什么?

Please provide more context or specific content that you would like to have paraphrased in Chinese.

在構建和操作数据库的基础上,通常情况下是在一个服务器上搭建一个数据库。
然而,越来越多的情况下,会在多个服务器(包括虚拟服务器)上搭建同一个数据库。
原因是,仅仅依靠一个服务器无法实现 “高可用性、并行处理和性能提升” 等要求。
我认为性能提升这一点可能有些难以想象,以下进行解释。

关于性能提升:
在Web应用程序中,数据库用户数量的增加是很常见的。对于大型的Web应用程序,可以创建一个数据库的副本,并将数据库的访问指向这个副本,以便能够应对用户数量的增加。

然而,有一个与数据库集群类似的系统,可以协调多个不同的数据库之间的合作,需要注意不要混淆它与”DBLink”或”SQL/MED”。

请提供更多上下文。

迪斯克交换是什么?

如果有人要求更深入地解释,以类似”将光盘交换”的理解程度为基础,那我完全摸不着头脑,所以我进行了一番研究。

请将以下内容用中文进行本地化改写,只需提供一种选项:

– “The weather today is very nice.”
– “I love to eat delicious food.”
– “I enjoy reading books in my free time.”
– “My favorite color is blue.”
– “I like to travel and explore new places.”

计算机的处理过程是在内存中进行的,但是如果目标数据很大,暂时不需要使用的部分会被转移到硬盘驱动器中,然后将所需的数据放置在空出的空间中继续进行。在内存和硬盘驱动器之间进行文件交换的过程被称为磁盘交换,或简称交换。

请提供更多上下文信息,以便我能够准确地为您提供中文的回答。

我的感受

一旦发生了交换操作,不仅可以增加内存空间,还可以考虑调整work_mem值和shared_buffers值。另外,可以尝试重新生成索引表等。(以下)

CREATE INDEX CONCURRENTLY new_idx ON table1(col1, col2, col3);
广告
将在 10 秒后关闭
bannerAds