2016-09-29 6 views
7

簡単なクエリを実行するRDS PostgreSQLインスタンスがあります。これは、予想よりもはるかに遅く、特にテーブルのコピーやテーブルのカウントなどのシーケンシャルスキャンです。RDSでPostgreSQLのシーケンシャルスキャンが遅いですか?

例: create table copied_table as (select * from original_table)またはselect count(*) from some_table

30GBのテーブルでcount(*)を実行するには約15分かかります(インデックス付きで、すぐにバックグラウンドに従います)。

RDS db.r3.large、15 GBメモリ、400GB SSDです。メトリックログを見ると、Read IOPSが1,400を超えていることは一度もありませんでした。通常、予想されるベースをはるかに下回る約500です。

構成: work_mem:2GB、 のshared_buffers:3ギガバイト、 effective_cache_size:8ギガバイト wal_buffers:16メガバイト、 checkpoint_segmentsの:16

が、これが予想されるタイミングですか?私はより高いIOPSを見なければならないでしょうか?

答えて

1

RDSではまだ利用できない並列逐次スキャンを実装した9.6を除いて、Postgresのような単純なカウントクエリについてはあまりお手伝いできません。

イベントもありますが、hereというヒントがあります。一般的には、Postgresにインデックスのみのスキャンを使用させるようにしてください。インデックスを作成すると、そのインデックスが投影に表示されます。

SELECT id FROM table WHERE id > 6 and id <100; 
-- or 
SELECT count(id) FROM table ... 

テーブルにはその列のインデックスが必要です。

例として公開したクエリは、順次スキャンを回避しません。 CREATE TABLEでは、テーブルの順序を気にしない場合は、いくつかのバックエンドを開き、キー範囲でフィルタリングして並行してインポートすることができます。また、RDSでこれをスピードアップする唯一の方法は、IOPを増加させることです。

+1

私はPostgreSQLが正しく設定されていることを確認していますが、私はRDSからのパフォーマンスを得ています。 – jastr

関連する問題