3

commit(非常に省略)を呼び出す前に、次のコードを25回実行しています。

def query_and_insert(conn):
    c = conn.cursor()
    result = c.execute("SELECT ...")
    result = modify_result(result)
    c.execute("INSERT ...".format(result))
    result.close()

if __name__ == "__main__":
    conn = MySQLDB.connect(...)
    loop 25 times:
        query_and_insert(conn)
    conn.commit()
    conn.close()

最初の15程度のクエリの後、速度は大幅に低下します(クエリ/挿入コンボごとに1秒未満から20秒以上になります)。問題は間違いなく、実行しているクエリの複雑さではありません。最後の10個のクエリを最初に移動すると、同じ速度で実行され、最後のクエリが再び大幅に遅くなります。

AWSで時間がかかりすぎるプロセスに対して、ある種のスロットルまたは優先度の低下はありますか?これを回避する方法はありますか?

編集:AmazonEC2でMicroInstanceを使用しています。空のテーブルで挿入を行っているため、テーブルサイズの作成に問題はありません。

4

1 に答える 1

1

あなたが説明しているのは、マイクロインスタンスの通常の動作です。詳細については、マイクロインスタンスのドキュメントをご覧ください。要するに、マイクロインスタンスはかなりの量のCPUにアクセスできますが、非常に短い期間以上使用すると、ハードに抑制されます。これがアプリケーションに悪影響を及ぼしている場合は、マイクロインスタンスには適していません。マイクロインスタンスは、低CPUアプリケーションや、ユーザーが遅延の増加に気付かないアプリケーションを対象としています。

このタイプのスロットルの対象となるインスタンスはマイクロインスタンスのみであるため、にアップグレードするのm1.smallは1つの方法です。すべてのt1.microインスタンスはEBSでサポートされているため、インスタンスを停止して(終了せに)、[インスタンスタイプの変更]を使用してより大きなインスタンスを選択し、再起動することで、EC2コンソールからアップグレードできます。これにより、エラスティックIPを使用していない限り、新しい内部IP/ホスト名と新しいパブリックIP/ホスト名が生成されますが、CPUの量は一定になります。

于 2012-12-01T03:50:50.073 に答える