web-dev-qa-db-ja.com

PostgreSQLは複数のコアを使用して、並列処理を行うテーブルのセクション(カーソル)でコードを実行できますか?

100万のレコードテーブルがあるとします。各レコードは、IDによって一意に識別できます。テーブルが10個のカーソルに分割され、各カーソルに対して姓のフィールドを大文字に変更するように要求するためにWebクライアントによって10件のリクエストが行われ、10個のコアが利用可能であった場合、作業は10倍速く完了しますか?または、テーブル全体のストレートfor ..ループの定期的な処理と比較して、時間の短縮はありますか?

PostgreSQlは変更を加える並列クエリを実行できないことを知っています。代わりにコードを使用して、それを回避しようとしています。これらのレコードは独立していることに注意してください。すべての変更は厳密にレコードに固有です。

4
Peter Dixon

実際、PostgreSQL 9.6は並列(読み取り)クエリを実行できます。並列書き込みはまだサポートされていません。

提案するアプローチは機能しますが、各カーソルはデータベースの異なるスナップショットを持つ異なるセッションになるため、一貫性を保つために注意が必要です。

代わりに、10個の異なるクライアントから10 UPDATEsを実行することもできます。同じ効果で、より単純で、おそらくより高速です。対象の行範囲が重複しないようにしてください。

5
Craig Ringer