
PostgreSQL Performans Ayarları: Vacuum, Analyze ve Query Planner
PostgreSQL performans optimizasyonu. Autovacuum ayarları, EXPLAIN ANALYZE kullanımı, pg_stat_statements ve postgresql.conf performans parametreleri.
PostgreSQL Performans Ayarları
PostgreSQL'in güçlü sorgu planlayıcısı ve MVCC (Multi-Version Concurrency Control) mimarisi, doğru yapılandırmayla olağanüstü performans sağlar.
postgresql.conf Temel Ayarları
# Dosya konumu
find /etc -name "postgresql.conf" 2>/dev/null
# Genellikle: /etc/postgresql/16/main/postgresql.conf
Bellek Ayarları:
# RAM'in %25'i (maksimum 8GB'ı aşmasın)
shared_buffers = 2GB
# Çalışma alanı (her sorgu için, dikkatli kullanın)
work_mem = 64MB
# Bakım işlemleri için
maintenance_work_mem = 512MB
# OS cache tahmini (RAM'in %50-75'i)
effective_cache_size = 6GB
WAL ve Checkpoint:
# WAL buffer
wal_buffers = 64MB
# Checkpoint aralığı
checkpoint_completion_target = 0.9
checkpoint_timeout = 10min
# Max WAL size
max_wal_size = 4GB
min_wal_size = 1GB
Bağlantı:
max_connections = 200
# PgBouncer bağlantı havuzlama kullanıyorsanız azaltın
# max_connections = 100
EXPLAIN ANALYZE Kullanımı
-- Sorgu planını ve gerçek süreci göster
EXPLAIN ANALYZE SELECT u.isim, COUNT(s.id) AS siparis_sayisi
FROM kullanicilar u
LEFT JOIN siparisler s ON u.id = s.kullanici_id
WHERE u.aktif = true
GROUP BY u.id, u.isim
ORDER BY siparis_sayisi DESC;
-- Detaylı çıktı
EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT ...;
EXPLAIN çıktısı yorumlama:
Seq Scan → Tüm tabloyu tarıyor (büyük tablolarda kötü)
Index Scan → Index kullanıyor (iyi)
Index Only Scan → Sadece index'ten veri alıyor (en iyi)
Bitmap Heap Scan → Büyük result set için iyi
Hash Join → Join metodu
Nested Loop → İç içe döngü join
Autovacuum Ayarları
VACUUM, silinen/güncellenen satırların yer kapladığı alanı geri kazanır:
# Autovacuum etkin (varsayılan)
autovacuum = on
autovacuum_vacuum_scale_factor = 0.05 # %5 değişince vacuum
autovacuum_analyze_scale_factor = 0.02 # %2 değişince analyze
# Büyük tablolar için tablo bazında ayar
-- Tablo bazında autovacuum ayarı
ALTER TABLE buyuk_tablo SET (
autovacuum_vacuum_scale_factor = 0.01,
autovacuum_analyze_scale_factor = 0.005
);
-- Manuel vacuum
VACUUM ANALYZE siparisler;
VACUUM FULL siparisler; -- Tüm alanı geri kazanır ama kilit alır
-- Bloat kontrolü
SELECT relname, n_dead_tup, n_live_tup,
round(n_dead_tup::numeric/nullif(n_live_tup,0)*100, 2) AS dead_pct
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC LIMIT 10;
pg_stat_statements ile Sorgu İzleme
-- Etkinleştir (postgresql.conf)
-- shared_preload_libraries = 'pg_stat_statements'
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
-- En yavaş sorgular
SELECT query, calls, total_exec_time/calls AS avg_ms,
rows/calls AS avg_rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC LIMIT 10;
-- En çok çağrılan
SELECT query, calls FROM pg_stat_statements
ORDER BY calls DESC LIMIT 10;
-- Sıfırla
SELECT pg_stat_statements_reset();
Index Optimizasyonu
-- Kullanılmayan indexler
SELECT schemaname, tablename, indexname, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0
AND indexname NOT LIKE '%pkey%';
-- Eksik index tespiti
SELECT * FROM pg_stat_user_tables
WHERE seq_scan > idx_scan
AND n_live_tup > 1000;
-- Partial index (koşullu)
CREATE INDEX idx_aktif_siparisler ON siparisler(tarih)
WHERE durum = 'aktif';
-- Covering index (INCLUDE)
CREATE INDEX idx_kullanici_siparis ON siparisler(kullanici_id)
INCLUDE (tarih, toplam);
-- Concurrent index (kilit almadan)
CREATE INDEX CONCURRENTLY idx_email ON kullanicilar(email);
Bağlantı Havuzlama: PgBouncer
apt install pgbouncer
# /etc/pgbouncer/pgbouncer.ini
[databases]
sitem_db = host=127.0.0.1 dbname=sitem_db
[pgbouncer]
listen_port = 6432
listen_addr = 127.0.0.1
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20
Monitoring
-- Aktif ve bekleyen sorgular
SELECT pid, usename, application_name, state, wait_event, query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY query_start;
-- Lock bekleyen sorgular
SELECT blocked_locks.pid AS blocked_pid,
blocking_locks.pid AS blocking_pid,
blocked_activity.query AS blocked_statement
FROM pg_catalog.pg_locks blocked_locks
JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
JOIN pg_catalog.pg_locks blocking_locks ON blocking_locks.locktype = blocked_locks.locktype
WHERE NOT blocked_locks.granted;
-- Tablo boyutları
SELECT relname AS table_name,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
Büyükweb VDS sunucularında PostgreSQL ile yüksek performanslı veritabanı altyapısı kurun.
Veritabani Performans Optimizasyonu
Veritabani web uygulamalarinin kalbidir.
MySQL/MariaDB Tuning
innodb_buffer_pool_size'i RAM'in %60-70'ine ayarlayin. slow_query_log ile yavas sorgulari tespit edin. max_connections optimize edin.
Indeksleme
WHERE, JOIN, ORDER BY sutunlarina indeks ekleyin. EXPLAIN ile sorgu planlari analiz edin. Composite index kullanin.
Baglanti Havuzu
ProxySQL ile gelismis baglanti yonetimi. Connection pooling ile maliyet azaltma. Persistent connections kullanin.
Replikasyon
Master-Slave ile okuma yukunu dagitin. Galera Cluster ile multi-master yuksek erisilebilirlik. Semi-senkron replikasyon degerlendirin.
Yedekleme
mysqldump mantiksal, xtrabackup fiziksel yedek. Binary log ile point-in-time recovery. Incremental yedekleme ile tasarruf.
Sik Sorulan Sorular
MySQL mi PostgreSQL mi?
MySQL cogu web uygulamasi ile uyumlu. PostgreSQL gelismis veri tipleri ve JSON icin ideal. CMS'ler genelde MySQL kullanir.
Veritabanim buyudu ne yapmaliyim?
Gereksiz verileri temizleyin, tablo optimize edin, arsivleme yapin, partitioning kullanin.
Ne siklikla yedek almaliyim?
Kritik veritabanlari saatlik, standart siteler gunluk. Buyuk degisikliklerden once manuel yedek.
Sonuc
Veritabani optimizasyonu uygulama performansini dogrudan etkiler. Indeksleme, tuning ve yedekleme ile veri katmaninizi guclendirin.
Veritabani Boyut Yonetimi
Buyuk Tablolar icin Stratejiler
- Partitioning: Tarihe gore tablolari bolumlendirin. Sorgu performansi artar.
- Arsivleme: Eski verileri arsiv tablolarina tasiyin.
- Sikistirma: InnoDB sikistirmasi ile disk kullanimini %50-75 azaltin.
WordPress Veritabani Optimizasyonu
- wp_options autoload: Gereksiz autoload kayitlari temizleyin.
- Post revisions: wp-config.php'de WP_POST_REVISIONS sinirlayin.
- Transient veriler: Suresi dolmus verileri duzenli temizleyin.
- Spam yorumlar: Toplu silin.
Veritabani Guvenlik
- Varsayilan portu degistirin
- Uygulama bazli kullanici olusturun
- Minimum gerekli yetki verin
- SSL ile baglanti sifreleyin
- Duzenli guvenlik taramasi yapin
Hosting ve Sunucu Terimleri Sozlugu
| Terim | Aciklama |
|---|---|
| VDS | Virtual Dedicated Server - Sanal ozel sunucu |
| NVMe SSD | Non-Volatile Memory Express - En hizli disk teknolojisi |
| LiteSpeed | Yuksek performansli web sunucu yazilimi |
| CloudLinux | Paylasimli hosting icin kaynak izolasyon isletim sistemi |
| cPanel | Populer web hosting kontrol paneli |
| Plesk | Web hosting ve sunucu yonetim paneli |
| KVM | Kernel-based Virtual Machine - Tam sanallastirma teknolojisi |
| DDoS | Distributed Denial of Service - Dagitik hizmet engelleme saldirisi |
| SSL/TLS | Veri iletisimini sifreleyen guvenlik protokolu |
| TTFB | Time to First Byte - Sunucu yanit suresi |
| CDN | Content Delivery Network - Icerik dagitim agi |
| WAF | Web Application Firewall - Web uygulama guvenligi duvari |
| IOPS | Input/Output Operations Per Second - Disk performans olcusu |
| Uptime | Sunucunun kesintisiz calisma suresi yuzdesi |
| Bandwidth | Veri transfer kapasitesi |
Bu terimleri anlamak, hosting ve sunucu hizmetlerini daha bilinçli secmenize yardimci olur. Detayli bilgi icin Buyukweb blog yazilarini takip edin veya teknik destek ekibimize danisIn.
Teknik Destek ve Yardim Kanallari
Buyukweb olarak musterilerimize birden fazla destek kanali sunuyoruz:
Canli Destek (Tawk.to)
Web sitemiz uzerinden 7/24 canli destek ile aninda yardim alin. Teknik sorulariniz, fatura islemleriniz ve genel bilgi talepleriniz icin canli destek ekibimiz hizmetinizdedir.
Telefon Destegi
0850 302 60 70 numarasindan hafta ici ve hafta sonu teknik destek alabilirsiniz. Acil durumlar ve karmasik sorunlar icin telefon destegi en hizli cozum yoludur.
E-posta Destegi
destek@buyukweb.com adresine detayli sorun tanimlamanizi gonderin. Ekran goruntuleri ve hata mesajlari ile birlikte gonderdiginiz talepler daha hizli cozumlenir.
Musteri Paneli
my.buyukweb.com uzerinden destek talepleri olusturun, faturalarinizi yonetin ve hizmetlerinizi kontrol edin. Ticket sistemi ile tum iletisiminiz kayit altindadir.
Bilgi Bankasi
Blog yazilarimiz ve rehberlerimiz ile sik karsilasilan sorunlarin cozumlerini kendiniz bulabilirsiniz. WordPress kurulumu, DNS ayarlari, e-posta yapilandirmasi gibi konularda adim adim rehberler mevcuttur.
Buyukweb teknik ekibi, hosting alaninda 17 yillik tecrubesi ile her turlu sorununuza profesyonel cozum sunar.
Ek Kaynaklar ve Referanslar
Konuyu daha derinlemesine ogrenimek icin asagidaki kaynaklari incelemenizi oneririz:
Buyukweb Blog
Hosting rehberleri, teknik yazilar ve sektorel analizler icin Buyukweb blogunu duzenli takip edin. Her hafta yeni icerikler yayinliyoruz.
Resmi Dokumanlar
- cPanel Documentation: cPanel kontrol paneli kullanim kilavuzu
- Plesk Documentation: Plesk panel yonetim rehberi
- WordPress Codex: WordPress gelistirici dokumantasyonu
- DigitalOcean Community: Sunucu yonetimi rehberleri
- Linux man pages: Linux komut referansi
Topluluk Forumlar
StackOverflow, ServerFault ve Reddit r/webhosting gibi topluluklarda deneyimli kullanicilardan yardim alabilirsiniz.
Video Kaynaklar
YouTube uzerinde Turkce hosting ve sunucu yonetimi egitim videolari mevcut. Gorsel ogrenme tercih ediyorsaniz bu kaynaklari degerlendirin.
Daha fazla bilgi ve profesyonel destek icin Buyukweb teknik ekibine ulasin:
- Telefon: 0850 302 60 70
- E-posta: destek@buyukweb.com
- Canli Destek: buyukweb.com
- Panel: my.buyukweb.com
Etiketler:

