Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
autovacuum_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her otomatik vakum çalışan işlemi tarafından kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | -1 |
| İzin verilen değerler | -1-2097151 |
| Parametre türü | dynamic |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | İşleme zaman damgası önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. Bu değeri, shared_buffers'ın bir kesri olarak belirlemek için 0 girin. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 0-131072 |
| Parametre türü | durağan |
| Documentation | commit_timestamp_buffers |
dinamik_paylaşımlı_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Kullanılan dinamik paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | posix |
| İzin verilen değerler | posix |
| Parametre türü | salt okunur |
| Documentation | dinamik_paylaşımlı_bellek_türü |
hash_mem_multiplier
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Karma tablolar için kullanılacak "work_mem" katı. |
| Veri türü | sayısal |
| Varsayılan değer | 2 |
| İzin verilen değerler | 1-1000 |
| Parametre türü | dynamic |
| Documentation | hash_mem_multiplier |
büyük sayfalar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Linux veya Windows'ta büyük sayfaların kullanımı. |
| Veri türü | enumeration |
| Varsayılan değer | try |
| İzin verilen değerler | on,off,try |
| Parametre türü | durağan |
| Documentation | huge_pages |
Description
Büyük sayfalar, belleğin daha büyük bloklarda yönetilmesini sağlayan bir özelliktir. Standart 4 KB sayfa yerine genellikle 2 MB'a kadar blokları yönetebilirsiniz.
Çok büyük sayfaların kullanılması, CPU'ları etkili bir şekilde boşaltan performans avantajları sunabilir:
- Bellek yönetimi görevleriyle ilişkili ek yükü, çeviri lookaside buffer (TLB) hatalarının daha az olması gibi durumlarla azaltır.
- Bellek yönetimi için gereken süreyi kısaltır.
Özellikle, PostgreSQL'de büyük sayfaları yalnızca paylaşılan bellek alanı için kullanabilirsiniz. Paylaşılan bellek alanının önemli bir bölümü paylaşılan arabellekler için ayrılır.
Başka bir avantajı, büyük sayfaların paylaşılan bellek alanının diske değişimini engellemesi ve bu da performansı daha da dengeler.
Recommendations
- Önemli bellek kaynaklarına sahip sunucular için büyük sayfaları devre dışı bırakmaktan kaçının. Çok büyük sayfaları devre dışı bırakmak performansı tehlikeye atabilir.
- Çok büyük sayfaları desteklemeyen daha küçük bir sunucuyla başlıyorsanız ancak bunu destekleyen bir sunucuya ölçeği artırmayı düşünüyorsanız, sorunsuz geçiş ve en iyi performans için ayarını konumunda
huge_pagestutunTRY.
Azure'a özgü notlar
Dört veya daha fazla sanal çekirdek içeren sunucular için, temel alınan işletim sisteminden büyük sayfalar otomatik olarak ayrılır. Bu özellik, dörtten az sanal çekirdeği olan sunucularda kullanılamaz. Büyük sayfa sayısı, shared_buffers de dahil olmak üzere paylaşılan bellek ayarlarında yapılan değişiklikler sonucunda otomatik olarak ayarlanır.
büyük_sayfa_boyutu
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | İstenmesi gereken büyük sayfa boyutu. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | huge_page_size (büyük sayfa boyutu) |
io_combine_limit
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Veri okuma ve yazma boyutu sınırı. |
| Veri türü | tamsayı |
| Varsayılan değer | 16 |
| İzin verilen değerler | 1-128 |
| Parametre türü | dynamic |
| Documentation | io_combine_limit |
io_max_combine_limit
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sunucu genelinde io_combine_limit'i sınırlayan sınır. |
| Veri türü | tamsayı |
| Varsayılan değer | 16 |
| İzin verilen değerler | 1-128 |
| Parametre türü | dynamic |
| Documentation | io_max_combine_limit |
io_maksimum_eşzamanlılık
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Bir prosesin aynı anda yürütebileceği maksimum IO sayısı. |
| Veri türü | tamsayı |
| Varsayılan değer | 64 |
| İzin verilen değerler | -1-1024 |
| Parametre türü | durağan |
| Documentation | io_max_concurrency |
io_method
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Eşzamanlı olmayan girdi/çıktı yürütme yöntemini seçer. |
| Veri türü | enumeration |
| Varsayılan değer | worker |
| İzin verilen değerler | worker,sync |
| Parametre türü | durağan |
| Documentation | io_method |
io_workers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | io_method=worker için G/Ç işçi süreçlerinin sayısı. |
| Veri türü | tamsayı |
| Varsayılan değer | 3 |
| İzin verilen değerler | 1-32 |
| Parametre türü | dynamic |
| Documentation | io_workers |
logical_decoding_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Mantıksal kod çözme için kullanılacak en yüksek belleği ayarlar. Bu kadar bellek, diske dökülmeden önce her iç yeniden sıralama arabelleği tarafından kullanılabilir. |
| Veri türü | tamsayı |
| Varsayılan değer | 65536 |
| İzin verilen değerler | 64-2147483647 |
| Parametre türü | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Bakım işlemleri için kullanılacak en yüksek belleği ayarlar. Bu, VACUUM ve CREATE INDEX gibi işlemleri içerir. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 1024-2097151 |
| Parametre türü | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem PostgreSQL'deki bir yapılandırma parametresidir. , VACUUMve CREATE INDEXgibi ALTER TABLEbakım işlemleri için ayrılan bellek miktarını yönetir. 'nin aksine work_mem, sorgu işlemleri için bellek ayırmayı etkiler, maintenance_work_mem veritabanı yapısını koruyan ve en iyi duruma getiren görevler için ayrılmıştır.
! [NOT] Aşırı agresif değerlerin ayarlanması
maintenance_work_memdüzenli aralıklarla sistemde bellek yetersiz hatasına neden olabilir. Bu parametrede değişiklik yapmadan önce sunucuda kullanılabilir bellek miktarını ve daha önce açıklanan görevler için bellek ayırabilecek eşzamanlı işlemlerin sayısını anlamak son derece önemlidir.
Önemli noktalar
- Vakum bellek üst sınırı: Ölü kümelerin temizlenmesini artırarak hızlandırmak istiyorsanız, ölü küme tanımlayıcılarını toplamak için
maintenance_work_memyerleşik bir sınırlama olduğunu unutmayın. Bu işlem için yalnızca 1 GB'a kadar bellek kullanabilir. -
Otomatik vakum için bellek ayrımı: Otomatik vakum işlemlerinin
autovacuum_work_membağımsız olarak kullandığı belleği denetlemek için ayarını kullanabilirsiniz. Bu ayar, öğesininmaintenance_work_membir alt kümesi olarak görev yapar. Diğer bakım görevleri ve veri tanımı işlemleri için bellek ayırmayı etkilemeden otomatik vakum işlevinin ne kadar bellek kullandığına karar vekleyebilirsiniz.
Azure'a özgü notlar
Sunucu parametresinin maintenance_work_mem varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, o örneğin sunucu parametresi için maintenance_work_mem varsayılan değer üzerinde herhangi bir etkiye sahip olmayacaktır.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini maintenance_work_mem aşağıdaki formüldeki değerlere göre de ayarlamanız gerekir.
değerini maintenance_work_mem hesaplamak için kullanılan formül: (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions (en fazla hazırlıklı işlemler)
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Eşzamanlı olarak hazırlanmış en fazla işlem sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0-262143 |
| Parametre türü | durağan |
| Documentation | max_prepared_transactions |
maksimum yığın derinliği
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Maksimum yığın derinliğini kilobayt olarak ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 2048 |
| Parametre türü | salt okunur |
| Documentation | max_stack_depth |
min_dinamik_paylaşımlı_bellek
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Başlangıçta ayrılmış dinamik paylaşılan bellek miktarı. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | MultiXact üye önbelleği için kullanılan özel buffer havuzunun boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 32 |
| İzin verilen değerler | 16-131072 |
| Parametre türü | durağan |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | MultiXact öteleme önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 16 |
| İzin verilen değerler | 16-131072 |
| Parametre türü | durağan |
| Documentation | multixact_offset_buffers |
notify_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | LISTEN/NOTIFY ileti önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 16 |
| İzin verilen değerler | 16-131072 |
| Parametre türü | durağan |
| Documentation | notify_buffers |
serileştirilebilir_yığınlar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Serileştirilebilir işlem önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 32 |
| İzin verilen değerler | 16-131072 |
| Parametre türü | durağan |
| Documentation | serializable_buffers |
shared_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sunucu tarafından kullanılan paylaşılan bellek arabelleklerinin sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 16-1073741823 |
| Parametre türü | durağan |
| Documentation | shared_buffers |
Description
Yapılandırma shared_buffers parametresi, verileri arabelleğe almak için PostgreSQL veritabanına ayrılan sistem belleği miktarını belirler. Tüm veritabanı işlemleri tarafından erişilebilen merkezi bir bellek havuzu görevi görür.
Veri gerektiğinde, veritabanı işlemi, önce paylaşılan arabelleği kontrol eder. Gerekli veriler varsa, hızlı bir şekilde alınır ve daha fazla zaman alan bir disk okumasını atlar. Paylaşılan arabellekler, veritabanı işlemleriyle disk arasında bir aracı görevi görür ve gerekli G/Ç işlemlerinin sayısını etkili bir şekilde azaltır.
Azure'a özgü notlar
Sunucu parametresinin shared_buffers varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, bu örneğin sunucu parametresi için shared_buffers varsayılan değer üzerinde herhangi bir etkiye sahip değildir.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini shared_buffers aşağıdaki formüllerdeki değerlere göre de ayarlamanız gerekir.
En fazla 2 GiB belleğe sahip sanal makineler için, shared_buffers değerini hesaplamak için kullanılan formül memoryGib * 16384.
2 GiB'den fazla sanal makine için değerini shared_buffers hesaplamak için kullanılan formül şeklindedir memoryGib * 32768.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
paylaşilan_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Ana paylaşılan bellek bölgesi için kullanılan paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | mmap |
| İzin verilen değerler | mmap |
| Parametre türü | salt okunur |
| Documentation | paylaşımlı bellek türü |
subtransaction_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Alt aktarım önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. Bu değeri, shared_buffers'ın bir kesri olarak belirlemek için 0 girin. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 0-131072 |
| Parametre türü | durağan |
| Documentation | subtransaction_buffers |
geçici ara bellekler
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Oturum başına kullanılan maksimum geçici arabellek sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 100-1073741823 |
| Parametre türü | dynamic |
| Documentation | temp_buffers |
işlem tamponları
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | İşlem durumu önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. Bu değeri, shared_buffers'ın bir kesri olarak belirlemek için 0 girin. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 0-131072 |
| Parametre türü | durağan |
| Documentation | işlem_arabellekleri |
vakum tampon kullanım sınırı
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | VACUUM, ANALYZE ve autovacuum için arabellek havuzu boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 0-16777216 |
| Parametre türü | dynamic |
| Documentation | vakum_tampon_kullanım_sınırı |
work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sorgu çalışma alanları için kullanılacak en yüksek belleği ayarlar. Bu kadar bellek, geçici disk dosyalarına geçmeden önce her iç sıralama işlemi ve karma tablosu tarafından kullanılabilir. |
| Veri türü | tamsayı |
| Varsayılan değer | 4096 |
| İzin verilen değerler | 4096-2097151 |
| Parametre türü | dynamic |
| Documentation | work_mem |
Description
work_mem PostgreSQL'deki parametresi, her veritabanı oturumunun özel bellek alanındaki belirli iç işlemler için ayrılan bellek miktarını denetler. Bu işlemlere örnek olarak sıralama ve karma verilebilir.
Paylaşılan bellek alanındaki paylaşılan arabelleklerin aksine, work_mem oturum başına veya sorgu başına ayrılan özel bellek alanında bulunur. Yeterli work_mem bir boyut ayarlayarak bu işlemlerin verimliliğini önemli ölçüde artırabilir ve diske geçici veri yazma gereksinimini azaltabilirsiniz.
Önemli noktalar
-
Özel bağlantı belleği:
work_memher veritabanı oturumunun kullandığı özel belleğin bir parçasıdır. Bu bellek,shared_bufferstarafından kullanılan paylaşılan bellek alanından ayrıdır. -
Sorguya özgü kullanım: Tüm oturumlar veya sorgular kullanmaz
work_mem. gibiSELECT 1basit sorguların gerektirmework_memolasılığı düşüktür. Ancak, sıralama veya karma oluşturma gibi işlemleri içeren karmaşık sorgularwork_membir veya birden çok öbeği tüketebilir. -
Paralel işlemler: Birden çok paralel arka uca yayılan sorgular için her arka uç bir veya birden çok öbek
work_memkullanabilir.
work_mem'in izlenmesi ve ayarlanması
Öncelikle sıralama veya karma işlemleriyle ilgili sorgu yürütme sürelerinin yavaş olması durumunda sisteminizin performansını sürekli izlemek ve gerektiği gibi ayarlamak work_mem önemlidir. Azure portalında bulunan araçları kullanarak performansı izlemenin yolları şunlardır:
-
Sorgu performansı içgörüleri: Geçici dosyalar oluşturan sorguları tanımlamak için Geçici dosyalara göre en çok kullanılan sorgular sekmesini denetleyin. Bu durum,
work_memöğesinin artırılması için olası bir gereksinim olduğunu gösterir. - Sorun giderme kılavuzları: Sorunlu sorguları tanımlamak için sorun giderme kılavuzlarındaki Yüksek geçici dosyalar sekmesini kullanın.
Ayrıntılı ayarlama
Parametresini work_mem yönetirken, genel bir değer ayarlamak yerine ayrıntılı ayarlama yaklaşımını benimsemek genellikle daha verimli olur. Bu yaklaşım, işlemlerin ve kullanıcıların belirli gereksinimlerine göre bellek ayırmanızı sağlar. Ayrıca yetersiz bellek sorunlarıyla karşılaşma riskini de en aza indirir. Bu konuda şu şekilde devam edebilirsiniz:
Kullanıcı düzeyi: Belirli bir kullanıcı öncelikle yoğun bellek kullanan toplama veya raporlama görevlerinde yer alıyorsa, söz konusu kullanıcının değerini özelleştirmeyi
work_memgöz önünde bulundurun.ALTER ROLEKullanıcının işlemlerinin performansını artırmak için komutunu kullanın.İşlev/yordam düzeyi: Belirli işlevler veya yordamlar önemli miktarda geçici dosya oluşturuyorsa, belirli işlev veya yordam düzeyinde değeri artırmak
work_memyararlı olabilir. Bu işlemlere özel olarak daha fazla bellek ayırmak içinALTER FUNCTIONveyaALTER PROCEDUREkomutunu kullanın.Veritabanı düzeyi: Yalnızca belirli veritabanları yüksek sayıda geçici dosya oluşturuyorsa veritabanı düzeyinde değişiklik
work_memyapın.Genel düzey: Sisteminizin analizi çoğu sorgunun küçük geçici dosyalar oluşturduğunu, ancak yalnızca birkaçının büyük dosyalar oluşturduğunu gösterirse, değeri genel olarak artırmak
work_memakıllıca olabilir. Bu eylem sorguların çoğunun bellekte işlenmesini kolaylaştırır, böylece disk tabanlı işlemlerden kaçınabilir ve verimliliği artırabilirsiniz. Ancak, artanwork_memdeğeri işleyebileceğinden emin olmak için her zaman dikkatli olun ve sunucunuzdaki bellek kullanımını izleyin.
Sıralama işlemleri için en düşük work_mem değerini belirleme
Özellikle sıralama işlemi sırasında geçici disk dosyaları oluşturan belirli bir sorgunun en düşük work_mem değerini bulmak için, sorgu yürütme sırasında oluşturulan geçici dosya boyutunu göz önünde bulundurarak başlayın. Örneğin, bir sorgu 20 MB geçici bir dosya oluşturuyorsa:
- psql veya tercih ettiğiniz PostgreSQL istemcisini kullanarak veritabanınıza bağlanın.
- Bellekte işlenirken ek üst bilgileri hesaba katmak için 20 MB'tan biraz daha yüksek bir başlangıç
work_memdeğeri ayarlayın. Şunun gibi bir komut kullanın:SET work_mem TO '25MB'. - Aynı oturumda sorunlu sorguda komutunu çalıştırın
EXPLAIN ANALYZE. -
"Sort Method: quicksort Memory: xkB"çıktıyı gözden geçirin. Eğer"external merge Disk: xkB"değerini gösteriyorsa,work_memdeğerini artımlı olarak yükseltin ve"quicksort Memory"görünene kadar yeniden test edin. Sorgunun artık bellekte çalıştığını gösteren"quicksort Memory"görünümü. - Bu yöntem aracılığıyla değeri belirledikten sonra, operasyonel gereksinimlerinize uyacak şekilde genel olarak veya daha ayrıntılı düzeylerde (daha önce açıklandığı gibi) uygulayabilirsiniz.
autovacuum_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her otomatik vakum çalışan işlemi tarafından kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | -1 |
| İzin verilen değerler | -1-2097151 |
| Parametre türü | dynamic |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | İşleme zaman damgası önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. Bu değeri, shared_buffers'ın bir kesri olarak belirlemek için 0 girin. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 0-131072 |
| Parametre türü | durağan |
| Documentation | commit_timestamp_buffers |
dinamik_paylaşımlı_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Kullanılan dinamik paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | posix |
| İzin verilen değerler | posix |
| Parametre türü | salt okunur |
| Documentation | dinamik_paylaşımlı_bellek_türü |
hash_mem_multiplier
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Karma tablolar için kullanılacak "work_mem" katı. |
| Veri türü | sayısal |
| Varsayılan değer | 2 |
| İzin verilen değerler | 1-1000 |
| Parametre türü | dynamic |
| Documentation | hash_mem_multiplier |
büyük sayfalar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Linux veya Windows'ta büyük sayfaların kullanımı. |
| Veri türü | enumeration |
| Varsayılan değer | try |
| İzin verilen değerler | on,off,try |
| Parametre türü | durağan |
| Documentation | huge_pages |
Description
Büyük sayfalar, belleğin daha büyük bloklarda yönetilmesini sağlayan bir özelliktir. Standart 4 KB sayfa yerine genellikle 2 MB'a kadar blokları yönetebilirsiniz.
Çok büyük sayfaların kullanılması, CPU'ları etkili bir şekilde boşaltan performans avantajları sunabilir:
- Bellek yönetimi görevleriyle ilişkili ek yükü, çeviri lookaside buffer (TLB) hatalarının daha az olması gibi durumlarla azaltır.
- Bellek yönetimi için gereken süreyi kısaltır.
Özellikle, PostgreSQL'de büyük sayfaları yalnızca paylaşılan bellek alanı için kullanabilirsiniz. Paylaşılan bellek alanının önemli bir bölümü paylaşılan arabellekler için ayrılır.
Başka bir avantajı, büyük sayfaların paylaşılan bellek alanının diske değişimini engellemesi ve bu da performansı daha da dengeler.
Recommendations
- Önemli bellek kaynaklarına sahip sunucular için büyük sayfaları devre dışı bırakmaktan kaçının. Çok büyük sayfaları devre dışı bırakmak performansı tehlikeye atabilir.
- Çok büyük sayfaları desteklemeyen daha küçük bir sunucuyla başlıyorsanız ancak bunu destekleyen bir sunucuya ölçeği artırmayı düşünüyorsanız, sorunsuz geçiş ve en iyi performans için ayarını konumunda
huge_pagestutunTRY.
Azure'a özgü notlar
Dört veya daha fazla sanal çekirdek içeren sunucular için, temel alınan işletim sisteminden büyük sayfalar otomatik olarak ayrılır. Bu özellik, dörtten az sanal çekirdeği olan sunucularda kullanılamaz. Büyük sayfa sayısı, shared_buffers de dahil olmak üzere paylaşılan bellek ayarlarında yapılan değişiklikler sonucunda otomatik olarak ayarlanır.
büyük_sayfa_boyutu
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | İstenmesi gereken büyük sayfa boyutu. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | huge_page_size (büyük sayfa boyutu) |
io_combine_limit
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Veri okuma ve yazma boyutu sınırı. |
| Veri türü | tamsayı |
| Varsayılan değer | 16 |
| İzin verilen değerler | 16 |
| Parametre türü | salt okunur |
| Documentation | io_combine_limit |
logical_decoding_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Mantıksal kod çözme için kullanılacak en yüksek belleği ayarlar. Bu kadar bellek, diske dökülmeden önce her iç yeniden sıralama arabelleği tarafından kullanılabilir. |
| Veri türü | tamsayı |
| Varsayılan değer | 65536 |
| İzin verilen değerler | 64-2147483647 |
| Parametre türü | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Bakım işlemleri için kullanılacak en yüksek belleği ayarlar. Bu, VACUUM ve CREATE INDEX gibi işlemleri içerir. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 1024-2097151 |
| Parametre türü | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem PostgreSQL'deki bir yapılandırma parametresidir. , VACUUMve CREATE INDEXgibi ALTER TABLEbakım işlemleri için ayrılan bellek miktarını yönetir. 'nin aksine work_mem, sorgu işlemleri için bellek ayırmayı etkiler, maintenance_work_mem veritabanı yapısını koruyan ve en iyi duruma getiren görevler için ayrılmıştır.
! [NOT] Aşırı agresif değerlerin ayarlanması
maintenance_work_memdüzenli aralıklarla sistemde bellek yetersiz hatasına neden olabilir. Bu parametrede değişiklik yapmadan önce sunucuda kullanılabilir bellek miktarını ve daha önce açıklanan görevler için bellek ayırabilecek eşzamanlı işlemlerin sayısını anlamak son derece önemlidir.
Önemli noktalar
- Vakum bellek üst sınırı: Ölü kümelerin temizlenmesini artırarak hızlandırmak istiyorsanız, ölü küme tanımlayıcılarını toplamak için
maintenance_work_memyerleşik bir sınırlama olduğunu unutmayın. Bu işlem için yalnızca 1 GB'a kadar bellek kullanabilir. -
Otomatik vakum için bellek ayrımı: Otomatik vakum işlemlerinin
autovacuum_work_membağımsız olarak kullandığı belleği denetlemek için ayarını kullanabilirsiniz. Bu ayar, öğesininmaintenance_work_membir alt kümesi olarak görev yapar. Diğer bakım görevleri ve veri tanımı işlemleri için bellek ayırmayı etkilemeden otomatik vakum işlevinin ne kadar bellek kullandığına karar vekleyebilirsiniz.
Azure'a özgü notlar
Sunucu parametresinin maintenance_work_mem varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, o örneğin sunucu parametresi için maintenance_work_mem varsayılan değer üzerinde herhangi bir etkiye sahip olmayacaktır.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini maintenance_work_mem aşağıdaki formüldeki değerlere göre de ayarlamanız gerekir.
değerini maintenance_work_mem hesaplamak için kullanılan formül: (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions (en fazla hazırlıklı işlemler)
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Eşzamanlı olarak hazırlanmış en fazla işlem sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0-262143 |
| Parametre türü | durağan |
| Documentation | max_prepared_transactions |
maksimum yığın derinliği
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Maksimum yığın derinliğini kilobayt olarak ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 2048 |
| Parametre türü | salt okunur |
| Documentation | max_stack_depth |
min_dinamik_paylaşımlı_bellek
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Başlangıçta ayrılmış dinamik paylaşılan bellek miktarı. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | MultiXact üye önbelleği için kullanılan özel buffer havuzunun boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 32 |
| İzin verilen değerler | 16-131072 |
| Parametre türü | durağan |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | MultiXact öteleme önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 16 |
| İzin verilen değerler | 16-131072 |
| Parametre türü | durağan |
| Documentation | multixact_offset_buffers |
notify_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | LISTEN/NOTIFY ileti önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 16 |
| İzin verilen değerler | 16-131072 |
| Parametre türü | durağan |
| Documentation | notify_buffers |
serileştirilebilir_yığınlar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Serileştirilebilir işlem önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 32 |
| İzin verilen değerler | 16-131072 |
| Parametre türü | durağan |
| Documentation | serializable_buffers |
shared_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sunucu tarafından kullanılan paylaşılan bellek arabelleklerinin sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 16-1073741823 |
| Parametre türü | durağan |
| Documentation | shared_buffers |
Description
Yapılandırma shared_buffers parametresi, verileri arabelleğe almak için PostgreSQL veritabanına ayrılan sistem belleği miktarını belirler. Tüm veritabanı işlemleri tarafından erişilebilen merkezi bir bellek havuzu görevi görür.
Veri gerektiğinde, veritabanı işlemi, önce paylaşılan arabelleği kontrol eder. Gerekli veriler varsa, hızlı bir şekilde alınır ve daha fazla zaman alan bir disk okumasını atlar. Paylaşılan arabellekler, veritabanı işlemleriyle disk arasında bir aracı görevi görür ve gerekli G/Ç işlemlerinin sayısını etkili bir şekilde azaltır.
Azure'a özgü notlar
Sunucu parametresinin shared_buffers varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, bu örneğin sunucu parametresi için shared_buffers varsayılan değer üzerinde herhangi bir etkiye sahip değildir.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini shared_buffers aşağıdaki formüllerdeki değerlere göre de ayarlamanız gerekir.
En fazla 2 GiB belleğe sahip sanal makineler için, shared_buffers değerini hesaplamak için kullanılan formül memoryGib * 16384.
2 GiB'den fazla sanal makine için değerini shared_buffers hesaplamak için kullanılan formül şeklindedir memoryGib * 32768.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
paylaşilan_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Ana paylaşılan bellek bölgesi için kullanılan paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | mmap |
| İzin verilen değerler | mmap |
| Parametre türü | salt okunur |
| Documentation | paylaşımlı bellek türü |
subtransaction_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Alt aktarım önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. Bu değeri, shared_buffers'ın bir kesri olarak belirlemek için 0 girin. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 0-131072 |
| Parametre türü | durağan |
| Documentation | subtransaction_buffers |
geçici ara bellekler
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Oturum başına kullanılan maksimum geçici arabellek sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 100-1073741823 |
| Parametre türü | dynamic |
| Documentation | temp_buffers |
işlem tamponları
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | İşlem durumu önbelleği için kullanılan ayrılmış arabellek havuzunun boyutunu ayarlar. Bu değeri, shared_buffers'ın bir kesri olarak belirlemek için 0 girin. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 0-131072 |
| Parametre türü | durağan |
| Documentation | işlem_arabellekleri |
vakum tampon kullanım sınırı
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | VACUUM, ANALYZE ve autovacuum için arabellek havuzu boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 0-16777216 |
| Parametre türü | dynamic |
| Documentation | vakum_tampon_kullanım_sınırı |
work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sorgu çalışma alanları için kullanılacak en yüksek belleği ayarlar. Bu kadar bellek, geçici disk dosyalarına geçmeden önce her iç sıralama işlemi ve karma tablosu tarafından kullanılabilir. |
| Veri türü | tamsayı |
| Varsayılan değer | 4096 |
| İzin verilen değerler | 4096-2097151 |
| Parametre türü | dynamic |
| Documentation | work_mem |
Description
work_mem PostgreSQL'deki parametresi, her veritabanı oturumunun özel bellek alanındaki belirli iç işlemler için ayrılan bellek miktarını denetler. Bu işlemlere örnek olarak sıralama ve karma verilebilir.
Paylaşılan bellek alanındaki paylaşılan arabelleklerin aksine, work_mem oturum başına veya sorgu başına ayrılan özel bellek alanında bulunur. Yeterli work_mem bir boyut ayarlayarak bu işlemlerin verimliliğini önemli ölçüde artırabilir ve diske geçici veri yazma gereksinimini azaltabilirsiniz.
Önemli noktalar
-
Özel bağlantı belleği:
work_memher veritabanı oturumunun kullandığı özel belleğin bir parçasıdır. Bu bellek,shared_bufferstarafından kullanılan paylaşılan bellek alanından ayrıdır. -
Sorguya özgü kullanım: Tüm oturumlar veya sorgular kullanmaz
work_mem. gibiSELECT 1basit sorguların gerektirmework_memolasılığı düşüktür. Ancak, sıralama veya karma oluşturma gibi işlemleri içeren karmaşık sorgularwork_membir veya birden çok öbeği tüketebilir. -
Paralel işlemler: Birden çok paralel arka uca yayılan sorgular için her arka uç bir veya birden çok öbek
work_memkullanabilir.
work_mem'in izlenmesi ve ayarlanması
Öncelikle sıralama veya karma işlemleriyle ilgili sorgu yürütme sürelerinin yavaş olması durumunda sisteminizin performansını sürekli izlemek ve gerektiği gibi ayarlamak work_mem önemlidir. Azure portalında bulunan araçları kullanarak performansı izlemenin yolları şunlardır:
-
Sorgu performansı içgörüleri: Geçici dosyalar oluşturan sorguları tanımlamak için Geçici dosyalara göre en çok kullanılan sorgular sekmesini denetleyin. Bu durum,
work_memöğesinin artırılması için olası bir gereksinim olduğunu gösterir. - Sorun giderme kılavuzları: Sorunlu sorguları tanımlamak için sorun giderme kılavuzlarındaki Yüksek geçici dosyalar sekmesini kullanın.
Ayrıntılı ayarlama
Parametresini work_mem yönetirken, genel bir değer ayarlamak yerine ayrıntılı ayarlama yaklaşımını benimsemek genellikle daha verimli olur. Bu yaklaşım, işlemlerin ve kullanıcıların belirli gereksinimlerine göre bellek ayırmanızı sağlar. Ayrıca yetersiz bellek sorunlarıyla karşılaşma riskini de en aza indirir. Bu konuda şu şekilde devam edebilirsiniz:
Kullanıcı düzeyi: Belirli bir kullanıcı öncelikle yoğun bellek kullanan toplama veya raporlama görevlerinde yer alıyorsa, söz konusu kullanıcının değerini özelleştirmeyi
work_memgöz önünde bulundurun.ALTER ROLEKullanıcının işlemlerinin performansını artırmak için komutunu kullanın.İşlev/yordam düzeyi: Belirli işlevler veya yordamlar önemli miktarda geçici dosya oluşturuyorsa, belirli işlev veya yordam düzeyinde değeri artırmak
work_memyararlı olabilir. Bu işlemlere özel olarak daha fazla bellek ayırmak içinALTER FUNCTIONveyaALTER PROCEDUREkomutunu kullanın.Veritabanı düzeyi: Yalnızca belirli veritabanları yüksek sayıda geçici dosya oluşturuyorsa veritabanı düzeyinde değişiklik
work_memyapın.Genel düzey: Sisteminizin analizi çoğu sorgunun küçük geçici dosyalar oluşturduğunu, ancak yalnızca birkaçının büyük dosyalar oluşturduğunu gösterirse, değeri genel olarak artırmak
work_memakıllıca olabilir. Bu eylem sorguların çoğunun bellekte işlenmesini kolaylaştırır, böylece disk tabanlı işlemlerden kaçınabilir ve verimliliği artırabilirsiniz. Ancak, artanwork_memdeğeri işleyebileceğinden emin olmak için her zaman dikkatli olun ve sunucunuzdaki bellek kullanımını izleyin.
Sıralama işlemleri için en düşük work_mem değerini belirleme
Özellikle sıralama işlemi sırasında geçici disk dosyaları oluşturan belirli bir sorgunun en düşük work_mem değerini bulmak için, sorgu yürütme sırasında oluşturulan geçici dosya boyutunu göz önünde bulundurarak başlayın. Örneğin, bir sorgu 20 MB geçici bir dosya oluşturuyorsa:
- psql veya tercih ettiğiniz PostgreSQL istemcisini kullanarak veritabanınıza bağlanın.
- Bellekte işlenirken ek üst bilgileri hesaba katmak için 20 MB'tan biraz daha yüksek bir başlangıç
work_memdeğeri ayarlayın. Şunun gibi bir komut kullanın:SET work_mem TO '25MB'. - Aynı oturumda sorunlu sorguda komutunu çalıştırın
EXPLAIN ANALYZE. -
"Sort Method: quicksort Memory: xkB"çıktıyı gözden geçirin. Eğer"external merge Disk: xkB"değerini gösteriyorsa,work_memdeğerini artımlı olarak yükseltin ve"quicksort Memory"görünene kadar yeniden test edin. Sorgunun artık bellekte çalıştığını gösteren"quicksort Memory"görünümü. - Bu yöntem aracılığıyla değeri belirledikten sonra, operasyonel gereksinimlerinize uyacak şekilde genel olarak veya daha ayrıntılı düzeylerde (daha önce açıklandığı gibi) uygulayabilirsiniz.
autovacuum_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her otomatik vakum çalışan işlemi tarafından kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | -1 |
| İzin verilen değerler | -1-2097151 |
| Parametre türü | dynamic |
| Documentation | autovacuum_work_mem |
dinamik_paylaşımlı_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Kullanılan dinamik paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | posix |
| İzin verilen değerler | posix |
| Parametre türü | salt okunur |
| Documentation | dinamik_paylaşımlı_bellek_türü |
hash_mem_multiplier
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Karma tablolar için kullanılacak work_mem katı. |
| Veri türü | sayısal |
| Varsayılan değer | 2 |
| İzin verilen değerler | 1-1000 |
| Parametre türü | dynamic |
| Documentation | hash_mem_multiplier |
büyük sayfalar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Büyük bellek sayfalarının kullanımını etkinleştirir/devre dışı bırakır. Bu ayar, 4'ten az sanal çekirdeği olan sunucular için geçerli değildir. |
| Veri türü | enumeration |
| Varsayılan değer | try |
| İzin verilen değerler | on,off,try |
| Parametre türü | durağan |
| Documentation | huge_pages |
Description
Büyük sayfalar, belleğin daha büyük bloklarda yönetilmesini sağlayan bir özelliktir. Standart 4 KB sayfa yerine genellikle 2 MB'a kadar blokları yönetebilirsiniz.
Çok büyük sayfaların kullanılması, CPU'ları etkili bir şekilde boşaltan performans avantajları sunabilir:
- Bellek yönetimi görevleriyle ilişkili ek yükü, çeviri lookaside buffer (TLB) hatalarının daha az olması gibi durumlarla azaltır.
- Bellek yönetimi için gereken süreyi kısaltır.
Özellikle, PostgreSQL'de büyük sayfaları yalnızca paylaşılan bellek alanı için kullanabilirsiniz. Paylaşılan bellek alanının önemli bir bölümü paylaşılan arabellekler için ayrılır.
Başka bir avantajı, büyük sayfaların paylaşılan bellek alanının diske değişimini engellemesi ve bu da performansı daha da dengeler.
Recommendations
- Önemli bellek kaynaklarına sahip sunucular için büyük sayfaları devre dışı bırakmaktan kaçının. Çok büyük sayfaları devre dışı bırakmak performansı tehlikeye atabilir.
- Çok büyük sayfaları desteklemeyen daha küçük bir sunucuyla başlıyorsanız ancak bunu destekleyen bir sunucuya ölçeği artırmayı düşünüyorsanız, sorunsuz geçiş ve en iyi performans için ayarını konumunda
huge_pagestutunTRY.
Azure'a özgü notlar
Dört veya daha fazla sanal çekirdek içeren sunucular için, temel alınan işletim sisteminden büyük sayfalar otomatik olarak ayrılır. Bu özellik, dörtten az sanal çekirdeği olan sunucularda kullanılamaz. Büyük sayfa sayısı, shared_buffers de dahil olmak üzere paylaşılan bellek ayarlarında yapılan değişiklikler sonucunda otomatik olarak ayarlanır.
büyük_sayfa_boyutu
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | İstenmesi gereken büyük sayfa boyutu. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | huge_page_size (büyük sayfa boyutu) |
logical_decoding_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Mantıksal kod çözme için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 65536 |
| İzin verilen değerler | 64-2147483647 |
| Parametre türü | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | VACUUM, Create Index gibi bakım işlemleri için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 1024-2097151 |
| Parametre türü | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem PostgreSQL'deki bir yapılandırma parametresidir. , VACUUMve CREATE INDEXgibi ALTER TABLEbakım işlemleri için ayrılan bellek miktarını yönetir. 'nin aksine work_mem, sorgu işlemleri için bellek ayırmayı etkiler, maintenance_work_mem veritabanı yapısını koruyan ve en iyi duruma getiren görevler için ayrılmıştır.
! [NOT] Aşırı agresif değerlerin ayarlanması
maintenance_work_memdüzenli aralıklarla sistemde bellek yetersiz hatasına neden olabilir. Bu parametrede değişiklik yapmadan önce sunucuda kullanılabilir bellek miktarını ve daha önce açıklanan görevler için bellek ayırabilecek eşzamanlı işlemlerin sayısını anlamak son derece önemlidir.
Önemli noktalar
- Vakum bellek üst sınırı: Ölü kümelerin temizlenmesini artırarak hızlandırmak istiyorsanız, ölü küme tanımlayıcılarını toplamak için
maintenance_work_memyerleşik bir sınırlama olduğunu unutmayın. Bu işlem için yalnızca 1 GB'a kadar bellek kullanabilir. -
Otomatik vakum için bellek ayrımı: Otomatik vakum işlemlerinin
autovacuum_work_membağımsız olarak kullandığı belleği denetlemek için ayarını kullanabilirsiniz. Bu ayar, öğesininmaintenance_work_membir alt kümesi olarak görev yapar. Diğer bakım görevleri ve veri tanımı işlemleri için bellek ayırmayı etkilemeden otomatik vakum işlevinin ne kadar bellek kullandığına karar vekleyebilirsiniz.
Azure'a özgü notlar
Sunucu parametresinin maintenance_work_mem varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, o örneğin sunucu parametresi için maintenance_work_mem varsayılan değer üzerinde herhangi bir etkiye sahip olmayacaktır.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini maintenance_work_mem aşağıdaki formüldeki değerlere göre de ayarlamanız gerekir.
değerini maintenance_work_mem hesaplamak için kullanılan formül: (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions (en fazla hazırlıklı işlemler)
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Eşzamanlı olarak hazırlanmış en fazla işlem sayısını ayarlar. Çoğaltma sunucusunu çalıştırırken, bu parametreyi birincil sunucudakiyle aynı veya daha yüksek bir değere ayarlamanız gerekir. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0-262143 |
| Parametre türü | durağan |
| Documentation | max_prepared_transactions |
maksimum yığın derinliği
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Maksimum yığın derinliğini kilobayt olarak ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 2048 |
| Parametre türü | salt okunur |
| Documentation | max_stack_depth |
min_dinamik_paylaşımlı_bellek
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Başlangıçta ayrılmış dinamik paylaşılan bellek miktarı. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sunucu tarafından kullanılan paylaşılan bellek arabelleklerinin sayısını ayarlar. Birim 8 kb'dir. İzin verilen değerler kullanılabilir belleğin %10 - %75'i aralığındadır. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 16-1073741823 |
| Parametre türü | durağan |
| Documentation | shared_buffers |
Description
Yapılandırma shared_buffers parametresi, verileri arabelleğe almak için PostgreSQL veritabanına ayrılan sistem belleği miktarını belirler. Tüm veritabanı işlemleri tarafından erişilebilen merkezi bir bellek havuzu görevi görür.
Veri gerektiğinde, veritabanı işlemi, önce paylaşılan arabelleği kontrol eder. Gerekli veriler varsa, hızlı bir şekilde alınır ve daha fazla zaman alan bir disk okumasını atlar. Paylaşılan arabellekler, veritabanı işlemleriyle disk arasında bir aracı görevi görür ve gerekli G/Ç işlemlerinin sayısını etkili bir şekilde azaltır.
Azure'a özgü notlar
Sunucu parametresinin shared_buffers varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, bu örneğin sunucu parametresi için shared_buffers varsayılan değer üzerinde herhangi bir etkiye sahip değildir.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini shared_buffers aşağıdaki formüllerdeki değerlere göre de ayarlamanız gerekir.
En fazla 2 GiB belleğe sahip sanal makineler için, shared_buffers değerini hesaplamak için kullanılan formül memoryGib * 16384.
2 GiB'den fazla sanal makine için değerini shared_buffers hesaplamak için kullanılan formül şeklindedir memoryGib * 32768.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
paylaşilan_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Ana paylaşılan bellek bölgesi için kullanılan paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | mmap |
| İzin verilen değerler | mmap |
| Parametre türü | salt okunur |
| Documentation | paylaşımlı bellek türü |
geçici ara bellekler
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her veritabanı oturumu tarafından kullanılan en fazla geçici arabellek sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 100-1073741823 |
| Parametre türü | dynamic |
| Documentation | temp_buffers |
vakum tampon kullanım sınırı
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | VACUUM, ANALYZE ve autovacuum için arabellek havuzu boyutunu ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 256 |
| İzin verilen değerler | 0-16777216 |
| Parametre türü | dynamic |
| Documentation | vakum_tampon_kullanım_sınırı |
work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Geçici disk dosyalarına yazmadan önce iç sıralama işlemleri ve karma tabloları tarafından kullanılacak bellek miktarını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 4096 |
| İzin verilen değerler | 4096-2097151 |
| Parametre türü | dynamic |
| Documentation | work_mem |
Description
work_mem PostgreSQL'deki parametresi, her veritabanı oturumunun özel bellek alanındaki belirli iç işlemler için ayrılan bellek miktarını denetler. Bu işlemlere örnek olarak sıralama ve karma verilebilir.
Paylaşılan bellek alanındaki paylaşılan arabelleklerin aksine, work_mem oturum başına veya sorgu başına ayrılan özel bellek alanında bulunur. Yeterli work_mem bir boyut ayarlayarak bu işlemlerin verimliliğini önemli ölçüde artırabilir ve diske geçici veri yazma gereksinimini azaltabilirsiniz.
Önemli noktalar
-
Özel bağlantı belleği:
work_memher veritabanı oturumunun kullandığı özel belleğin bir parçasıdır. Bu bellek,shared_bufferstarafından kullanılan paylaşılan bellek alanından ayrıdır. -
Sorguya özgü kullanım: Tüm oturumlar veya sorgular kullanmaz
work_mem. gibiSELECT 1basit sorguların gerektirmework_memolasılığı düşüktür. Ancak, sıralama veya karma oluşturma gibi işlemleri içeren karmaşık sorgularwork_membir veya birden çok öbeği tüketebilir. -
Paralel işlemler: Birden çok paralel arka uca yayılan sorgular için her arka uç bir veya birden çok öbek
work_memkullanabilir.
work_mem'in izlenmesi ve ayarlanması
Öncelikle sıralama veya karma işlemleriyle ilgili sorgu yürütme sürelerinin yavaş olması durumunda sisteminizin performansını sürekli izlemek ve gerektiği gibi ayarlamak work_mem önemlidir. Azure portalında bulunan araçları kullanarak performansı izlemenin yolları şunlardır:
-
Sorgu performansı içgörüleri: Geçici dosyalar oluşturan sorguları tanımlamak için Geçici dosyalara göre en çok kullanılan sorgular sekmesini denetleyin. Bu durum,
work_memöğesinin artırılması için olası bir gereksinim olduğunu gösterir. - Sorun giderme kılavuzları: Sorunlu sorguları tanımlamak için sorun giderme kılavuzlarındaki Yüksek geçici dosyalar sekmesini kullanın.
Ayrıntılı ayarlama
Parametresini work_mem yönetirken, genel bir değer ayarlamak yerine ayrıntılı ayarlama yaklaşımını benimsemek genellikle daha verimli olur. Bu yaklaşım, işlemlerin ve kullanıcıların belirli gereksinimlerine göre bellek ayırmanızı sağlar. Ayrıca yetersiz bellek sorunlarıyla karşılaşma riskini de en aza indirir. Bu konuda şu şekilde devam edebilirsiniz:
Kullanıcı düzeyi: Belirli bir kullanıcı öncelikle yoğun bellek kullanan toplama veya raporlama görevlerinde yer alıyorsa, söz konusu kullanıcının değerini özelleştirmeyi
work_memgöz önünde bulundurun.ALTER ROLEKullanıcının işlemlerinin performansını artırmak için komutunu kullanın.İşlev/yordam düzeyi: Belirli işlevler veya yordamlar önemli miktarda geçici dosya oluşturuyorsa, belirli işlev veya yordam düzeyinde değeri artırmak
work_memyararlı olabilir. Bu işlemlere özel olarak daha fazla bellek ayırmak içinALTER FUNCTIONveyaALTER PROCEDUREkomutunu kullanın.Veritabanı düzeyi: Yalnızca belirli veritabanları yüksek sayıda geçici dosya oluşturuyorsa veritabanı düzeyinde değişiklik
work_memyapın.Genel düzey: Sisteminizin analizi çoğu sorgunun küçük geçici dosyalar oluşturduğunu, ancak yalnızca birkaçının büyük dosyalar oluşturduğunu gösterirse, değeri genel olarak artırmak
work_memakıllıca olabilir. Bu eylem sorguların çoğunun bellekte işlenmesini kolaylaştırır, böylece disk tabanlı işlemlerden kaçınabilir ve verimliliği artırabilirsiniz. Ancak, artanwork_memdeğeri işleyebileceğinden emin olmak için her zaman dikkatli olun ve sunucunuzdaki bellek kullanımını izleyin.
Sıralama işlemleri için en düşük work_mem değerini belirleme
Özellikle sıralama işlemi sırasında geçici disk dosyaları oluşturan belirli bir sorgunun en düşük work_mem değerini bulmak için, sorgu yürütme sırasında oluşturulan geçici dosya boyutunu göz önünde bulundurarak başlayın. Örneğin, bir sorgu 20 MB geçici bir dosya oluşturuyorsa:
- psql veya tercih ettiğiniz PostgreSQL istemcisini kullanarak veritabanınıza bağlanın.
- Bellekte işlenirken ek üst bilgileri hesaba katmak için 20 MB'tan biraz daha yüksek bir başlangıç
work_memdeğeri ayarlayın. Şunun gibi bir komut kullanın:SET work_mem TO '25MB'. - Aynı oturumda sorunlu sorguda komutunu çalıştırın
EXPLAIN ANALYZE. -
"Sort Method: quicksort Memory: xkB"çıktıyı gözden geçirin. Eğer"external merge Disk: xkB"değerini gösteriyorsa,work_memdeğerini artımlı olarak yükseltin ve"quicksort Memory"görünene kadar yeniden test edin. Sorgunun artık bellekte çalıştığını gösteren"quicksort Memory"görünümü. - Bu yöntem aracılığıyla değeri belirledikten sonra, operasyonel gereksinimlerinize uyacak şekilde genel olarak veya daha ayrıntılı düzeylerde (daha önce açıklandığı gibi) uygulayabilirsiniz.
autovacuum_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her otomatik vakum çalışan işlemi tarafından kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | -1 |
| İzin verilen değerler | -1-2097151 |
| Parametre türü | dynamic |
| Documentation | autovacuum_work_mem |
dinamik_paylaşımlı_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Kullanılan dinamik paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | posix |
| İzin verilen değerler | posix |
| Parametre türü | salt okunur |
| Documentation | dinamik_paylaşımlı_bellek_türü |
hash_mem_multiplier
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Karma tablolar için kullanılacak work_mem katı. |
| Veri türü | sayısal |
| Varsayılan değer | 2 |
| İzin verilen değerler | 1-1000 |
| Parametre türü | dynamic |
| Documentation | hash_mem_multiplier |
büyük sayfalar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Büyük bellek sayfalarının kullanımını etkinleştirir/devre dışı bırakır. Bu ayar, 4'ten az sanal çekirdeği olan sunucular için geçerli değildir. |
| Veri türü | enumeration |
| Varsayılan değer | try |
| İzin verilen değerler | on,off,try |
| Parametre türü | durağan |
| Documentation | huge_pages |
Description
Büyük sayfalar, belleğin daha büyük bloklarda yönetilmesini sağlayan bir özelliktir. Standart 4 KB sayfa yerine genellikle 2 MB'a kadar blokları yönetebilirsiniz.
Çok büyük sayfaların kullanılması, CPU'ları etkili bir şekilde boşaltan performans avantajları sunabilir:
- Bellek yönetimi görevleriyle ilişkili ek yükü, çeviri lookaside buffer (TLB) hatalarının daha az olması gibi durumlarla azaltır.
- Bellek yönetimi için gereken süreyi kısaltır.
Özellikle, PostgreSQL'de büyük sayfaları yalnızca paylaşılan bellek alanı için kullanabilirsiniz. Paylaşılan bellek alanının önemli bir bölümü paylaşılan arabellekler için ayrılır.
Başka bir avantajı, büyük sayfaların paylaşılan bellek alanının diske değişimini engellemesi ve bu da performansı daha da dengeler.
Recommendations
- Önemli bellek kaynaklarına sahip sunucular için büyük sayfaları devre dışı bırakmaktan kaçının. Çok büyük sayfaları devre dışı bırakmak performansı tehlikeye atabilir.
- Çok büyük sayfaları desteklemeyen daha küçük bir sunucuyla başlıyorsanız ancak bunu destekleyen bir sunucuya ölçeği artırmayı düşünüyorsanız, sorunsuz geçiş ve en iyi performans için ayarını konumunda
huge_pagestutunTRY.
Azure'a özgü notlar
Dört veya daha fazla sanal çekirdek içeren sunucular için, temel alınan işletim sisteminden büyük sayfalar otomatik olarak ayrılır. Bu özellik, dörtten az sanal çekirdeği olan sunucularda kullanılamaz. Büyük sayfa sayısı, shared_buffers de dahil olmak üzere paylaşılan bellek ayarlarında yapılan değişiklikler sonucunda otomatik olarak ayarlanır.
büyük_sayfa_boyutu
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | İstenmesi gereken büyük sayfa boyutu. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | huge_page_size (büyük sayfa boyutu) |
logical_decoding_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Mantıksal kod çözme için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 65536 |
| İzin verilen değerler | 64-2147483647 |
| Parametre türü | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | VACUUM, Create Index gibi bakım işlemleri için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 1024-2097151 |
| Parametre türü | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem PostgreSQL'deki bir yapılandırma parametresidir. , VACUUMve CREATE INDEXgibi ALTER TABLEbakım işlemleri için ayrılan bellek miktarını yönetir. 'nin aksine work_mem, sorgu işlemleri için bellek ayırmayı etkiler, maintenance_work_mem veritabanı yapısını koruyan ve en iyi duruma getiren görevler için ayrılmıştır.
! [NOT] Aşırı agresif değerlerin ayarlanması
maintenance_work_memdüzenli aralıklarla sistemde bellek yetersiz hatasına neden olabilir. Bu parametrede değişiklik yapmadan önce sunucuda kullanılabilir bellek miktarını ve daha önce açıklanan görevler için bellek ayırabilecek eşzamanlı işlemlerin sayısını anlamak son derece önemlidir.
Önemli noktalar
- Vakum bellek üst sınırı: Ölü kümelerin temizlenmesini artırarak hızlandırmak istiyorsanız, ölü küme tanımlayıcılarını toplamak için
maintenance_work_memyerleşik bir sınırlama olduğunu unutmayın. Bu işlem için yalnızca 1 GB'a kadar bellek kullanabilir. -
Otomatik vakum için bellek ayrımı: Otomatik vakum işlemlerinin
autovacuum_work_membağımsız olarak kullandığı belleği denetlemek için ayarını kullanabilirsiniz. Bu ayar, öğesininmaintenance_work_membir alt kümesi olarak görev yapar. Diğer bakım görevleri ve veri tanımı işlemleri için bellek ayırmayı etkilemeden otomatik vakum işlevinin ne kadar bellek kullandığına karar vekleyebilirsiniz.
Azure'a özgü notlar
Sunucu parametresinin maintenance_work_mem varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, o örneğin sunucu parametresi için maintenance_work_mem varsayılan değer üzerinde herhangi bir etkiye sahip olmayacaktır.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini maintenance_work_mem aşağıdaki formüldeki değerlere göre de ayarlamanız gerekir.
değerini maintenance_work_mem hesaplamak için kullanılan formül: (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions (en fazla hazırlıklı işlemler)
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Eşzamanlı olarak hazırlanmış en fazla işlem sayısını ayarlar. Çoğaltma sunucusunu çalıştırırken, bu parametreyi birincil sunucudakiyle aynı veya daha yüksek bir değere ayarlamanız gerekir. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0-262143 |
| Parametre türü | durağan |
| Documentation | max_prepared_transactions |
maksimum yığın derinliği
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Maksimum yığın derinliğini kilobayt olarak ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 2048 |
| Parametre türü | salt okunur |
| Documentation | max_stack_depth |
min_dinamik_paylaşımlı_bellek
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Başlangıçta ayrılmış dinamik paylaşılan bellek miktarı. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sunucu tarafından kullanılan paylaşılan bellek arabelleklerinin sayısını ayarlar. Birim 8 kb'dir. İzin verilen değerler kullanılabilir belleğin %10 - %75'i aralığındadır. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 16-1073741823 |
| Parametre türü | durağan |
| Documentation | shared_buffers |
Description
Yapılandırma shared_buffers parametresi, verileri arabelleğe almak için PostgreSQL veritabanına ayrılan sistem belleği miktarını belirler. Tüm veritabanı işlemleri tarafından erişilebilen merkezi bir bellek havuzu görevi görür.
Veri gerektiğinde, veritabanı işlemi, önce paylaşılan arabelleği kontrol eder. Gerekli veriler varsa, hızlı bir şekilde alınır ve daha fazla zaman alan bir disk okumasını atlar. Paylaşılan arabellekler, veritabanı işlemleriyle disk arasında bir aracı görevi görür ve gerekli G/Ç işlemlerinin sayısını etkili bir şekilde azaltır.
Azure'a özgü notlar
Sunucu parametresinin shared_buffers varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, bu örneğin sunucu parametresi için shared_buffers varsayılan değer üzerinde herhangi bir etkiye sahip değildir.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini shared_buffers aşağıdaki formüllerdeki değerlere göre de ayarlamanız gerekir.
En fazla 2 GiB belleğe sahip sanal makineler için, shared_buffers değerini hesaplamak için kullanılan formül memoryGib * 16384.
2 GiB'den fazla sanal makine için değerini shared_buffers hesaplamak için kullanılan formül şeklindedir memoryGib * 32768.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
paylaşilan_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Ana paylaşılan bellek bölgesi için kullanılan paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | mmap |
| İzin verilen değerler | mmap |
| Parametre türü | salt okunur |
| Documentation | paylaşımlı bellek türü |
geçici ara bellekler
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her veritabanı oturumu tarafından kullanılan en fazla geçici arabellek sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 100-1073741823 |
| Parametre türü | dynamic |
| Documentation | temp_buffers |
work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Geçici disk dosyalarına yazmadan önce iç sıralama işlemleri ve karma tabloları tarafından kullanılacak bellek miktarını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 4096 |
| İzin verilen değerler | 4096-2097151 |
| Parametre türü | dynamic |
| Documentation | work_mem |
Description
work_mem PostgreSQL'deki parametresi, her veritabanı oturumunun özel bellek alanındaki belirli iç işlemler için ayrılan bellek miktarını denetler. Bu işlemlere örnek olarak sıralama ve karma verilebilir.
Paylaşılan bellek alanındaki paylaşılan arabelleklerin aksine, work_mem oturum başına veya sorgu başına ayrılan özel bellek alanında bulunur. Yeterli work_mem bir boyut ayarlayarak bu işlemlerin verimliliğini önemli ölçüde artırabilir ve diske geçici veri yazma gereksinimini azaltabilirsiniz.
Önemli noktalar
-
Özel bağlantı belleği:
work_memher veritabanı oturumunun kullandığı özel belleğin bir parçasıdır. Bu bellek,shared_bufferstarafından kullanılan paylaşılan bellek alanından ayrıdır. -
Sorguya özgü kullanım: Tüm oturumlar veya sorgular kullanmaz
work_mem. gibiSELECT 1basit sorguların gerektirmework_memolasılığı düşüktür. Ancak, sıralama veya karma oluşturma gibi işlemleri içeren karmaşık sorgularwork_membir veya birden çok öbeği tüketebilir. -
Paralel işlemler: Birden çok paralel arka uca yayılan sorgular için her arka uç bir veya birden çok öbek
work_memkullanabilir.
work_mem'in izlenmesi ve ayarlanması
Öncelikle sıralama veya karma işlemleriyle ilgili sorgu yürütme sürelerinin yavaş olması durumunda sisteminizin performansını sürekli izlemek ve gerektiği gibi ayarlamak work_mem önemlidir. Azure portalında bulunan araçları kullanarak performansı izlemenin yolları şunlardır:
-
Sorgu performansı içgörüleri: Geçici dosyalar oluşturan sorguları tanımlamak için Geçici dosyalara göre en çok kullanılan sorgular sekmesini denetleyin. Bu durum,
work_memöğesinin artırılması için olası bir gereksinim olduğunu gösterir. - Sorun giderme kılavuzları: Sorunlu sorguları tanımlamak için sorun giderme kılavuzlarındaki Yüksek geçici dosyalar sekmesini kullanın.
Ayrıntılı ayarlama
Parametresini work_mem yönetirken, genel bir değer ayarlamak yerine ayrıntılı ayarlama yaklaşımını benimsemek genellikle daha verimli olur. Bu yaklaşım, işlemlerin ve kullanıcıların belirli gereksinimlerine göre bellek ayırmanızı sağlar. Ayrıca yetersiz bellek sorunlarıyla karşılaşma riskini de en aza indirir. Bu konuda şu şekilde devam edebilirsiniz:
Kullanıcı düzeyi: Belirli bir kullanıcı öncelikle yoğun bellek kullanan toplama veya raporlama görevlerinde yer alıyorsa, söz konusu kullanıcının değerini özelleştirmeyi
work_memgöz önünde bulundurun.ALTER ROLEKullanıcının işlemlerinin performansını artırmak için komutunu kullanın.İşlev/yordam düzeyi: Belirli işlevler veya yordamlar önemli miktarda geçici dosya oluşturuyorsa, belirli işlev veya yordam düzeyinde değeri artırmak
work_memyararlı olabilir. Bu işlemlere özel olarak daha fazla bellek ayırmak içinALTER FUNCTIONveyaALTER PROCEDUREkomutunu kullanın.Veritabanı düzeyi: Yalnızca belirli veritabanları yüksek sayıda geçici dosya oluşturuyorsa veritabanı düzeyinde değişiklik
work_memyapın.Genel düzey: Sisteminizin analizi çoğu sorgunun küçük geçici dosyalar oluşturduğunu, ancak yalnızca birkaçının büyük dosyalar oluşturduğunu gösterirse, değeri genel olarak artırmak
work_memakıllıca olabilir. Bu eylem sorguların çoğunun bellekte işlenmesini kolaylaştırır, böylece disk tabanlı işlemlerden kaçınabilir ve verimliliği artırabilirsiniz. Ancak, artanwork_memdeğeri işleyebileceğinden emin olmak için her zaman dikkatli olun ve sunucunuzdaki bellek kullanımını izleyin.
Sıralama işlemleri için en düşük work_mem değerini belirleme
Özellikle sıralama işlemi sırasında geçici disk dosyaları oluşturan belirli bir sorgunun en düşük work_mem değerini bulmak için, sorgu yürütme sırasında oluşturulan geçici dosya boyutunu göz önünde bulundurarak başlayın. Örneğin, bir sorgu 20 MB geçici bir dosya oluşturuyorsa:
- psql veya tercih ettiğiniz PostgreSQL istemcisini kullanarak veritabanınıza bağlanın.
- Bellekte işlenirken ek üst bilgileri hesaba katmak için 20 MB'tan biraz daha yüksek bir başlangıç
work_memdeğeri ayarlayın. Şunun gibi bir komut kullanın:SET work_mem TO '25MB'. - Aynı oturumda sorunlu sorguda komutunu çalıştırın
EXPLAIN ANALYZE. -
"Sort Method: quicksort Memory: xkB"çıktıyı gözden geçirin. Eğer"external merge Disk: xkB"değerini gösteriyorsa,work_memdeğerini artımlı olarak yükseltin ve"quicksort Memory"görünene kadar yeniden test edin. Sorgunun artık bellekte çalıştığını gösteren"quicksort Memory"görünümü. - Bu yöntem aracılığıyla değeri belirledikten sonra, operasyonel gereksinimlerinize uyacak şekilde genel olarak veya daha ayrıntılı düzeylerde (daha önce açıklandığı gibi) uygulayabilirsiniz.
autovacuum_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her otomatik vakum çalışan işlemi tarafından kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | -1 |
| İzin verilen değerler | -1-2097151 |
| Parametre türü | dynamic |
| Documentation | autovacuum_work_mem |
dinamik_paylaşımlı_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Kullanılan dinamik paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | posix |
| İzin verilen değerler | posix |
| Parametre türü | salt okunur |
| Documentation | dinamik_paylaşımlı_bellek_türü |
hash_mem_multiplier
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Karma tablolar için kullanılacak work_mem katı. |
| Veri türü | sayısal |
| Varsayılan değer | 1 |
| İzin verilen değerler | 1-1000 |
| Parametre türü | dynamic |
| Documentation | hash_mem_multiplier |
büyük sayfalar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Büyük bellek sayfalarının kullanımını etkinleştirir/devre dışı bırakır. Bu ayar, 4'ten az sanal çekirdeği olan sunucular için geçerli değildir. |
| Veri türü | enumeration |
| Varsayılan değer | try |
| İzin verilen değerler | on,off,try |
| Parametre türü | durağan |
| Documentation | huge_pages |
Description
Büyük sayfalar, belleğin daha büyük bloklarda yönetilmesini sağlayan bir özelliktir. Standart 4 KB sayfa yerine genellikle 2 MB'a kadar blokları yönetebilirsiniz.
Çok büyük sayfaların kullanılması, CPU'ları etkili bir şekilde boşaltan performans avantajları sunabilir:
- Bellek yönetimi görevleriyle ilişkili ek yükü, çeviri lookaside buffer (TLB) hatalarının daha az olması gibi durumlarla azaltır.
- Bellek yönetimi için gereken süreyi kısaltır.
Özellikle, PostgreSQL'de büyük sayfaları yalnızca paylaşılan bellek alanı için kullanabilirsiniz. Paylaşılan bellek alanının önemli bir bölümü paylaşılan arabellekler için ayrılır.
Başka bir avantajı, büyük sayfaların paylaşılan bellek alanının diske değişimini engellemesi ve bu da performansı daha da dengeler.
Recommendations
- Önemli bellek kaynaklarına sahip sunucular için büyük sayfaları devre dışı bırakmaktan kaçının. Çok büyük sayfaları devre dışı bırakmak performansı tehlikeye atabilir.
- Çok büyük sayfaları desteklemeyen daha küçük bir sunucuyla başlıyorsanız ancak bunu destekleyen bir sunucuya ölçeği artırmayı düşünüyorsanız, sorunsuz geçiş ve en iyi performans için ayarını konumunda
huge_pagestutunTRY.
Azure'a özgü notlar
Dört veya daha fazla sanal çekirdek içeren sunucular için, temel alınan işletim sisteminden büyük sayfalar otomatik olarak ayrılır. Bu özellik, dörtten az sanal çekirdeği olan sunucularda kullanılamaz. Büyük sayfa sayısı, shared_buffers de dahil olmak üzere paylaşılan bellek ayarlarında yapılan değişiklikler sonucunda otomatik olarak ayarlanır.
büyük_sayfa_boyutu
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | İstenmesi gereken büyük sayfa boyutu. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | huge_page_size (büyük sayfa boyutu) |
logical_decoding_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Mantıksal kod çözme için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 65536 |
| İzin verilen değerler | 64-2147483647 |
| Parametre türü | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | VACUUM, Create Index gibi bakım işlemleri için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 1024-2097151 |
| Parametre türü | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem PostgreSQL'deki bir yapılandırma parametresidir. , VACUUMve CREATE INDEXgibi ALTER TABLEbakım işlemleri için ayrılan bellek miktarını yönetir. 'nin aksine work_mem, sorgu işlemleri için bellek ayırmayı etkiler, maintenance_work_mem veritabanı yapısını koruyan ve en iyi duruma getiren görevler için ayrılmıştır.
! [NOT] Aşırı agresif değerlerin ayarlanması
maintenance_work_memdüzenli aralıklarla sistemde bellek yetersiz hatasına neden olabilir. Bu parametrede değişiklik yapmadan önce sunucuda kullanılabilir bellek miktarını ve daha önce açıklanan görevler için bellek ayırabilecek eşzamanlı işlemlerin sayısını anlamak son derece önemlidir.
Önemli noktalar
- Vakum bellek üst sınırı: Ölü kümelerin temizlenmesini artırarak hızlandırmak istiyorsanız, ölü küme tanımlayıcılarını toplamak için
maintenance_work_memyerleşik bir sınırlama olduğunu unutmayın. Bu işlem için yalnızca 1 GB'a kadar bellek kullanabilir. -
Otomatik vakum için bellek ayrımı: Otomatik vakum işlemlerinin
autovacuum_work_membağımsız olarak kullandığı belleği denetlemek için ayarını kullanabilirsiniz. Bu ayar, öğesininmaintenance_work_membir alt kümesi olarak görev yapar. Diğer bakım görevleri ve veri tanımı işlemleri için bellek ayırmayı etkilemeden otomatik vakum işlevinin ne kadar bellek kullandığına karar vekleyebilirsiniz.
Azure'a özgü notlar
Sunucu parametresinin maintenance_work_mem varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, o örneğin sunucu parametresi için maintenance_work_mem varsayılan değer üzerinde herhangi bir etkiye sahip olmayacaktır.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini maintenance_work_mem aşağıdaki formüldeki değerlere göre de ayarlamanız gerekir.
değerini maintenance_work_mem hesaplamak için kullanılan formül: (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions (en fazla hazırlıklı işlemler)
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Eşzamanlı olarak hazırlanmış en fazla işlem sayısını ayarlar. Çoğaltma sunucusunu çalıştırırken, bu parametreyi birincil sunucudakiyle aynı veya daha yüksek bir değere ayarlamanız gerekir. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0-262143 |
| Parametre türü | durağan |
| Documentation | max_prepared_transactions |
maksimum yığın derinliği
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Maksimum yığın derinliğini kilobayt olarak ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 2048 |
| Parametre türü | salt okunur |
| Documentation | max_stack_depth |
min_dinamik_paylaşımlı_bellek
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Başlangıçta ayrılmış dinamik paylaşılan bellek miktarı. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0 |
| Parametre türü | salt okunur |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sunucu tarafından kullanılan paylaşılan bellek arabelleklerinin sayısını ayarlar. Birim 8 kb'dir. İzin verilen değerler kullanılabilir belleğin %10 - %75'i aralığındadır. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 16-1073741823 |
| Parametre türü | durağan |
| Documentation | shared_buffers |
Description
Yapılandırma shared_buffers parametresi, verileri arabelleğe almak için PostgreSQL veritabanına ayrılan sistem belleği miktarını belirler. Tüm veritabanı işlemleri tarafından erişilebilen merkezi bir bellek havuzu görevi görür.
Veri gerektiğinde, veritabanı işlemi, önce paylaşılan arabelleği kontrol eder. Gerekli veriler varsa, hızlı bir şekilde alınır ve daha fazla zaman alan bir disk okumasını atlar. Paylaşılan arabellekler, veritabanı işlemleriyle disk arasında bir aracı görevi görür ve gerekli G/Ç işlemlerinin sayısını etkili bir şekilde azaltır.
Azure'a özgü notlar
Sunucu parametresinin shared_buffers varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, bu örneğin sunucu parametresi için shared_buffers varsayılan değer üzerinde herhangi bir etkiye sahip değildir.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini shared_buffers aşağıdaki formüllerdeki değerlere göre de ayarlamanız gerekir.
En fazla 2 GiB belleğe sahip sanal makineler için, shared_buffers değerini hesaplamak için kullanılan formül memoryGib * 16384.
2 GiB'den fazla sanal makine için değerini shared_buffers hesaplamak için kullanılan formül şeklindedir memoryGib * 32768.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
paylaşilan_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Ana paylaşılan bellek bölgesi için kullanılan paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | mmap |
| İzin verilen değerler | mmap |
| Parametre türü | salt okunur |
| Documentation | paylaşımlı bellek türü |
geçici ara bellekler
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her veritabanı oturumu tarafından kullanılan en fazla geçici arabellek sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 100-1073741823 |
| Parametre türü | dynamic |
| Documentation | temp_buffers |
work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Geçici disk dosyalarına yazmadan önce iç sıralama işlemleri ve karma tabloları tarafından kullanılacak bellek miktarını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 4096 |
| İzin verilen değerler | 4096-2097151 |
| Parametre türü | dynamic |
| Documentation | work_mem |
Description
work_mem PostgreSQL'deki parametresi, her veritabanı oturumunun özel bellek alanındaki belirli iç işlemler için ayrılan bellek miktarını denetler. Bu işlemlere örnek olarak sıralama ve karma verilebilir.
Paylaşılan bellek alanındaki paylaşılan arabelleklerin aksine, work_mem oturum başına veya sorgu başına ayrılan özel bellek alanında bulunur. Yeterli work_mem bir boyut ayarlayarak bu işlemlerin verimliliğini önemli ölçüde artırabilir ve diske geçici veri yazma gereksinimini azaltabilirsiniz.
Önemli noktalar
-
Özel bağlantı belleği:
work_memher veritabanı oturumunun kullandığı özel belleğin bir parçasıdır. Bu bellek,shared_bufferstarafından kullanılan paylaşılan bellek alanından ayrıdır. -
Sorguya özgü kullanım: Tüm oturumlar veya sorgular kullanmaz
work_mem. gibiSELECT 1basit sorguların gerektirmework_memolasılığı düşüktür. Ancak, sıralama veya karma oluşturma gibi işlemleri içeren karmaşık sorgularwork_membir veya birden çok öbeği tüketebilir. -
Paralel işlemler: Birden çok paralel arka uca yayılan sorgular için her arka uç bir veya birden çok öbek
work_memkullanabilir.
work_mem'in izlenmesi ve ayarlanması
Öncelikle sıralama veya karma işlemleriyle ilgili sorgu yürütme sürelerinin yavaş olması durumunda sisteminizin performansını sürekli izlemek ve gerektiği gibi ayarlamak work_mem önemlidir. Azure portalında bulunan araçları kullanarak performansı izlemenin yolları şunlardır:
-
Sorgu performansı içgörüleri: Geçici dosyalar oluşturan sorguları tanımlamak için Geçici dosyalara göre en çok kullanılan sorgular sekmesini denetleyin. Bu durum,
work_memöğesinin artırılması için olası bir gereksinim olduğunu gösterir. - Sorun giderme kılavuzları: Sorunlu sorguları tanımlamak için sorun giderme kılavuzlarındaki Yüksek geçici dosyalar sekmesini kullanın.
Ayrıntılı ayarlama
Parametresini work_mem yönetirken, genel bir değer ayarlamak yerine ayrıntılı ayarlama yaklaşımını benimsemek genellikle daha verimli olur. Bu yaklaşım, işlemlerin ve kullanıcıların belirli gereksinimlerine göre bellek ayırmanızı sağlar. Ayrıca yetersiz bellek sorunlarıyla karşılaşma riskini de en aza indirir. Bu konuda şu şekilde devam edebilirsiniz:
Kullanıcı düzeyi: Belirli bir kullanıcı öncelikle yoğun bellek kullanan toplama veya raporlama görevlerinde yer alıyorsa, söz konusu kullanıcının değerini özelleştirmeyi
work_memgöz önünde bulundurun.ALTER ROLEKullanıcının işlemlerinin performansını artırmak için komutunu kullanın.İşlev/yordam düzeyi: Belirli işlevler veya yordamlar önemli miktarda geçici dosya oluşturuyorsa, belirli işlev veya yordam düzeyinde değeri artırmak
work_memyararlı olabilir. Bu işlemlere özel olarak daha fazla bellek ayırmak içinALTER FUNCTIONveyaALTER PROCEDUREkomutunu kullanın.Veritabanı düzeyi: Yalnızca belirli veritabanları yüksek sayıda geçici dosya oluşturuyorsa veritabanı düzeyinde değişiklik
work_memyapın.Genel düzey: Sisteminizin analizi çoğu sorgunun küçük geçici dosyalar oluşturduğunu, ancak yalnızca birkaçının büyük dosyalar oluşturduğunu gösterirse, değeri genel olarak artırmak
work_memakıllıca olabilir. Bu eylem sorguların çoğunun bellekte işlenmesini kolaylaştırır, böylece disk tabanlı işlemlerden kaçınabilir ve verimliliği artırabilirsiniz. Ancak, artanwork_memdeğeri işleyebileceğinden emin olmak için her zaman dikkatli olun ve sunucunuzdaki bellek kullanımını izleyin.
Sıralama işlemleri için en düşük work_mem değerini belirleme
Özellikle sıralama işlemi sırasında geçici disk dosyaları oluşturan belirli bir sorgunun en düşük work_mem değerini bulmak için, sorgu yürütme sırasında oluşturulan geçici dosya boyutunu göz önünde bulundurarak başlayın. Örneğin, bir sorgu 20 MB geçici bir dosya oluşturuyorsa:
- psql veya tercih ettiğiniz PostgreSQL istemcisini kullanarak veritabanınıza bağlanın.
- Bellekte işlenirken ek üst bilgileri hesaba katmak için 20 MB'tan biraz daha yüksek bir başlangıç
work_memdeğeri ayarlayın. Şunun gibi bir komut kullanın:SET work_mem TO '25MB'. - Aynı oturumda sorunlu sorguda komutunu çalıştırın
EXPLAIN ANALYZE. -
"Sort Method: quicksort Memory: xkB"çıktıyı gözden geçirin. Eğer"external merge Disk: xkB"değerini gösteriyorsa,work_memdeğerini artımlı olarak yükseltin ve"quicksort Memory"görünene kadar yeniden test edin. Sorgunun artık bellekte çalıştığını gösteren"quicksort Memory"görünümü. - Bu yöntem aracılığıyla değeri belirledikten sonra, operasyonel gereksinimlerinize uyacak şekilde genel olarak veya daha ayrıntılı düzeylerde (daha önce açıklandığı gibi) uygulayabilirsiniz.
autovacuum_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her otomatik vakum çalışan işlemi tarafından kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | -1 |
| İzin verilen değerler | -1-2097151 |
| Parametre türü | dynamic |
| Documentation | autovacuum_work_mem |
dinamik_paylaşımlı_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Kullanılan dinamik paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | posix |
| İzin verilen değerler | posix |
| Parametre türü | salt okunur |
| Documentation | dinamik_paylaşımlı_bellek_türü |
hash_mem_multiplier
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Karma tablolar için kullanılacak work_mem katı. |
| Veri türü | sayısal |
| Varsayılan değer | 1 |
| İzin verilen değerler | 1-1000 |
| Parametre türü | dynamic |
| Documentation | hash_mem_multiplier |
büyük sayfalar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Büyük bellek sayfalarının kullanımını etkinleştirir/devre dışı bırakır. Bu ayar, 4'ten az sanal çekirdeği olan sunucular için geçerli değildir. |
| Veri türü | enumeration |
| Varsayılan değer | try |
| İzin verilen değerler | on,off,try |
| Parametre türü | durağan |
| Documentation | huge_pages |
Description
Büyük sayfalar, belleğin daha büyük bloklarda yönetilmesini sağlayan bir özelliktir. Standart 4 KB sayfa yerine genellikle 2 MB'a kadar blokları yönetebilirsiniz.
Çok büyük sayfaların kullanılması, CPU'ları etkili bir şekilde boşaltan performans avantajları sunabilir:
- Bellek yönetimi görevleriyle ilişkili ek yükü, çeviri lookaside buffer (TLB) hatalarının daha az olması gibi durumlarla azaltır.
- Bellek yönetimi için gereken süreyi kısaltır.
Özellikle, PostgreSQL'de büyük sayfaları yalnızca paylaşılan bellek alanı için kullanabilirsiniz. Paylaşılan bellek alanının önemli bir bölümü paylaşılan arabellekler için ayrılır.
Başka bir avantajı, büyük sayfaların paylaşılan bellek alanının diske değişimini engellemesi ve bu da performansı daha da dengeler.
Recommendations
- Önemli bellek kaynaklarına sahip sunucular için büyük sayfaları devre dışı bırakmaktan kaçının. Çok büyük sayfaları devre dışı bırakmak performansı tehlikeye atabilir.
- Çok büyük sayfaları desteklemeyen daha küçük bir sunucuyla başlıyorsanız ancak bunu destekleyen bir sunucuya ölçeği artırmayı düşünüyorsanız, sorunsuz geçiş ve en iyi performans için ayarını konumunda
huge_pagestutunTRY.
Azure'a özgü notlar
Dört veya daha fazla sanal çekirdek içeren sunucular için, temel alınan işletim sisteminden büyük sayfalar otomatik olarak ayrılır. Bu özellik, dörtten az sanal çekirdeği olan sunucularda kullanılamaz. Büyük sayfa sayısı, shared_buffers de dahil olmak üzere paylaşılan bellek ayarlarında yapılan değişiklikler sonucunda otomatik olarak ayarlanır.
logical_decoding_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Mantıksal kod çözme için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 65536 |
| İzin verilen değerler | 64-2147483647 |
| Parametre türü | dynamic |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | VACUUM, Create Index gibi bakım işlemleri için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 1024-2097151 |
| Parametre türü | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem PostgreSQL'deki bir yapılandırma parametresidir. , VACUUMve CREATE INDEXgibi ALTER TABLEbakım işlemleri için ayrılan bellek miktarını yönetir. 'nin aksine work_mem, sorgu işlemleri için bellek ayırmayı etkiler, maintenance_work_mem veritabanı yapısını koruyan ve en iyi duruma getiren görevler için ayrılmıştır.
! [NOT] Aşırı agresif değerlerin ayarlanması
maintenance_work_memdüzenli aralıklarla sistemde bellek yetersiz hatasına neden olabilir. Bu parametrede değişiklik yapmadan önce sunucuda kullanılabilir bellek miktarını ve daha önce açıklanan görevler için bellek ayırabilecek eşzamanlı işlemlerin sayısını anlamak son derece önemlidir.
Önemli noktalar
- Vakum bellek üst sınırı: Ölü kümelerin temizlenmesini artırarak hızlandırmak istiyorsanız, ölü küme tanımlayıcılarını toplamak için
maintenance_work_memyerleşik bir sınırlama olduğunu unutmayın. Bu işlem için yalnızca 1 GB'a kadar bellek kullanabilir. -
Otomatik vakum için bellek ayrımı: Otomatik vakum işlemlerinin
autovacuum_work_membağımsız olarak kullandığı belleği denetlemek için ayarını kullanabilirsiniz. Bu ayar, öğesininmaintenance_work_membir alt kümesi olarak görev yapar. Diğer bakım görevleri ve veri tanımı işlemleri için bellek ayırmayı etkilemeden otomatik vakum işlevinin ne kadar bellek kullandığına karar vekleyebilirsiniz.
Azure'a özgü notlar
Sunucu parametresinin maintenance_work_mem varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, o örneğin sunucu parametresi için maintenance_work_mem varsayılan değer üzerinde herhangi bir etkiye sahip olmayacaktır.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini maintenance_work_mem aşağıdaki formüldeki değerlere göre de ayarlamanız gerekir.
değerini maintenance_work_mem hesaplamak için kullanılan formül: (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions (en fazla hazırlıklı işlemler)
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Eşzamanlı olarak hazırlanmış en fazla işlem sayısını ayarlar. Çoğaltma sunucusunu çalıştırırken, bu parametreyi birincil sunucudakiyle aynı veya daha yüksek bir değere ayarlamanız gerekir. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0-262143 |
| Parametre türü | durağan |
| Documentation | max_prepared_transactions |
maksimum yığın derinliği
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Maksimum yığın derinliğini kilobayt olarak ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 2048 |
| Parametre türü | salt okunur |
| Documentation | max_stack_depth |
shared_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sunucu tarafından kullanılan paylaşılan bellek arabelleklerinin sayısını ayarlar. Birim 8 kb'dir. İzin verilen değerler kullanılabilir belleğin %10 - %75'i aralığındadır. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 16-1073741823 |
| Parametre türü | durağan |
| Documentation | shared_buffers |
Description
Yapılandırma shared_buffers parametresi, verileri arabelleğe almak için PostgreSQL veritabanına ayrılan sistem belleği miktarını belirler. Tüm veritabanı işlemleri tarafından erişilebilen merkezi bir bellek havuzu görevi görür.
Veri gerektiğinde, veritabanı işlemi, önce paylaşılan arabelleği kontrol eder. Gerekli veriler varsa, hızlı bir şekilde alınır ve daha fazla zaman alan bir disk okumasını atlar. Paylaşılan arabellekler, veritabanı işlemleriyle disk arasında bir aracı görevi görür ve gerekli G/Ç işlemlerinin sayısını etkili bir şekilde azaltır.
Azure'a özgü notlar
Sunucu parametresinin shared_buffers varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, bu örneğin sunucu parametresi için shared_buffers varsayılan değer üzerinde herhangi bir etkiye sahip değildir.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini shared_buffers aşağıdaki formüllerdeki değerlere göre de ayarlamanız gerekir.
En fazla 2 GiB belleğe sahip sanal makineler için, shared_buffers değerini hesaplamak için kullanılan formül memoryGib * 16384.
2 GiB'den fazla sanal makine için değerini shared_buffers hesaplamak için kullanılan formül şeklindedir memoryGib * 32768.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
paylaşilan_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Ana paylaşılan bellek bölgesi için kullanılan paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | mmap |
| İzin verilen değerler | mmap |
| Parametre türü | salt okunur |
| Documentation | paylaşımlı bellek türü |
geçici ara bellekler
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her veritabanı oturumu tarafından kullanılan en fazla geçici arabellek sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 100-1073741823 |
| Parametre türü | dynamic |
| Documentation | temp_buffers |
work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Geçici disk dosyalarına yazmadan önce iç sıralama işlemleri ve karma tabloları tarafından kullanılacak bellek miktarını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 4096 |
| İzin verilen değerler | 4096-2097151 |
| Parametre türü | dynamic |
| Documentation | work_mem |
Description
work_mem PostgreSQL'deki parametresi, her veritabanı oturumunun özel bellek alanındaki belirli iç işlemler için ayrılan bellek miktarını denetler. Bu işlemlere örnek olarak sıralama ve karma verilebilir.
Paylaşılan bellek alanındaki paylaşılan arabelleklerin aksine, work_mem oturum başına veya sorgu başına ayrılan özel bellek alanında bulunur. Yeterli work_mem bir boyut ayarlayarak bu işlemlerin verimliliğini önemli ölçüde artırabilir ve diske geçici veri yazma gereksinimini azaltabilirsiniz.
Önemli noktalar
-
Özel bağlantı belleği:
work_memher veritabanı oturumunun kullandığı özel belleğin bir parçasıdır. Bu bellek,shared_bufferstarafından kullanılan paylaşılan bellek alanından ayrıdır. -
Sorguya özgü kullanım: Tüm oturumlar veya sorgular kullanmaz
work_mem. gibiSELECT 1basit sorguların gerektirmework_memolasılığı düşüktür. Ancak, sıralama veya karma oluşturma gibi işlemleri içeren karmaşık sorgularwork_membir veya birden çok öbeği tüketebilir. -
Paralel işlemler: Birden çok paralel arka uca yayılan sorgular için her arka uç bir veya birden çok öbek
work_memkullanabilir.
work_mem'in izlenmesi ve ayarlanması
Öncelikle sıralama veya karma işlemleriyle ilgili sorgu yürütme sürelerinin yavaş olması durumunda sisteminizin performansını sürekli izlemek ve gerektiği gibi ayarlamak work_mem önemlidir. Azure portalında bulunan araçları kullanarak performansı izlemenin yolları şunlardır:
-
Sorgu performansı içgörüleri: Geçici dosyalar oluşturan sorguları tanımlamak için Geçici dosyalara göre en çok kullanılan sorgular sekmesini denetleyin. Bu durum,
work_memöğesinin artırılması için olası bir gereksinim olduğunu gösterir. - Sorun giderme kılavuzları: Sorunlu sorguları tanımlamak için sorun giderme kılavuzlarındaki Yüksek geçici dosyalar sekmesini kullanın.
Ayrıntılı ayarlama
Parametresini work_mem yönetirken, genel bir değer ayarlamak yerine ayrıntılı ayarlama yaklaşımını benimsemek genellikle daha verimli olur. Bu yaklaşım, işlemlerin ve kullanıcıların belirli gereksinimlerine göre bellek ayırmanızı sağlar. Ayrıca yetersiz bellek sorunlarıyla karşılaşma riskini de en aza indirir. Bu konuda şu şekilde devam edebilirsiniz:
Kullanıcı düzeyi: Belirli bir kullanıcı öncelikle yoğun bellek kullanan toplama veya raporlama görevlerinde yer alıyorsa, söz konusu kullanıcının değerini özelleştirmeyi
work_memgöz önünde bulundurun.ALTER ROLEKullanıcının işlemlerinin performansını artırmak için komutunu kullanın.İşlev/yordam düzeyi: Belirli işlevler veya yordamlar önemli miktarda geçici dosya oluşturuyorsa, belirli işlev veya yordam düzeyinde değeri artırmak
work_memyararlı olabilir. Bu işlemlere özel olarak daha fazla bellek ayırmak içinALTER FUNCTIONveyaALTER PROCEDUREkomutunu kullanın.Veritabanı düzeyi: Yalnızca belirli veritabanları yüksek sayıda geçici dosya oluşturuyorsa veritabanı düzeyinde değişiklik
work_memyapın.Genel düzey: Sisteminizin analizi çoğu sorgunun küçük geçici dosyalar oluşturduğunu, ancak yalnızca birkaçının büyük dosyalar oluşturduğunu gösterirse, değeri genel olarak artırmak
work_memakıllıca olabilir. Bu eylem sorguların çoğunun bellekte işlenmesini kolaylaştırır, böylece disk tabanlı işlemlerden kaçınabilir ve verimliliği artırabilirsiniz. Ancak, artanwork_memdeğeri işleyebileceğinden emin olmak için her zaman dikkatli olun ve sunucunuzdaki bellek kullanımını izleyin.
Sıralama işlemleri için en düşük work_mem değerini belirleme
Özellikle sıralama işlemi sırasında geçici disk dosyaları oluşturan belirli bir sorgunun en düşük work_mem değerini bulmak için, sorgu yürütme sırasında oluşturulan geçici dosya boyutunu göz önünde bulundurarak başlayın. Örneğin, bir sorgu 20 MB geçici bir dosya oluşturuyorsa:
- psql veya tercih ettiğiniz PostgreSQL istemcisini kullanarak veritabanınıza bağlanın.
- Bellekte işlenirken ek üst bilgileri hesaba katmak için 20 MB'tan biraz daha yüksek bir başlangıç
work_memdeğeri ayarlayın. Şunun gibi bir komut kullanın:SET work_mem TO '25MB'. - Aynı oturumda sorunlu sorguda komutunu çalıştırın
EXPLAIN ANALYZE. -
"Sort Method: quicksort Memory: xkB"çıktıyı gözden geçirin. Eğer"external merge Disk: xkB"değerini gösteriyorsa,work_memdeğerini artımlı olarak yükseltin ve"quicksort Memory"görünene kadar yeniden test edin. Sorgunun artık bellekte çalıştığını gösteren"quicksort Memory"görünümü. - Bu yöntem aracılığıyla değeri belirledikten sonra, operasyonel gereksinimlerinize uyacak şekilde genel olarak veya daha ayrıntılı düzeylerde (daha önce açıklandığı gibi) uygulayabilirsiniz.
autovacuum_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her otomatik vakum çalışan işlemi tarafından kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | -1 |
| İzin verilen değerler | -1-2097151 |
| Parametre türü | dynamic |
| Documentation | autovacuum_work_mem |
dinamik_paylaşımlı_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Kullanılan dinamik paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | posix |
| İzin verilen değerler | posix |
| Parametre türü | salt okunur |
| Documentation | dinamik_paylaşımlı_bellek_türü |
hash_mem_multiplier
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Karma tablolar için kullanılacak work_mem katı. |
| Veri türü | sayısal |
| Varsayılan değer | 1 |
| İzin verilen değerler | 1-1000 |
| Parametre türü | dynamic |
| Documentation | hash_mem_multiplier |
büyük sayfalar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Büyük bellek sayfalarının kullanımını etkinleştirir/devre dışı bırakır. Bu ayar, 4'ten az sanal çekirdeği olan sunucular için geçerli değildir. |
| Veri türü | enumeration |
| Varsayılan değer | try |
| İzin verilen değerler | on,off,try |
| Parametre türü | durağan |
| Documentation | huge_pages |
Description
Büyük sayfalar, belleğin daha büyük bloklarda yönetilmesini sağlayan bir özelliktir. Standart 4 KB sayfa yerine genellikle 2 MB'a kadar blokları yönetebilirsiniz.
Çok büyük sayfaların kullanılması, CPU'ları etkili bir şekilde boşaltan performans avantajları sunabilir:
- Bellek yönetimi görevleriyle ilişkili ek yükü, çeviri lookaside buffer (TLB) hatalarının daha az olması gibi durumlarla azaltır.
- Bellek yönetimi için gereken süreyi kısaltır.
Özellikle, PostgreSQL'de büyük sayfaları yalnızca paylaşılan bellek alanı için kullanabilirsiniz. Paylaşılan bellek alanının önemli bir bölümü paylaşılan arabellekler için ayrılır.
Başka bir avantajı, büyük sayfaların paylaşılan bellek alanının diske değişimini engellemesi ve bu da performansı daha da dengeler.
Recommendations
- Önemli bellek kaynaklarına sahip sunucular için büyük sayfaları devre dışı bırakmaktan kaçının. Çok büyük sayfaları devre dışı bırakmak performansı tehlikeye atabilir.
- Çok büyük sayfaları desteklemeyen daha küçük bir sunucuyla başlıyorsanız ancak bunu destekleyen bir sunucuya ölçeği artırmayı düşünüyorsanız, sorunsuz geçiş ve en iyi performans için ayarını konumunda
huge_pagestutunTRY.
Azure'a özgü notlar
Dört veya daha fazla sanal çekirdek içeren sunucular için, temel alınan işletim sisteminden büyük sayfalar otomatik olarak ayrılır. Bu özellik, dörtten az sanal çekirdeği olan sunucularda kullanılamaz. Büyük sayfa sayısı, shared_buffers de dahil olmak üzere paylaşılan bellek ayarlarında yapılan değişiklikler sonucunda otomatik olarak ayarlanır.
maintenance_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | VACUUM, Create Index gibi bakım işlemleri için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 1024-2097151 |
| Parametre türü | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem PostgreSQL'deki bir yapılandırma parametresidir. , VACUUMve CREATE INDEXgibi ALTER TABLEbakım işlemleri için ayrılan bellek miktarını yönetir. 'nin aksine work_mem, sorgu işlemleri için bellek ayırmayı etkiler, maintenance_work_mem veritabanı yapısını koruyan ve en iyi duruma getiren görevler için ayrılmıştır.
! [NOT] Aşırı agresif değerlerin ayarlanması
maintenance_work_memdüzenli aralıklarla sistemde bellek yetersiz hatasına neden olabilir. Bu parametrede değişiklik yapmadan önce sunucuda kullanılabilir bellek miktarını ve daha önce açıklanan görevler için bellek ayırabilecek eşzamanlı işlemlerin sayısını anlamak son derece önemlidir.
Önemli noktalar
- Vakum bellek üst sınırı: Ölü kümelerin temizlenmesini artırarak hızlandırmak istiyorsanız, ölü küme tanımlayıcılarını toplamak için
maintenance_work_memyerleşik bir sınırlama olduğunu unutmayın. Bu işlem için yalnızca 1 GB'a kadar bellek kullanabilir. -
Otomatik vakum için bellek ayrımı: Otomatik vakum işlemlerinin
autovacuum_work_membağımsız olarak kullandığı belleği denetlemek için ayarını kullanabilirsiniz. Bu ayar, öğesininmaintenance_work_membir alt kümesi olarak görev yapar. Diğer bakım görevleri ve veri tanımı işlemleri için bellek ayırmayı etkilemeden otomatik vakum işlevinin ne kadar bellek kullandığına karar vekleyebilirsiniz.
Azure'a özgü notlar
Sunucu parametresinin maintenance_work_mem varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, o örneğin sunucu parametresi için maintenance_work_mem varsayılan değer üzerinde herhangi bir etkiye sahip olmayacaktır.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini maintenance_work_mem aşağıdaki formüldeki değerlere göre de ayarlamanız gerekir.
değerini maintenance_work_mem hesaplamak için kullanılan formül: (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions (en fazla hazırlıklı işlemler)
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Eşzamanlı olarak hazırlanmış en fazla işlem sayısını ayarlar. Çoğaltma sunucusunu çalıştırırken, bu parametreyi birincil sunucudakiyle aynı veya daha yüksek bir değere ayarlamanız gerekir. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0-262143 |
| Parametre türü | durağan |
| Documentation | max_prepared_transactions |
maksimum yığın derinliği
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Maksimum yığın derinliğini kilobayt olarak ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 2048 |
| Parametre türü | salt okunur |
| Documentation | max_stack_depth |
shared_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sunucu tarafından kullanılan paylaşılan bellek arabelleklerinin sayısını ayarlar. Birim 8 kb'dir. İzin verilen değerler kullanılabilir belleğin %10 - %75'i aralığındadır. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 16-1073741823 |
| Parametre türü | durağan |
| Documentation | shared_buffers |
Description
Yapılandırma shared_buffers parametresi, verileri arabelleğe almak için PostgreSQL veritabanına ayrılan sistem belleği miktarını belirler. Tüm veritabanı işlemleri tarafından erişilebilen merkezi bir bellek havuzu görevi görür.
Veri gerektiğinde, veritabanı işlemi, önce paylaşılan arabelleği kontrol eder. Gerekli veriler varsa, hızlı bir şekilde alınır ve daha fazla zaman alan bir disk okumasını atlar. Paylaşılan arabellekler, veritabanı işlemleriyle disk arasında bir aracı görevi görür ve gerekli G/Ç işlemlerinin sayısını etkili bir şekilde azaltır.
Azure'a özgü notlar
Sunucu parametresinin shared_buffers varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, bu örneğin sunucu parametresi için shared_buffers varsayılan değer üzerinde herhangi bir etkiye sahip değildir.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini shared_buffers aşağıdaki formüllerdeki değerlere göre de ayarlamanız gerekir.
En fazla 2 GiB belleğe sahip sanal makineler için, shared_buffers değerini hesaplamak için kullanılan formül memoryGib * 16384.
2 GiB'den fazla sanal makine için değerini shared_buffers hesaplamak için kullanılan formül şeklindedir memoryGib * 32768.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
paylaşilan_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Ana paylaşılan bellek bölgesi için kullanılan paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | mmap |
| İzin verilen değerler | mmap |
| Parametre türü | salt okunur |
| Documentation | paylaşımlı bellek türü |
geçici ara bellekler
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her veritabanı oturumu tarafından kullanılan en fazla geçici arabellek sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 100-1073741823 |
| Parametre türü | dynamic |
| Documentation | temp_buffers |
work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Geçici disk dosyalarına yazmadan önce iç sıralama işlemleri ve karma tabloları tarafından kullanılacak bellek miktarını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 4096 |
| İzin verilen değerler | 4096-2097151 |
| Parametre türü | dynamic |
| Documentation | work_mem |
Description
work_mem PostgreSQL'deki parametresi, her veritabanı oturumunun özel bellek alanındaki belirli iç işlemler için ayrılan bellek miktarını denetler. Bu işlemlere örnek olarak sıralama ve karma verilebilir.
Paylaşılan bellek alanındaki paylaşılan arabelleklerin aksine, work_mem oturum başına veya sorgu başına ayrılan özel bellek alanında bulunur. Yeterli work_mem bir boyut ayarlayarak bu işlemlerin verimliliğini önemli ölçüde artırabilir ve diske geçici veri yazma gereksinimini azaltabilirsiniz.
Önemli noktalar
-
Özel bağlantı belleği:
work_memher veritabanı oturumunun kullandığı özel belleğin bir parçasıdır. Bu bellek,shared_bufferstarafından kullanılan paylaşılan bellek alanından ayrıdır. -
Sorguya özgü kullanım: Tüm oturumlar veya sorgular kullanmaz
work_mem. gibiSELECT 1basit sorguların gerektirmework_memolasılığı düşüktür. Ancak, sıralama veya karma oluşturma gibi işlemleri içeren karmaşık sorgularwork_membir veya birden çok öbeği tüketebilir. -
Paralel işlemler: Birden çok paralel arka uca yayılan sorgular için her arka uç bir veya birden çok öbek
work_memkullanabilir.
work_mem'in izlenmesi ve ayarlanması
Öncelikle sıralama veya karma işlemleriyle ilgili sorgu yürütme sürelerinin yavaş olması durumunda sisteminizin performansını sürekli izlemek ve gerektiği gibi ayarlamak work_mem önemlidir. Azure portalında bulunan araçları kullanarak performansı izlemenin yolları şunlardır:
-
Sorgu performansı içgörüleri: Geçici dosyalar oluşturan sorguları tanımlamak için Geçici dosyalara göre en çok kullanılan sorgular sekmesini denetleyin. Bu durum,
work_memöğesinin artırılması için olası bir gereksinim olduğunu gösterir. - Sorun giderme kılavuzları: Sorunlu sorguları tanımlamak için sorun giderme kılavuzlarındaki Yüksek geçici dosyalar sekmesini kullanın.
Ayrıntılı ayarlama
Parametresini work_mem yönetirken, genel bir değer ayarlamak yerine ayrıntılı ayarlama yaklaşımını benimsemek genellikle daha verimli olur. Bu yaklaşım, işlemlerin ve kullanıcıların belirli gereksinimlerine göre bellek ayırmanızı sağlar. Ayrıca yetersiz bellek sorunlarıyla karşılaşma riskini de en aza indirir. Bu konuda şu şekilde devam edebilirsiniz:
Kullanıcı düzeyi: Belirli bir kullanıcı öncelikle yoğun bellek kullanan toplama veya raporlama görevlerinde yer alıyorsa, söz konusu kullanıcının değerini özelleştirmeyi
work_memgöz önünde bulundurun.ALTER ROLEKullanıcının işlemlerinin performansını artırmak için komutunu kullanın.İşlev/yordam düzeyi: Belirli işlevler veya yordamlar önemli miktarda geçici dosya oluşturuyorsa, belirli işlev veya yordam düzeyinde değeri artırmak
work_memyararlı olabilir. Bu işlemlere özel olarak daha fazla bellek ayırmak içinALTER FUNCTIONveyaALTER PROCEDUREkomutunu kullanın.Veritabanı düzeyi: Yalnızca belirli veritabanları yüksek sayıda geçici dosya oluşturuyorsa veritabanı düzeyinde değişiklik
work_memyapın.Genel düzey: Sisteminizin analizi çoğu sorgunun küçük geçici dosyalar oluşturduğunu, ancak yalnızca birkaçının büyük dosyalar oluşturduğunu gösterirse, değeri genel olarak artırmak
work_memakıllıca olabilir. Bu eylem sorguların çoğunun bellekte işlenmesini kolaylaştırır, böylece disk tabanlı işlemlerden kaçınabilir ve verimliliği artırabilirsiniz. Ancak, artanwork_memdeğeri işleyebileceğinden emin olmak için her zaman dikkatli olun ve sunucunuzdaki bellek kullanımını izleyin.
Sıralama işlemleri için en düşük work_mem değerini belirleme
Özellikle sıralama işlemi sırasında geçici disk dosyaları oluşturan belirli bir sorgunun en düşük work_mem değerini bulmak için, sorgu yürütme sırasında oluşturulan geçici dosya boyutunu göz önünde bulundurarak başlayın. Örneğin, bir sorgu 20 MB geçici bir dosya oluşturuyorsa:
- psql veya tercih ettiğiniz PostgreSQL istemcisini kullanarak veritabanınıza bağlanın.
- Bellekte işlenirken ek üst bilgileri hesaba katmak için 20 MB'tan biraz daha yüksek bir başlangıç
work_memdeğeri ayarlayın. Şunun gibi bir komut kullanın:SET work_mem TO '25MB'. - Aynı oturumda sorunlu sorguda komutunu çalıştırın
EXPLAIN ANALYZE. -
"Sort Method: quicksort Memory: xkB"çıktıyı gözden geçirin. Eğer"external merge Disk: xkB"değerini gösteriyorsa,work_memdeğerini artımlı olarak yükseltin ve"quicksort Memory"görünene kadar yeniden test edin. Sorgunun artık bellekte çalıştığını gösteren"quicksort Memory"görünümü. - Bu yöntem aracılığıyla değeri belirledikten sonra, operasyonel gereksinimlerinize uyacak şekilde genel olarak veya daha ayrıntılı düzeylerde (daha önce açıklandığı gibi) uygulayabilirsiniz.
autovacuum_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her otomatik vakum çalışan işlemi tarafından kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | -1 |
| İzin verilen değerler | -1-2097151 |
| Parametre türü | dynamic |
| Documentation | autovacuum_work_mem |
dinamik_paylaşımlı_bellek_türü
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Kullanılan dinamik paylaşılan bellek uygulamasını seçer. |
| Veri türü | enumeration |
| Varsayılan değer | posix |
| İzin verilen değerler | posix |
| Parametre türü | salt okunur |
| Documentation | dinamik_paylaşımlı_bellek_türü |
büyük sayfalar
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Büyük bellek sayfalarının kullanımını etkinleştirir/devre dışı bırakır. Bu ayar, 4'ten az sanal çekirdeği olan sunucular için geçerli değildir. |
| Veri türü | enumeration |
| Varsayılan değer | try |
| İzin verilen değerler | on,off,try |
| Parametre türü | durağan |
| Documentation | huge_pages |
Description
Büyük sayfalar, belleğin daha büyük bloklarda yönetilmesini sağlayan bir özelliktir. Standart 4 KB sayfa yerine genellikle 2 MB'a kadar blokları yönetebilirsiniz.
Çok büyük sayfaların kullanılması, CPU'ları etkili bir şekilde boşaltan performans avantajları sunabilir:
- Bellek yönetimi görevleriyle ilişkili ek yükü, çeviri lookaside buffer (TLB) hatalarının daha az olması gibi durumlarla azaltır.
- Bellek yönetimi için gereken süreyi kısaltır.
Özellikle, PostgreSQL'de büyük sayfaları yalnızca paylaşılan bellek alanı için kullanabilirsiniz. Paylaşılan bellek alanının önemli bir bölümü paylaşılan arabellekler için ayrılır.
Başka bir avantajı, büyük sayfaların paylaşılan bellek alanının diske değişimini engellemesi ve bu da performansı daha da dengeler.
Recommendations
- Önemli bellek kaynaklarına sahip sunucular için büyük sayfaları devre dışı bırakmaktan kaçının. Çok büyük sayfaları devre dışı bırakmak performansı tehlikeye atabilir.
- Çok büyük sayfaları desteklemeyen daha küçük bir sunucuyla başlıyorsanız ancak bunu destekleyen bir sunucuya ölçeği artırmayı düşünüyorsanız, sorunsuz geçiş ve en iyi performans için ayarını konumunda
huge_pagestutunTRY.
Azure'a özgü notlar
Dört veya daha fazla sanal çekirdek içeren sunucular için, temel alınan işletim sisteminden büyük sayfalar otomatik olarak ayrılır. Bu özellik, dörtten az sanal çekirdeği olan sunucularda kullanılamaz. Büyük sayfa sayısı, shared_buffers de dahil olmak üzere paylaşılan bellek ayarlarında yapılan değişiklikler sonucunda otomatik olarak ayarlanır.
maintenance_work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | VACUUM, Create Index gibi bakım işlemleri için kullanılacak en yüksek belleği ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 1024-2097151 |
| Parametre türü | dynamic |
| Documentation | maintenance_work_mem |
Description
maintenance_work_mem PostgreSQL'deki bir yapılandırma parametresidir. , VACUUMve CREATE INDEXgibi ALTER TABLEbakım işlemleri için ayrılan bellek miktarını yönetir. 'nin aksine work_mem, sorgu işlemleri için bellek ayırmayı etkiler, maintenance_work_mem veritabanı yapısını koruyan ve en iyi duruma getiren görevler için ayrılmıştır.
! [NOT] Aşırı agresif değerlerin ayarlanması
maintenance_work_memdüzenli aralıklarla sistemde bellek yetersiz hatasına neden olabilir. Bu parametrede değişiklik yapmadan önce sunucuda kullanılabilir bellek miktarını ve daha önce açıklanan görevler için bellek ayırabilecek eşzamanlı işlemlerin sayısını anlamak son derece önemlidir.
Önemli noktalar
- Vakum bellek üst sınırı: Ölü kümelerin temizlenmesini artırarak hızlandırmak istiyorsanız, ölü küme tanımlayıcılarını toplamak için
maintenance_work_memyerleşik bir sınırlama olduğunu unutmayın. Bu işlem için yalnızca 1 GB'a kadar bellek kullanabilir. -
Otomatik vakum için bellek ayrımı: Otomatik vakum işlemlerinin
autovacuum_work_membağımsız olarak kullandığı belleği denetlemek için ayarını kullanabilirsiniz. Bu ayar, öğesininmaintenance_work_membir alt kümesi olarak görev yapar. Diğer bakım görevleri ve veri tanımı işlemleri için bellek ayırmayı etkilemeden otomatik vakum işlevinin ne kadar bellek kullandığına karar vekleyebilirsiniz.
Azure'a özgü notlar
Sunucu parametresinin maintenance_work_mem varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, o örneğin sunucu parametresi için maintenance_work_mem varsayılan değer üzerinde herhangi bir etkiye sahip olmayacaktır.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini maintenance_work_mem aşağıdaki formüldeki değerlere göre de ayarlamanız gerekir.
değerini maintenance_work_mem hesaplamak için kullanılan formül: (long)(82.5 * ln(memoryGiB) + 40) * 1024.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | maintenance_work_mem |
|---|---|
| 2 GiB | 99.328 KiB |
| 4 GiB | 157.696 KiB |
| 8 GiB | 216.064 KiB |
| 16 GiB | 274.432 KiB |
| 32 GiB | 332.800 KiB |
| 48 GiB | 367.616 KiB |
| 64 GiB | 392.192 KiB |
| 80 GiB | 410.624 KiB |
| 128 GiB | 450.560 KiB |
| 160 GiB | 468.992 KiB |
| 192 GiB | 484.352 KiB |
| 256 GiB | 508.928 KiB |
| 384 GiB | 542.720 KiB |
| 432 GiB | 552.960 KiB |
| 672 GiB | 590.848 KiB |
max_prepared_transactions (en fazla hazırlıklı işlemler)
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Eşzamanlı olarak hazırlanmış en fazla işlem sayısını ayarlar. Çoğaltma sunucusunu çalıştırırken, bu parametreyi birincil sunucudakiyle aynı veya daha yüksek bir değere ayarlamanız gerekir. |
| Veri türü | tamsayı |
| Varsayılan değer | 0 |
| İzin verilen değerler | 0-262143 |
| Parametre türü | durağan |
| Documentation | max_prepared_transactions |
maksimum yığın derinliği
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Maksimum yığın derinliğini kilobayt olarak ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 2048 |
| İzin verilen değerler | 2048 |
| Parametre türü | salt okunur |
| Documentation | max_stack_depth |
shared_buffers
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Sunucu tarafından kullanılan paylaşılan bellek arabelleklerinin sayısını ayarlar. Birim 8 kb'dir. İzin verilen değerler kullanılabilir belleğin %10 - %75'i aralığındadır. |
| Veri türü | tamsayı |
| Varsayılan değer | Sunucuya ayrılan kaynaklara (sanal çekirdekler, RAM veya disk alanı) bağlıdır. |
| İzin verilen değerler | 16-1073741823 |
| Parametre türü | durağan |
| Documentation | shared_buffers |
Description
Yapılandırma shared_buffers parametresi, verileri arabelleğe almak için PostgreSQL veritabanına ayrılan sistem belleği miktarını belirler. Tüm veritabanı işlemleri tarafından erişilebilen merkezi bir bellek havuzu görevi görür.
Veri gerektiğinde, veritabanı işlemi, önce paylaşılan arabelleği kontrol eder. Gerekli veriler varsa, hızlı bir şekilde alınır ve daha fazla zaman alan bir disk okumasını atlar. Paylaşılan arabellekler, veritabanı işlemleriyle disk arasında bir aracı görevi görür ve gerekli G/Ç işlemlerinin sayısını etkili bir şekilde azaltır.
Azure'a özgü notlar
Sunucu parametresinin shared_buffers varsayılan değeri, işlem için seçtiğiniz ürün adına göre esnek PostgreSQL için Azure Veritabanı sunucu örneğini sağladığınızda hesaplanır. Esnek sunucuyu destekleyen işlemde ürün seçiminde yapılan sonraki değişiklikler, bu örneğin sunucu parametresi için shared_buffers varsayılan değer üzerinde herhangi bir etkiye sahip değildir.
Bir örneğe atanan ürünü her değiştirdiğinizde, parametrenin değerini shared_buffers aşağıdaki formüllerdeki değerlere göre de ayarlamanız gerekir.
En fazla 2 GiB belleğe sahip sanal makineler için, shared_buffers değerini hesaplamak için kullanılan formül memoryGib * 16384.
2 GiB'den fazla sanal makine için değerini shared_buffers hesaplamak için kullanılan formül şeklindedir memoryGib * 32768.
Önceki formüle bağlı olarak, aşağıdaki tabloda sağlanan bellek miktarına bağlı olarak bu sunucu parametresinin ayarlanacağı değerler listelenmiştir:
| Bellek boyutu | shared_buffers |
|---|---|
| 2 GiB | 32768 |
| 4 GiB | 131072 |
| 8 GiB | 262144 |
| 16 GiB | 524288 |
| 32 GiB | 1048576 |
| 48 GiB | 1572864 |
| 64 GiB | 2097152 |
| 80 GiB | 2621440 |
| 128 GiB | 4194304 |
| 160 GiB | 5242880 |
| 192 GiB | 6291456 |
| 256 GiB | 8388608 |
| 384 GiB | 12582912 |
| 432 GiB | 14155776 |
| 672 GiB | 22020096 |
geçici ara bellekler
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Her veritabanı oturumu tarafından kullanılan en fazla geçici arabellek sayısını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 1024 |
| İzin verilen değerler | 100-1073741823 |
| Parametre türü | dynamic |
| Documentation | temp_buffers |
work_mem
| Özellik | Değer |
|---|---|
| Kategori | Kaynak Kullanımı / Bellek |
| Description | Geçici disk dosyalarına yazmadan önce iç sıralama işlemleri ve karma tabloları tarafından kullanılacak bellek miktarını ayarlar. |
| Veri türü | tamsayı |
| Varsayılan değer | 4096 |
| İzin verilen değerler | 4096-2097151 |
| Parametre türü | dynamic |
| Documentation | work_mem |
Description
work_mem PostgreSQL'deki parametresi, her veritabanı oturumunun özel bellek alanındaki belirli iç işlemler için ayrılan bellek miktarını denetler. Bu işlemlere örnek olarak sıralama ve karma verilebilir.
Paylaşılan bellek alanındaki paylaşılan arabelleklerin aksine, work_mem oturum başına veya sorgu başına ayrılan özel bellek alanında bulunur. Yeterli work_mem bir boyut ayarlayarak bu işlemlerin verimliliğini önemli ölçüde artırabilir ve diske geçici veri yazma gereksinimini azaltabilirsiniz.
Önemli noktalar
-
Özel bağlantı belleği:
work_memher veritabanı oturumunun kullandığı özel belleğin bir parçasıdır. Bu bellek,shared_bufferstarafından kullanılan paylaşılan bellek alanından ayrıdır. -
Sorguya özgü kullanım: Tüm oturumlar veya sorgular kullanmaz
work_mem. gibiSELECT 1basit sorguların gerektirmework_memolasılığı düşüktür. Ancak, sıralama veya karma oluşturma gibi işlemleri içeren karmaşık sorgularwork_membir veya birden çok öbeği tüketebilir. -
Paralel işlemler: Birden çok paralel arka uca yayılan sorgular için her arka uç bir veya birden çok öbek
work_memkullanabilir.
work_mem'in izlenmesi ve ayarlanması
Öncelikle sıralama veya karma işlemleriyle ilgili sorgu yürütme sürelerinin yavaş olması durumunda sisteminizin performansını sürekli izlemek ve gerektiği gibi ayarlamak work_mem önemlidir. Azure portalında bulunan araçları kullanarak performansı izlemenin yolları şunlardır:
-
Sorgu performansı içgörüleri: Geçici dosyalar oluşturan sorguları tanımlamak için Geçici dosyalara göre en çok kullanılan sorgular sekmesini denetleyin. Bu durum,
work_memöğesinin artırılması için olası bir gereksinim olduğunu gösterir. - Sorun giderme kılavuzları: Sorunlu sorguları tanımlamak için sorun giderme kılavuzlarındaki Yüksek geçici dosyalar sekmesini kullanın.
Ayrıntılı ayarlama
Parametresini work_mem yönetirken, genel bir değer ayarlamak yerine ayrıntılı ayarlama yaklaşımını benimsemek genellikle daha verimli olur. Bu yaklaşım, işlemlerin ve kullanıcıların belirli gereksinimlerine göre bellek ayırmanızı sağlar. Ayrıca yetersiz bellek sorunlarıyla karşılaşma riskini de en aza indirir. Bu konuda şu şekilde devam edebilirsiniz:
Kullanıcı düzeyi: Belirli bir kullanıcı öncelikle yoğun bellek kullanan toplama veya raporlama görevlerinde yer alıyorsa, söz konusu kullanıcının değerini özelleştirmeyi
work_memgöz önünde bulundurun.ALTER ROLEKullanıcının işlemlerinin performansını artırmak için komutunu kullanın.İşlev/yordam düzeyi: Belirli işlevler veya yordamlar önemli miktarda geçici dosya oluşturuyorsa, belirli işlev veya yordam düzeyinde değeri artırmak
work_memyararlı olabilir. Bu işlemlere özel olarak daha fazla bellek ayırmak içinALTER FUNCTIONveyaALTER PROCEDUREkomutunu kullanın.Veritabanı düzeyi: Yalnızca belirli veritabanları yüksek sayıda geçici dosya oluşturuyorsa veritabanı düzeyinde değişiklik
work_memyapın.Genel düzey: Sisteminizin analizi çoğu sorgunun küçük geçici dosyalar oluşturduğunu, ancak yalnızca birkaçının büyük dosyalar oluşturduğunu gösterirse, değeri genel olarak artırmak
work_memakıllıca olabilir. Bu eylem sorguların çoğunun bellekte işlenmesini kolaylaştırır, böylece disk tabanlı işlemlerden kaçınabilir ve verimliliği artırabilirsiniz. Ancak, artanwork_memdeğeri işleyebileceğinden emin olmak için her zaman dikkatli olun ve sunucunuzdaki bellek kullanımını izleyin.
Sıralama işlemleri için en düşük work_mem değerini belirleme
Özellikle sıralama işlemi sırasında geçici disk dosyaları oluşturan belirli bir sorgunun en düşük work_mem değerini bulmak için, sorgu yürütme sırasında oluşturulan geçici dosya boyutunu göz önünde bulundurarak başlayın. Örneğin, bir sorgu 20 MB geçici bir dosya oluşturuyorsa:
- psql veya tercih ettiğiniz PostgreSQL istemcisini kullanarak veritabanınıza bağlanın.
- Bellekte işlenirken ek üst bilgileri hesaba katmak için 20 MB'tan biraz daha yüksek bir başlangıç
work_memdeğeri ayarlayın. Şunun gibi bir komut kullanın:SET work_mem TO '25MB'. - Aynı oturumda sorunlu sorguda komutunu çalıştırın
EXPLAIN ANALYZE. -
"Sort Method: quicksort Memory: xkB"çıktıyı gözden geçirin. Eğer"external merge Disk: xkB"değerini gösteriyorsa,work_memdeğerini artımlı olarak yükseltin ve"quicksort Memory"görünene kadar yeniden test edin. Sorgunun artık bellekte çalıştığını gösteren"quicksort Memory"görünümü. - Bu yöntem aracılığıyla değeri belirledikten sonra, operasyonel gereksinimlerinize uyacak şekilde genel olarak veya daha ayrıntılı düzeylerde (daha önce açıklandığı gibi) uygulayabilirsiniz.