Postgres DISK IO çok yüksek. Hemen azaltmak için ne yapabilirim?


13

Kullandığımdan daha hızlı diskler olduğunun farkındayım ama bu işlem daha uzun sürecek ve disk IO'sunu azaltmak için bazı acil durum önlemleri kullanmaya çalışıyorum. üstüne kırmızı üzerinde DSK kullanımı neredeyse sürekli rapor ediyor. Bu postgres 8.3 içindir.

Sunucuda tam olarak kullanılmayan 16GB ram olsa da, paylaşılan_buffers ayarım 24 MB'tır. İlk düşüncem, alabileceği kadar veritabanını vermekti ama bunu nasıl yapacağımdan emin değilim (bu özel bir veritabanı sunucusudur).

Yeniden başlatma gerektirmeyen herhangi bir çözüm tercih edilir, ancak bu noktada alabileceğimi alacağım.

Teşekkürler!


Bu soru Serverfault
Francisco R

shared_buffersPostgresql.conf yapılandırma dosyasında artırmayı deneyebilirsiniz . Bu değişiklik için yeniden başlatma gerekiyor. Ayrıca, bundan /proc/sys/kernel/shmmaxönce değerini artırmanız gerekebilir .
Khaled

Yanıtlar:


12

24MB shared_buffers ayarı muhafazakar varsayılan, 16GB RAM ile özel bir veritabanı için çok daha yüksek olması gerektiğini söyleyebilirim. Ancak evet, yeniden boyutlandırmak için sunucuyu yeniden başlatmanız gerekir. Performans yapılandırma yönergeleri için http://wiki.postgresql.org/wiki/Performance_Optimization iyi bir başlangıç ​​noktasıdır. Paylaşılan_buffers'ı 4GB veya 6GB olarak ayarlamak daha makul görünebilir.

Linux'ta bu kadar paylaşılan belleğin bir bloğunu ayırmak için kernel.shmmax sysctl ayarını (/etc/sysctl.conf dosyasında veya sadece / proc / sys / kernel / shmmax yazarak) ayarlamanız gerektiğini unutmayın. Ne kadarının talep edildiğini belirten bir hata alırsanız, kernel.shmmax değerini bundan daha yüksek olarak ayarlamanız gerekir.

Çok fazla belleğiniz olduğundan, varsayılan work_mem değerini daha yüksek olarak ayarlamayı düşünebilirsiniz, bu da sıralama ve karma (grup / sipariş / farklı vb.) Gibi şeylerin geçici dosyalar kullanmak yerine bellekte çalışma eğiliminde olmasını sağlar. Bunu yapmak için sunucuyu yeniden başlatmanız gerekmez, sadece yapılandırma dosyasını güncelleyin, hizmeti yeniden yükleyin ve yeni oturumlar yeni ayarı alacaktır. Bir oturum için varsayılan çalışma belleği 1 MB'dir, tek seferde kullanılabilecek maksimum değeri hesaplayabilir ve bunun work_mem * max_client_connectionsne gibi bir etkisi olacağını tahmin edebilirsiniz.

Ayrıca planlayıcıya çekirdek FS katmanının postgresql'in paylaşılan arabelleklerinin dışında bellekte çok fazla sayfa önbelleğe alacağını belirtmek için active_cache_size değerini artırmalısınız.

vb. umarım bu sizi iyi bir başlangıç ​​yapar.


İyi yazı, sadece hafıza kullanım tahmininiz biraz tehlikeli. work_mem, sıralama / karma işlem başına maksimumdur, bu nedenle karmaşık sorgular birden fazla sıralama / karma işlemine sahip olabilir ve dolayısıyla bir work_mem'den çok daha fazlasını kullanabilir.
Eelke

Teşekkürler, çok yardımcı oldu! Bir diğer önemli değişiklik, disk kullanımım ve genel performansım üzerinde büyük etkisi olan checkpoint_segment ve checkpoint_completion_target oldu. Kriz önlendi. ( wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server )
Harel


2

Burada verilen önerilerin yanı sıra, otomatik vakum ayarlarınıza da bakmak isteyebilirsiniz. Varsayılan olarak yaklaşık 50 güncellemeden sonra tetiklenir ve veritabanınız çok fazla güncelleme / ekleme yapıyorsa, bu çok fazla G / Ç üretecek olan gereksiz miktarda vakum ifadelerini tetikleyebilir.


1

Normal çalışma sırasında maksimum G / Ç çıkışına çok yakın bir sistemde , G / Ç yükünü kontrol noktalarından azaltmak için checkpoint_completion_target değerini artırmak isteyebilirsiniz . Bunun dezavantajı, kontrol noktalarının uzatılmasının iyileşme süresini etkilemesidir, çünkü iyileşmede olası kullanım için daha fazla WAL segmentinin tutulması gerekecektir.

Daha fazlasını burada görün .


0

Postgresql dosyasının diskio değeri çok yüksekse, özellikle "diskte sıralama" yaparak deyimleri çalıştıran deyimleri kontrol etmeli ve uygun dizinleri ayarlamalısınız.

Sadece "Postgresql Performans Ayarlama" için google, nereden başlayacağınıza dair yeterli ipucu bulacaksınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.