Bilgi Bankası
MySQLPerformans ve kapasite 15 dk 14.06.2026

MySQL buffer pool ve indeks performansı: RAM gerçekten yetiyor mu?

MySQL’de “RAM yetmiyor” demek kolaydır; bazen doğrudur da. Ama buffer pool baskısı, kötü indeks, fazla bağlantı ve disk okuması birbirine karışır. Bu yazı MySQL’in belleği nasıl kullandığını ve indeks kararının neden RAM kadar önemli olduğunu anlatır.

Bu yazı sana şu durumda yardımcı olur
  • aynı sorgular veri büyüdükçe yavaşlıyor
  • disk I/O artıyor ve önbellek etkisi düşüyor
  • EXPLAIN çıktısında type=ALL veya yüksek rows görülüyor
  • buffer pool dolu ama neyin dolduğu bilinmiyor
  • connection artırmak performansı düzeltmiyor
Yazıyı bitirince

Buffer pool sinyallerini okuyabilecek, indeks planını yorumlayabilecek ve “RAM artırmalı mıyız, sorguyu mu düzeltmeliyiz?” sorusunu daha sakin cevaplayabileceksiniz.

TürkDB açısından ürünleşme notu

Bu bölüm, TürkDB’nin ilgili problemi hangi ürün ilkeleri ve kontrol noktalarıyla ele alacağını anlatır. Kapsam, gerçek iş yükü ve ihtiyaçla birlikte netleşir.

TürkDB MySQL tarafında yedek, PITR, bakım ve bağlantı zeminini düzenler. Performans kararında ise metrikleri ve sorgu davranışını birlikte okuyup kapasite artışını en son değil, doğru anda yapmanızı destekler.

Buffer pool veritabanının çalışma masası gibidir

InnoDB buffer pool, sık kullanılan veri ve indeks sayfalarının bellekte tutulduğu yerdir. Çalışma masanız küçükse sürekli dolaptan dosya alıp geri koyarsınız; MySQL’de bunun karşılığı daha fazla disk okumasıdır.

Ama çalışma masasını büyütmek her zaman çözüm değildir. Eğer sorgu yanlış indeks yüzünden milyonlarca satır geziyorsa, daha büyük buffer pool yalnızca daha büyük bir sorunu bellekte tutar.

Bellek baskısını okumak için birkaç temel sinyal

MySQL performans teşhisinde tek bir metrik yoktur. Buffer pool okuma isteği, diskten okuma, dirty page ve kullanılabilir sayfa bilgileri birlikte okunur. Amaç, sistem gerçekten diskten mi besleniyor yoksa sorgu planı mı fazla veri okuyor anlamaktır.

InnoDB buffer pool sinyalleri

mysql-buffer-pool.sql
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages%';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

İndeks yoksa RAM konuşması erken başlar

Bir sorgu doğru indeksi kullanmıyorsa buffer pool ne kadar büyük olursa olsun gereksiz veri dolaşır. EXPLAIN çıktısında rows çok yüksekse, filtered düşükse veya type=ALL görünüyorsa önce sorgu planını düzeltmek gerekir.

Planı okumak ve composite index düşünmek

mysql-explain-index.sql
EXPLAIN
SELECT id, customer_id, created_at
FROM orders
WHERE tenant_id = ?
  AND status = 'paid'
  AND created_at >= NOW() - INTERVAL 30 DAY
ORDER BY created_at DESC
LIMIT 100;

CREATE INDEX idx_orders_tenant_status_created
ON orders (tenant_id, status, created_at DESC);

RAM artırma kararı nasıl daha sağlıklı verilir?

Eğer kritik sorgular doğru indeksleri kullanıyor, bağlantı sayısı kontrol altında, disk okuma hâlâ yüksek ve working set mevcut belleğe sığmıyorsa buffer pool büyütmek anlamlıdır. Ama bu kararı sorgu düzeltmesinden önce verirseniz, pahalı bir rahatlama satın alabilirsiniz.

TürkDB tarafında tier değişikliği kapasiteyi artırabilir; fakat iyi sıra hâlâ aynıdır: önce sorgu ve indeks, sonra pool ve zaman aşımı, en son kaynak büyütme.

Devam etmek istersen

Sorunu motor bazında derinleştirin

Benzer belirtiler farklı motorlarda farklı nedenlere dayanır; yayınlanan tüm rehberleri ana sayfadan takip edebilirsiniz.

Tüm makaleler