私はAmazon Redshiftに約6億行のテーブルを持っています。私は、sqlalchemy_redshift接続を介して次のクエリを発行するPythonプロセスがあります:Amazon Redshiftが並行アップデートをシリアル化するのはなぜですか?
begin;
UPDATE dogs
SET computed_dog_type = f_get_dog_type(name, breed, age, color)
WHERE week = :week;
commit;
このクエリは正常に動作します。ただし、一度に6億行以上実行するには遅すぎます。 where句は、1週間分の行が2Kから2〜3百万の範囲にある週によって効果的に制限します。
私は実行は次のようになりますPythonのスレッドでクエリコードをラップ:
16:38 $ python dog_classifier.py update_range 2009-10-05 2009-10-26
11-02 16:39 PTC INFO DOG CLASSIFIER STARTED
11-02 16:39 PTC INFO START update of dogs.computed_dog_type for week: 2009-10-05
11-02 16:39 PTC INFO START update of dogs.computed_dog_type for week: 2009-10-12
11-02 16:39 PTC INFO START update of dogs.computed_dog_type for week: 2009-10-19
11-02 16:39 PTC INFO START update of dogs.computed_dog_type for week: 2009-10-26
11-02 16:45 PTC INFO END update of 338378 records in dogs.computed_dog_type for week: 2009-10-12 in 6 minutes
11-02 16:52 PTC INFO END update of 355796 records in dogs.computed_dog_type for week: 2009-10-05 in 13 minutes
11-02 16:59 PTC INFO END update of 337909 records in dogs.computed_dog_type for week: 2009-10-19 in 20 minutes
11-02 17:07 PTC INFO END update of 281617 records in dogs.computed_dog_type for week: 2009-10-26 in 28 minutes
11-02 17:07 PTC INFO DOG CLASSIFIER STOPPED AFTER UPDATING 1313700 RECORDS
私は一度月実行しているよ
- 一般的に、万行程度であること、データの4-5週間とか、ぐらい。
赤いシフトでクエリがシリアル化されているかのように見えます。これらのクエリが実行されている間にクラウドウォッチダッシュボードからの出力を調べると、ピークと谷は更新クエリに非常に明確に結びついています。
私は、デフォルトのクエリキューはおそらく犯人であると考えられますが、実行時にその振る舞いを調べることは困難なようです。
これをどのようにデバッグできますか?何がこのようにシリアル化する原因になるのでしょうか?