web-dev-qa-db-ja.com

Postgresの実行速度が非常に遅い

こんにちは、読んでいただきありがとうございます。

私は分散システムで作業しており、8つのクラスターがあり、それぞれにPostgresインスタンスがあります。ただし、Postgresインスタンスの1つは、他のインスタンスに比べて非常に遅いデータを書き込みます。すべてのコンピューターは同じバージョンのUbuntuを実行し、同じ仕様と同じPostgresバージョンがインストールされています。

これが私がすることです:

  • いくつかのJavaコードを実行し、JDBC接続を介して作成されたデータをデータベースに書き込みます。すべてが1つのJavaインスタンスで行われます。正確なデータは異なりますが、同じスケール。

遅いクラスターの場合、次の実行時間(秒単位)があります。

Create Data with Java    WriteData
92                       11055

他のクラスターについては、次のようなものがあります。

Create Data with Java    WriteData
95                       266

表領域に十分なディスク容量があることをすでに確認し、Postgresインスタンスを完全に再インストールしましたが、問題が何であるかはわかりません。

潜在的な問題を探すことができる提案をありがとうございます!

更新:

いくつかのパフォーマンスパラメータ:

diskSlow: Sudo hdparm -t /dev/sda6 
/dev/sda6: Timing buffered disk reads: 76 MB in 3.05 seconds = 24.92 MB/sec

diskOther: Sudo hdparm -t /dev/sda6 
/dev/sda6: Timing buffered disk reads: 314 MB in 3.00 seconds = 104.62 MB/sec 

キャッシュされた読み取りのタイミングは同等です。

PDATE2:わかりました。遅いクラスターが最近再インストールされ、Ubuntuのバージョンが新しいことがわかりました。

SlowCluster                       OtherClusters: 
Release:    Ubuntu 10.10          Release:    9.10
Codename:   maverick              Codename:   karmic

lspci出力:

クラスターが遅い:

00:00.0 Host bridge: Intel Corporation 4 Series Chipset DRAM Controller (rev 03)
00:02.0 VGA compatible controller: Intel Corporation 4 Series Chipset Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation 4 Series Chipset Integrated Graphics Controller (rev 03)
00:1a.0 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #4
00:1a.1 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #5
00:1a.2 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #6
00:1a.7 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #2
00:1b.0 Audio device: Intel Corporation 82801JI (ICH10 Family) HD Audio Controller
00:1c.0 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Root Port 1
00:1c.5 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Root Port 6
00:1d.0 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #1
00:1d.1 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #2
00:1d.2 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #3
00:1d.7 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #1
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 90)
00:1f.0 ISA bridge: Intel Corporation 82801JIB (ICH10) LPC Interface Controller
00:1f.2 IDE interface: Intel Corporation 82801JI (ICH10 Family) 4 port SATA IDE Controller #1
00:1f.3 SMBus: Intel Corporation 82801JI (ICH10 Family) SMBus Controller
00:1f.5 IDE interface: Intel Corporation 82801JI (ICH10 Family) 2 port SATA IDE Controller #2
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)

他のクラスター:

00:00.0 Host bridge: Intel Corporation 4 Series Chipset DRAM Controller (rev 03)
00:01.0 PCI bridge: Intel Corporation 4 Series Chipset PCI Express Root Port (rev 03)
00:1a.0 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #4
00:1a.1 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #5
00:1a.2 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #6
00:1a.7 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #2
00:1b.0 Audio device: Intel Corporation 82801JI (ICH10 Family) HD Audio Controller
00:1c.0 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Port 1
00:1c.5 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Port 6
00:1d.0 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #1
00:1d.1 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #2
00:1d.2 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #3
00:1d.7 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #1
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 90)
00:1f.0 ISA bridge: Intel Corporation 82801JIB (ICH10) LPC Interface Controller
00:1f.2 IDE interface: Intel Corporation 82801JI (ICH10 Family) 4 port SATA IDE Controller
00:1f.3 SMBus: Intel Corporation 82801JI (ICH10 Family) SMBus Controller
00:1f.5 IDE interface: Intel Corporation 82801JI (ICH10 Family) 2 port SATA IDE Controller
01:00.0 VGA compatible controller: nVidia Corporation GT200 [GeForce GT 220] (rev a2)
01:00.1 Audio device: nVidia Corporation Device 0be2 (rev a1)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)
03:00.0 Network controller: RaLink RT2860

これら2つの主な違い:

03:00.0 Network controller: RaLink RT2860
01:00.1 Audio device: nVidia Corporation Device 0be2 (rev a1)
00:01.0 PCI bridge: Intel Corporation 4 Series Chipset PCI Express Root Port (rev 03)

lshwから:

クラスターが遅い

width: 64 bits
    capabilities: vsyscall64 vsyscall32
  *-core
       description: Motherboard
       physical id: 0
     *-memory
          description: System memory
          physical id: 0
          size: 7967MiB
     *-cpu
          product: Intel(R) Core(TM)2 Quad CPU    Q8300  @ 2.50GHz
          vendor: Intel Corp.
          physical id: 1
          bus info: cpu@0
          size: 2003MHz
          capacity: 2003MHz
          width: 64 bits
          capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx x86-64 constant_tsc Arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm cpufreq
 *-pci
      description: Host bridge
      product: 4 Series Chipset DRAM Controller
      vendor: Intel Corporation
      physical id: 100
      bus info: pci@0000:00:00.0
      version: 03
      width: 32 bits
      clock: 33MHz
      configuration: driver=agpgart-intel
      resources: irq:0

その他のクラスター:

    width: 64 bits
    capabilities: vsyscall64 vsyscall32
  *-core
       description: Motherboard
       physical id: 0
     *-memory
          description: System memory
          physical id: 0
          size: 8960MiB
     *-cpu
          product: Intel(R) Core(TM)2 Quad CPU    Q8300  @ 2.50GHz
          vendor: Intel Corp.
          physical id: 1
          bus info: cpu@0
          size: 2003MHz
          capacity: 2003MHz
          width: 64 bits
          capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx x86-64 constant_tsc Arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm cpufreq
 *-pci
      description: Host bridge
      product: 4 Series Chipset DRAM Controller
      vendor: Intel Corporation
      physical id: 100
      bus info: pci@0000:00:00.0
      version: 03
      width: 32 bits
      clock: 33MHz
    *-pci:0
         description: PCI bridge
         product: 4 Series Chipset PCI Express Root Port
         vendor: Intel Corporation
         physical id: 1
         bus info: pci@0000:00:01.0
         version: 03
         width: 32 bits
         clock: 33MHz
         capabilities: pci bus_master cap_list
         configuration: driver=pcieport-driver
         resources: irq:24 ioport:d000(size=4096) memory:fd000000-fe9fffff ioport:de000000(size=301989888)
       *-display UNCLAIMED
            description: VGA compatible controller
            product: GT200 [GeForce GT 220]
            vendor: nVidia Corporation
            physical id: 0
            bus info: pci@0000:01:00.0
            version: a2
            width: 64 bits
            clock: 33MHz
            capabilities: bus_master cap_list
            configuration: latency=0
            resources: memory:fd000000-fdffffff memory:e0000000-efffffff(prefetchable) memory:de000000-dfffffff(prefetchable) ioport:dc00(size=128) memory:fe900000-fe97ffff(prefetchable)

ヒントをいただければ幸いです。すべてのクラスターは(ほぼ)同じハードウェアを備えています。一部のドライバーや構成が異なる可能性がありますが、私はこれらのトピックにまったく精通していません。どちらに行けばいいのか教えてください。

ありがとう!

4
evgeni

Ubuntu 10.10に含まれているものなどの新しいLinuxカーネルは、データベースの書き込み時に別の方法を使用して情報をドライブにフラッシュします。 Linuxは、データベースが通常のfsync呼び出しの1つを行うときに、いわゆる書き込みバリアを使用します。これは、トランザクションをコミットするたびに発生します。新しい書き込みバリアコードは、個々のハードドライブの書き込みキャッシュから情報をプッシュするように注意しているため、1つのクラスターは低速です。古いLinuxシステムでは、データベースが書き込みを要求した後でも、ドライブのキャッシュにとどまります。

このトピックの詳細については、 Reliable Writes を参照してください。信頼性の高いデータベースの書き込みに関しては、新しい低速のクラスターが実際に正しいことを行っています。高速なシステムでは、構成がクラッシュした場合にデータが失われる可能性がありますが、低速なシステムではその問題は発生しません。

クラッシュ時にデータが失われる可能性を気にする場合は、遅いシステムよりも速いシステムの方が心配です。遅いシステムを高速化するためにできる簡単なことが2つあります。

  • Postgresql.confファイルを編集し、パラメーターsynchronization_commitをオフにして、サーバーをリロードします。これにより、オペレーティングシステムにデータのフラッシュを要求するデータベースが無効になり、そのため、1台のサーバーでパフォーマンスが大きく異なる書き込みバリアフラッシュが無効になります。これは、新しいボックスでのデータベースの破損の問題からは安全です(古いボックスはまだ危険にさらされています)が、クラッシュすると一部のデータが失われる可能性があります。

  • 「nobarrier」オプションを使用してファイルシステムを再マウントします。古いシステムと同じように、ここでクラッシュ中にデータベースが破損する可能性に戻ります。

コードを調べて、データベースへのコミットの頻度を減らすことができるかどうかを確認することをお勧めします。一度に大きな行ブロックでデータ書き込みを行うと、データ書き込みがはるかに高速になる場合があります。あなたの問題から、データベースに書き込むたびにコミットしているのではないかと思います。

5
Greg Smith