2
高速テストのためにPostgreSQLを最適化する
典型的なRailsアプリケーションをSQLiteからPostgreSQLに切り替えています。 問題は、PGによりスペックの実行が遅くなることです。 SQLiteでは約34秒、PGでは約76秒で、2倍以上遅くなります。 そこで、コードを変更せずに、SQLiteと同等の仕様のパフォーマンスを実現するためにいくつかの手法を適用したいと思います(理想的には接続オプションを設定するだけで、おそらく不可能です)。 私の頭の上から明らかなことは次のとおりです。 RAMディスク(OSXでRSpecを使用した適切なセットアップは見れば良いでしょう) ログに記録されていないテーブル(データベース全体に適用できるため、すべてのスクリプトを変更する必要はありませんか?) ご存じかもしれませんが、私は信頼性とその他については気にしていません(ここではDBは使い捨てのものです)。 私はPGを最大限に活用し、可能な限り速くする必要があります。 ベストアンサーは、理想的には、それを行うためのトリック、セットアップ、およびそれらのトリックの欠点を説明します。 更新: fsync = off + full_page_writes = off時間のみを〜65秒(〜-16秒)に短縮しました。良いスタートですが、目標の34にはほど遠いです。 アップデート2:私はRAMディスクを使用しようとしましたが、パフォーマンスゲインは誤差の範囲内でした。だから、それだけの価値はないようです。 更新3:* 最大のボトルネックを発見したので、私の仕様はSQLiteの仕様と同じくらい高速に実行されました。 問題は、切り捨てを行ったデータベースのクリーンアップでした。どうやらSQLiteは速すぎます。 「修正」するには、各テストの前にトランザクションを開き、最後にロールバックします。 〜700テストのいくつかの数値。 切り捨て:SQLite-34秒、PG-76秒。 トランザクション:SQLite-17秒、PG-18秒。 SQLiteの2倍の速度向上。PGの4倍の速度増加。