Tek bir PostgreSQL sorgusu birden fazla çekirdek kullanabilir mi?


56

PostgreSQL'in son sürümlerinde (Aralık 2013 itibariyle) performans artışı elde etmek için iki veya daha fazla çekirdek arasında bir sorgu paylaşabilir miyiz? Yoksa daha hızlı çekirdek almalı mıyız?

Yanıtlar:


48

Hayır, v9.6'dan önceki PostgreSQL sürümleri için. Lütfen PostgreSQL SSS bölümüne bakın : PostgreSQL CPU kaynaklarını nasıl kullanır?

PostgreSQL sunucusu işlem tabanlıdır (dişli değil). Her veritabanı oturumu, tek bir PostgreSQL işletim sistemi (OS) işlemine bağlanır . Birden çok oturum, işletim sistemi tarafından kullanılabilir tüm CPU'lara otomatik olarak yayılır. İşletim sistemi ayrıca disk G / Ç işlemlerini yürütmek ve diğer veritabanı dışı görevleri çalıştırmak için CPU'ları kullanır. İstemci uygulamaları, her biri ayrı bir veritabanı işlemine bağlanan iş parçacıkları kullanabilir.

9.6 sürümünden bu yana , bazı sorguların bölümleri , birden fazla CPU çekirdeğinin kullanılmasına izin veren ayrı işletim sistemi işlemlerinde paralel olarak çalıştırılabilir. Paralel sorgular varsayılan olarak sürüm 10'da (max_parallel_workers_per_gather) etkinleştirilir ve gelecekteki sürümlerde ek paralellik beklenir.




3

Hayır. Her bağlantı sunucuda ayrı bir işlem oluşturur.

Bazı paralellikleri pljava gibi dişli bir prosedür dili kullanarak "taklit edebilirsiniz". Birkaç iş parçacığını başlatan bir java prosedürü (işlevi) oluşturun ve birkaç işçiyi kullanarak çıktı sonucunu oluşturun. Arka uç senkronize edilir, böylece her çalışan çıkışı asenkronize olarak güncelleyebilir.

Java, konu koordinasyonu / işbirliği için iyi bir desteğe sahiptir.

Örnek olarak, bu CPU yoğun işlemler veya ağ uzunluğu işlemleri için iyi olurdu.

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