PostgreSQLは64コアまで拡張できますか?


10

このComputer World記事では、PostgreSQLが64のコア制限まで拡張できることを指定しています。これは、64コアの1つのマルチコアプロセッサを意味しますか?それともコアの少ないマルチプロセッサですか?

私が尋ねる理由は、PostgreSQLがスケールアップできるプロセッサの数を見つけようとしているためですが、もちろんそれはプロセッサのタイプに限定される可能性があります。ただし、他のデータベースで他の統計情報(つまり、ここでは Microsoft SQL Server が最大320の論理プロセッサに拡張できることを示す)を見つけており、コアの数を指定していません。これは非常にあいまいな統計ですか?

どんな考えでも大歓迎です。ありがとう!


1
PostgreSQLは、8コアCPUが8個、2コアCPUが32個など、何でもかまいません。論理プロセッサのみを考慮します。また、64コアは概算であり、残りのハードウェアによって異なります。7200rpm SATAハードドライブに1TBデータベース用のRAMが4GBしかない場合、64コアは何の役にも立ちません。コアの数字には、ハード技術的な制限は、それが最近テストされ、最大64までうまくスケールすることが証明されていますということだけだ、ありません
クレイグリンガー

回答:


7

いいえ、それは非常に正確な統計です。「論理プロセッサー」はコアです。コアはそれだけです。物理プロセッサにどのように分散しているかは問題ではありません。

サポートされている数よりも多くのコアを持つマシンを扱っている場合、これはPostgreSQLの問題ではありません。各接続は本質的にシングルスレッド *なので、コアの数がいくつあっても、同時接続の効率と効率は制限されます。

言うまでもなく、これは、より複雑な方法で物事をクラスター化したい場合を除き、コアの数よりも高速なコアにお金を投入する必要があることを意味します。

* 2017更新:一部のクエリ(またはサブクエリ)が並行して実行される場合があります


1
Needless to say this also means you should put your money in faster cores than quantity of cores unless you want to cluster things in a more complicated method.<-コアの数が同時クライアントの数よりも多く、同時クライアントの数が増加する可能性が低い場合にのみ、この声明に同意します。各Postgresバックエンドでコアを使用できるようにすることはパフォーマンスにとって非常に重要です...
voretaq7

@ voretaq7私はほぼ同意しますが、TPSが高いCPUは(明らかに)一定の時間内により多くのトランザクションを処理できるため、より多くのクライアントを処理できます。負荷のタイプと予算に応じて、最適な場所が決まります。
Oli

1
論理プロセスは最小の論理実行単位であり、現在のテクノロジーではコアではなく、スレッドです。
dyasny

2
@ voretaq7:いくつかの接続プールメカニズムを介してpostgresqlに接続することは珍しくありません。とりわけ、これはpostgresqlへの接続に比較的コストがかかるために行われます。プーリングにより、データベースへの同時接続数を大幅に減らすことができます。そのため、コア数よりも高速CPUを好む傾向があります。しかし、いつものように、それは多くの要因に依存します...
m.sr

2
@ m.sr同意-接続プーリングのメカニズムは非常に一般的です。これらの「最もスマートな」は、Postgresへのいくつかの接続をスピンアップし、それらの間でバランスをとります(社内アプリの1つは、各ApacheプロセスにPostgresへの独自の接続を提供することでそれを行います-合理的なバックエンドを使用するユースケースのかなり便利なマッピング対ユーザーの比率)。接続プールがクエリをバックエンドを生成するのではなくキューに入れるようにする場合、私見は有利ではありませんが、その長所と短所はデータベース管理者について詳しく調べるのがより興味深いでしょう。だから私は尋ねました!
voretaq7 2012

12

Postgresは、インストールしたい数のプロセッサまで拡張でき、OSは効果的に処理/管理できます。Postgresを128コアマシン(または128物理プロセッサを搭載したマシン)にインストールすれば、問題なく動作します。それはあり、OSのスケジューラは、多くのコアを扱うことができればさらに良い64コアのマシンよりも動作します。

Postgresがすることが示されているスケール 直線の注意事項を(64個のコアまで:我々は、(特定の構成では、読み取りパフォーマンスについてディスク、RAM、OSなど)を話している- ロバート・ハースは、素敵なグラフでブログ記事を持っています以下を再現しました:

ここに画像の説明を入力してください

このグラフの何が重要ですか?

クライアント数がコア数以下である限り、関係は線形(またはそれに近い)であり、クライアント接続数が多いほど、ほぼ線形にパフォーマンスが低下するように見えます。バックエンドがCPUを求めて戦い始めるため、コアを実行してPostgresバックエンドを実行します(負荷平均が1.0を超えるなど)。

これは最大64コアに対してのみ実証されていますが、コア(およびクライアント)を追加し続け、プロセスがもはや存在しない他のサブシステム(ディスク、メモリ、ネットワーク)の限界までパフォーマンスを改善し続けることができると一般化できます。 CPU競合の問題がありますが、代わりに何かを待っています。

Haasはまた、32コアまでの線形スケーラビリティを証明した別の記事を持っています。これには、一般にスケーラビリティに関するいくつかの優れた参考資料があります-強くお勧めのバックグラウンドリーディング!)


2
ちなみに、この線形スケーラビリティの理由はOliの回答で述べられています。Postgresはクライアント接続ごとに個別のバックエンドプロセスを使用します。その結果、1つの接続のみを使用している場合、複数のコアのメリットは(もしあれば)あまりわかりません。複数のコアを活用するには、並列リクエストが必要です。
voretaq7

2

他の人は、論理プロセッサは一般にCPUコアを指すことを明らかにしましたが、コアがCPUにどのように分散されているかは問題ではないという声明についてコメントしたいと思います。

コア間で共有されるか、コアの単一またはサブグループ専用のキャッシュをCPUダイ上に置くことができます。たとえば、1つの一般的な構成は、専用L1キャッシュと共有L2キャッシュです。この場合、シングルデュアルコアCPUのスケーラビリティは、2つのシングルコアCPUとは異なる場合があります。

これらのスケーラビリティは、NUMAマシンが非NUMAとは異なる動作を示すため、メインメモリに継続的に影響します。

私がこれらを指摘しているのは、OPがスケーラビリティの問題について議論しているからです。その答えは、一般に「プログラムXがY CPUコアを使用できる」よりも微妙です。


1

この場合、それらはより少ないコアを持つ複数のプロセッサを意味します...話のいくつかは将来を見据えています。一部はマーケティングの話です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.