2016-11-07 13 views
0

パフォーマンスが向上しません私のメインデータベースをスピードアップするためにデータを2番目のデータベースに転送します(より少ないデータ=より良いパフォーマンス)。は、私は3つのテーブルでのPostgreSQL 9.2のデータベースを持っていた

すべてのテーブルから約20%のデータを移行した後、私のメインデータベーステーブルでVACUUM ANALYZEを少しだけクリーンアップしました。

私は次の20%が移行するのがずっと速くなると思っていました....私は間違っていました。アーカイブするデータの次のすべてのパーセンテージは、処理速度が遅く、遅くなります。

私はおそらくVAACUM FULLが必要だと思っていましたが、それを読むのはお勧めできません。さらに、クエリが非常に遅く、ディスク容量がほぼ2倍必要です(新しいテーブルを作成して古いテーブルを削除します)。

データが少なくても処理が遅くなる理由は何ですか?マイグレーション後にデータベースの速度を上げることができるいくつかのステップがありませんか?それ以外のクリーンアップのいくつかの種類VACUUM ANALYZE

メインデータベースからコピーするデータを選択し、メインデータベースから削除するデータを選択する3つのステップを測定の測定時間があることを指定する必要があります。

データの選択は問題です。アーカイブプロセスについて

  1. 私はX日後、古いテーブル行を選択します。それをコピーしてから削除します。
  2. 次に、前に選択したA行に接続されたB行を選択します。それをコピーしてから削除します。
  3. 最後に選択したB行に接続されたC行を選択します。それをコピーしてから削除します。

コンファレンス:

8ギガバイトのRAM。

max_connections = 100 
shared_buffers = 2GB 
effective_cache_size = 6GB 
work_mem = 32MB 
maintenance_work_mem = 512MB 
checkpoint_segments = 32 
checkpoint_completion_target = 0.9 
wal_buffers = 16MB 
default_statistics_target = 100 
random_page_cost = 2.0 
+1

SQL移行コードとそれらのテーブル定義を転記します。 –

+0

私はこれらの3つのステップが互いに独立していることを理解しています。彼らは?ステップ1が原因であることが判明しましたか? –

+0

@ClodoaldoNetoステップ1と2が接続されます。しかし、私は 'select'を独立させてみましたが、' insert' + 'select'が2.5分続くところで約2分続くことがわかりました – ilovkatie

答えて

0

時間がどこで費やされているかを調べてみてください。 BとCの行を見つけるのはSELECTですか?それはDELETEですか?

問題のある文が見つかったら、EXPLAIN (ANALYZE)の出力を見てください。それはあなたが時間が費やされたことを伝えます。

テーブルから行を削除しても、テーブルが小さくなるわけではなく、必ずしもテーブルのクエリが高速になるわけではありません。 のヘルプは、特に逐次スキャンがある場合はVACUUM (FULL)となります。 すべてデータベースにテーブルを実行する必要はありません。スペースが問題であれば、別のテーブルの後でそれを調整することができます。
まず、実行計画を見て、それがまったく役立つかどうかを確認してください。

+0

私はクエリプランナーをチェックしました。インデックススキャンのみを使用しています。この場合、「REINDEX」が必要なのでしょうか? – ilovkatie

+0

特に、索引スキャンが索引の大部分をスキャンする場合は可能です。実行計画なしで言うのは難しい。 –

関連する問題