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

Postgresqlシーケンシャルスキャンは5億行でパフォーマンスが低下します

    このクエリに役立つものはほんのわずかです:

    • 実際のスキャンは問題ではないようですが(42秒かかりました)、テーブルをRAMに保持できれば、より高速になる可能性があります。

    • あなたの主な問題は、PostgreSQLがすでに並列化しているソートです。

      調整できることがいくつかあります:

      • work_memを増やします 可能な限り、並べ替えが速くなります。

      • max_worker_processesを増やします (これには再起動が必要です)、max_parallel_workers およびmax_parallel_workers_per_gather より多くのコアをクエリに使用できるようにします。

        PostgreSQLには、テーブルに使用する準備ができている並列ワーカーの最大数を計算する内部ロジックがあります。これは、並列ワーカーの数と同じ数を考慮します

        log 3 (テーブルサイズ/ min_parallel_table_scan_size

        次の場合よりも多くのプロセスを使用するように強制できます:

        ALTER TABLE ohlcv SET (parallel_workers = 20);
        

        ただし、max_parallel_workers それでも上限です。

    テーブルに削除と更新がなく、データが並べ替え順序で挿入されている場合は、ORDER BYを省略するだけで問題を解決できます。 synchronize_seqscans = offを設定した場合の句 。




    1. 秒に基づくPostregsql日付の違い

    2. HTMLメールに画像を埋め込む

    3. GormとMySQLを使用した空間データの操作

    4. ExcelからOracleにデータをコピーする方法は?