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

work_memのサイズを大きくしてもパフォーマンスは向上しません

    work_memを増やすと、並べ替えが約8倍速くなるようです:(172639.670 - 169311.063) / (167975.549 - 167570.669) 。ただし、並べ替えにかかる時間は全体の実行時間のごく一部であるため、1000倍高速化しても、全体としてはそれほど改善されません。時間がかかっているのはseqスキャンです。

    seqスキャンの時間の多くは、おそらくIOに費やされています。 EXPLAIN (ANALYZE, BUFFERS)を実行すると確認できます track_io_timingをオンにした後。

    また、先読みの魔法のために、IOシステムは通常、その全容量を単一のリーダーに提供できるため、seqスキャンの並列化はあまり役に立ちません。また、並列リーダーが互いにつま先を踏むことさえあり、全体のパフォーマンスが低下することがあります。 set max_parallel_workers_per_gather TO 0;を使用して、並列化を無効にできます。 これにより、処理が速くなる可能性があります。そうでない場合は、少なくともEXPLAIN計画が理解しやすくなります。

    テーブルの3%以上をフェッチしています:193963 / (193963 + 6041677) 。インデックスを大量に取得している場合、インデックスはあまり役に立たない可能性があります。そうである場合は、個別のインデックスではなく、組み合わせたインデックスが必要になります。したがって、(client, event_name, date(datetime))のインデックスが必要になります 。次に、date(datetime)を使用するようにクエリを変更する必要もあります。 to_char(datetime, 'YYYY-MM-DD')ではなく 。 to_charは不変ではないため、インデックスを作成できないため、この変更を行う必要があります。



    1. MySQLdbが実行する実際のクエリを出力しますか?

    2. ASP.Net Webアプリケーションを展開するための良い方法は何でしょうか?

    3. postgresでJSON列にエントリを挿入する

    4. ピボット関数またはユニオンを使用せずにテーブルをピボットするMySQLステートメント