4

PostgreSQL9.1.5から9.2.1にアップグレードしました。

"PostgreSQL 9.1.5 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4), 64-bit"
"PostgreSQL 9.2.1 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4), 64-bit"

これは、デフォルトのPostgreSQL構成ファイルと同じマシン上にあります(ポートのみが変更されました)。

テストの目的で、私は簡単な表を持っています:

CREATE TEMP TABLE test_table_md_speed(id serial primary key, n integer);

関数を使用してテストするもの:

CREATE OR REPLACE FUNCTION TEST_DB_SPEED(cnt integer) RETURNS text AS $$
DECLARE
    time_start timestamp;
    time_stop timestamp;
    time_total interval;
BEGIN
    time_start := cast(timeofday() AS TIMESTAMP);
    FOR i IN 1..cnt LOOP
        INSERT INTO test_table_md_speed(n) VALUES (i);
    END LOOP;
    time_stop := cast(timeofday() AS TIMESTAMP);
    time_total := time_stop-time_start;

    RETURN extract (milliseconds from time_total);
END;
$$ LANGUAGE plpgsql;

そして私は電話します:

SELECT test_db_speed(1000000);

奇妙な結果が見られます。PostgreSQL 9.1.5の場合は「8254.769」、9.2.1の場合は「9022.219」になります。これは、新しいバージョンが遅いことを意味します。理由がわかりません。

これらの結果が異なる理由はありますか?

4

1 に答える 1

3

あなたは両方が同じマシン上にあると言います。おそらく、新しいバージョンのデータ ファイルが後で追加されたものと思われます。後のファイルは、アクセス速度が遅いプラッターの中心近くに追加される傾向があります。

Greg Smith の PostgreSQL performance に関する本には、効果を測定およびグラフ化する方法を含む、これに関する適切なセクションがあります。このユーティリティを巧みに使用すると、dd少なくとも読み取りについて、各場所での相対速度のアドホック テストを実行できる場合があります。

9.2 リリースは一般に、以前のバージョンよりも優れた多数のコアにスケールアップしますが、一部のベンチマークでは、単独で実行される単一のクエリのパフォーマンスが非常にわずかに低下しました。ただし、これほど大きな効果を示すベンチマークは見当たりませんでした。私はそれがドライブ上の位置の結果であることに賭けます-良いベンチマークを行うことがどれほど難しいかを示すだけです.


UPDATE : 一部のクエリのパフォーマンスを向上させるために 9.2.0 で行われた変更により、他の一部のクエリのパフォーマンスが低下しました。最終的に、バージョン 9.2.3 で発生したこの変更を元に戻す必要があると判断されました。そのため、そのメンテナンス リリースにアップグレードした後にパフォーマンスをチェックする価値があります。9.3.0 には、元に戻されたパッチが修正した問題を回帰を引き起こすことなく修正することが確認されている適切な修正が含まれます。

于 2012-11-29T21:55:46.100 に答える