Назад | Перейти на главную страницу

Postgres работает очень медленно

Привет и спасибо за чтение.

Я работаю над распределенной системой и имею 8 кластеров, каждый из которых имеет экземпляр Postgres. Однако один из экземпляров Postgres записывает данные очень медленно по сравнению с другими. Все компьютеры работают под управлением одной и той же версии Ubuntu, имеют одинаковые спецификации и установлена ​​одна и та же версия Postgres.

Вот что я делаю:

Для медленного кластера у меня есть следующие времена выполнения (в секундах):

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 

Время чтения из кэша сопоставимо.

ОБНОВЛЕНИЕ2: Хорошо, я обнаружил, что медленный кластер недавно был переустановлен и имеет более новую версию 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

Основное различие между этими двумя:

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)

Буду признателен за любые подсказки. Все кластеры имеют (почти) одинаковое оборудование. Возможно, некоторые драйверы или конфигурации отличаются, но я совсем не знаком с этими темами. Пожалуйста, дайте мне знать, каким путем я могу пойти.

Спасибо!

Новые ядра Linux, такие как ядро, включенное в Ubuntu 10.10, используют другой метод для сброса информации на ваш диск при записи в базу данных. Linux использует так называемые барьеры записи, когда база данных выполняет один из своих обычных вызовов fsync, что происходит всякий раз, когда вы фиксируете транзакцию. Ваш единственный кластер работает медленно, потому что новый код барьера записи более осторожен, чтобы выталкивать информацию из отдельных кешей записи жесткого диска. В старых системах Linux он оставался в кэше диска даже после того, как база данных запросила его запись.

Видеть Надежные записи для получения дополнительной информации по этой теме. Более новый, медленный кластер на самом деле делает правильные вещи с точки зрения надежной записи в базу данных. Ваши более быстрые системы, вероятно, могут потерять данные в случае сбоя в их конфигурации, в то время как более медленные не имеют этой проблемы.

Если вас беспокоит возможность потери данных в случае сбоя, вам следует беспокоиться о более быстрых системах больше, чем о медленных. Есть две простые вещи, которые вы можете сделать, чтобы ускорить медленную систему:

  • Отредактируйте файл postgresql.conf, отключите параметр synchronous_commit и перезагрузите сервер. Это отключает базу данных, запрашивающую у операционной системы очистку данных, и, следовательно, сброс барьера записи, производительность которого на одном сервере сильно различается. Это безопасно от проблем с повреждением базы данных в новом ящике (старые по-прежнему находятся в опасности), но вы можете потерять некоторые данные в случае сбоя.

  • Перемонтируйте файловую систему с опцией «nobarrier». Вы вернетесь к возможности повреждения базы данных во время сбоя здесь, как и ваши старые системы.

Вы можете посмотреть свой код и выяснить, можно ли делать фиксацию в базе данных реже. Иногда запись данных выполняется намного быстрее, если вы делаете это большими блоками строк за раз. Судя по вашей проблеме, я предполагаю, что вы можете совершать фиксацию после каждой записи в базу данных.