2011-09-27 18 views
1

私は2つの同一のサーバを持っていますが、どちらも同じ設定のpostgresqlサーババージョン9.0.4がインストールされています。約5kの挿入を実行する.sqlファイルを起動すると、最初のファイルは2秒、2番目のファイルは1分30秒かかります。同じ設定、異なるパフォーマンスを持つ2つのpostgresqlサーバ

synchronous_commitを設定すると、スピードが大幅に低下し(期待どおり)、2台のサーバーのパフォーマンスが同等になります。しかし、sync_commitをonに設定した場合、1つのサーバーで挿入スクリプトの実行時間が1秒未満に増え、もう一方のサーバーでは、最初の期間のように増加します。

このようなパフォーマンスの違いについて考えてみましょうか?私はいくつかの設定が欠けていますか?

更新は:time sh -c "dd if=/dev/zero of=ddfile bs=8k count=200000 && sync"

速いサーバー出力:

1638400000 bytes (1.6 GB) copied, 1.73537 seconds, 944 MB/s 

real 0m32.009s 
user 0m0.018s 
sys 0m2.298s 

遅いサーバー出力:

1638400000 bytes (1.6 GB) copied, 4.85727 s, 337 MB/s 

real 0m35.045s 
user 0m0.019s 
sys 0m2.221s 

共通の特徴(両方のサーバー):

単純なディスクのテストを試してみました
SATA, RAID1, controller: Intel Corporation 82801JI (ICH10 Family) SATA AHCI Controller, distribution: linux centOS. mount -v output: 
/dev/md2 on/type ext3 (rw) 
proc on /proc type proc (rw) 
none on /dev/pts type devpts (rw,gid=5,mode=620) 
/dev/md1 on /boot type ext3 (rw) 

速いサーバー:カーネル2.6.18-238.9.1.el5#1 SMP

Disk /dev/sda: 750.1 GB, 750156374016 bytes 
255 heads, 63 sectors/track, 91201 cylinders, total 1465149168 sectors 
Units = sectors of 1 * 512 = 512 bytes 

    Device Boot  Start   End  Blocks Id System 
/dev/sda1   3906  4209029  2102562 fd Linux raid autodetect 
/dev/sda2   4209030  4739174  265072+ fd Linux raid autodetect 
/dev/sda3   4739175 1465144064 730202445 fd Linux raid autodetect 

遅いサーバー:カーネル2.6.32-71.29.1.el6.x86_64#1 SMP

Disk /dev/sda: 750.2 GB, 750156374016 bytes 
64 heads, 32 sectors/track, 715404 cylinders, total 1465149168 sectors 
Units = sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes/512 bytes 
I/O size (minimum/optimal): 512 bytes/512 bytes 
Disk identifier: 0x0006ffc4 

    Device Boot  Start   End  Blocks Id System 
/dev/sda1   2048  4194303  2096128 fd Linux raid autodetect 
/dev/sda2   4194304  5242879  524288 fd Linux raid autodetect 
/dev/sda3   5242880 1465147391 729952256 fd Linux raid autodetect 

パフォーマンスの問題に対処すると便利でしょうか?

+0

サーバーのCPUが同じであることを確認してください。 –

+0

どちらのサーバも同じハードウェア構成とディスクレイアウトを持っていますか? – taro

+0

はい。必要に応じて、lspci/hdparmコマンドの出力を投稿することができます –

答えて

1

あなたの新しいカーネルを持つあなたの遅いサーバーは、仕事の壁を持っていると思います。そうでなければ、停電の場合にデータを失う可能性があるので、これは良いことです。しかし、書き込みキャッシュを有効にし、障壁なしで実行するよりも、もちろん、はさみで動作すると実行するよりも遅くなります。

mount -vを使用すると、障壁が有効になっているかどうかを確認できます。出力でbarrier=1を検索してください。あなたのファイルシステム(mount -o remount,barrier=0 /)の障壁を無くして高速化することはできますが、データ破損の危険があります。

1つのトランザクションで5kの挿入を試行してください。挿入されたすべての行でPostgresがディスクに書き込む必要はありません。ディスクが回転ごとに1回だけセクタに書き込むことができるため、1秒あたりのトランザクション数の理論的な制限は、ディスク回転速度(7200rpmディスク≈7200/60tps = 120tps)に匹敵します。

+0

1秒33秒に対して2秒か?働く障壁によって大きな違いが生まれますか?私は知っている、単一のトランザクションが速くなりますが、私はまだこのパフォーマンスの違いについて調査したいと思います。 実際、カーネル2.6.32(遅いものと同じ)を使って、3番目(仮想)のサーバーで同じ5k挿入テストを実行しました。これは数秒で実行されます。これらの障壁が有効になっているかどうかを確認するにはどうすればよいでしょうか?少なくともテスト目的では、これらの障壁を無効にしようとしますか? –

+0

@ lorenzo:疑問に答えるために私の答えを更新しました。はい、それは2秒対90秒です。バリアを使用しないで、ディスクキャッシュ内の5k倍のデータ量を更新します。バリアを使用すると、このデータがこの特定の場所にある物理的な回転ディスクプラッタに書き込まれるまで5k回待ちます。 – Tometzky

+0

低速サーバーでのマウント-v出力: /dev/md2 on/type ext3(rw) proc/proc type proc(rw) なし/ dev/ptsタイプdevpts(rw、gid = 5、mode = 620 /ブート型のext3上) は/ dev/MD1(RW)を/ proc/sys/fs/binfmt_misc型binfmt_miscに なし(RW) ' 私が障壁に関連するもの。.. –

1

私にはこのように聞こえますが、ハードディスクの書き込みキャッシュが塞がっていますが、低速のサーバでは、PGが書き込み時に実際にデータを書き込んでいますfsync)

+0

を更新しました。両方のボックスのドライブに書き込みキャッシュが有効になっています。私がチェックしなければならない何か他にありますか? –