sql >> データベース >  >> RDS >> PostgreSQL

エラー:32GBのRAMがあり、スワップファイルがないマシンのメモリが不足しています

    トップの出力を正しく読み取っている場合は、メモリが不足している時点では取得されません。

    実際のエラーは問題ないようです。大量のメモリを要求していないため、おそらくその時点でマシンのメモリが不足していました。

    設定を簡単に見てみましょう:

    max_connections = 1000                  # (change requires restart)
    work_mem = 40MB                         # min 64kB
    

    つまり、それぞれがたとえば10 + 40MBを使用して1000の同時クエリをサポートできるという意見です(40MBの倍数を使用する場合もありますが、合理的です)。つまり、これは、マシンに500コアを超え、100GBのRAMがあることを示唆しています。そうではありません。

    つまり、コアの数を2倍にして、接続の最大数として妥当な値です。これにより、別のコアがI / Oを待機している間に、各コアで1つのクエリを実行できます。次に、必要に応じてDBの前に接続プールを配置します(pgbouncer / Javaの接続プール)。

    次に、必要に応じてwork_memを増やすことを検討することもできます。

    ああ-スワップを有効にせずに実行するのは完全に合理的です。交換を開始すると、データベースの使用に関してとにかく苦痛の世界にいます。

    編集:work_memと共有を展開

    疑わしい場合は、常にドキュメント

    shared_buffers 名前が示すように、値はバックエンド間で共有されます。 work_mem バックエンドごとだけでなく、実際にはソートごとです。つまり、3つのサブクエリで並べ替えを行う場合、1つのクエリでその3倍または4倍の量が使用される可能性があります。



    1. 日時を使用する場合のMySQLGROUPBYの日付

    2. OracleDependencyを備えたOracleCommandは永遠に待機します

    3. PHPPDO-接続が多すぎる場合にパスワードを表示する

    4. 値が配列にあるプリペアドステートメント