dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbook #16
mysql
PerformanceSEV2 · CİDDİ BOZULMA15-30 dakika / 15-30 minsSUPER / CONNECTION_ADMIN / RELOAD / REPLICATION CLIENT

MySQL InnoDB Buffer Pool İsabet Oranı Düştü: Bellek ve I/O Triyajı

Buffer pool isabet düşüşünün ısınma, büyük tarama veya RAM yetersizliğinden kaynaklanıp kaynaklanmadığını ayırır; sorgu ve bellek ayarlarını kontrollü değerlendirir.

İlişkili Metrik:M16
İlişkili Script:S27S40S25
#innodb#buffer-pool#cache-hit#io

Operasyonel Güvenlik ve Risk Uyarısı

Bu runbook müdahale adımları içerir; birçok adım yazma etkilidir (KILL, terminate, DROP, RESIZE). Önce test ortamında deneyin, üretimde adımları sırayla ve doğrulayarak uygulayın.

🟢 Salt Okunur (Read-Only)·🟡 Geri Alınabilir (Reversible)·🔴 Yüksek Etkili / Geri Alınamaz (High Impact)

1. Belirti / Symptom

- M16 uyarı eşiğinin altında; fiziksel okuma ve sorgu gecikmesi artıyor. Tek bir düşük oran, özellikle yeniden başlatma sonrası, olay kanıtı değildir.

2. Etki / Impact

Disk okuma yükü ve p95/p99 sorgu gecikmesi artabilir; bellek taşması veya OS swap daha ağır kesintiye yol açabilir.

3. Teşhis / Diagnosis

🟢 Salt Okunur1. S27 ile sayaçları ve buffer pool boyutunu alın:
sql
SHOW GLOBAL STATUS WHERE Variable_name IN
 ('Innodb_buffer_pool_read_requests','Innodb_buffer_pool_reads','Uptime');
SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size';

5-10 dakika arayla iki örnek alın. Aralık isabeti = `1 - ΔInnodb_buffer_pool_reads / ΔInnodb_buffer_pool_read_requests`. Kümülatif başlangıç oranı geçici bozulmaları gizler.

🟢 Salt Okunur2. Bellek enstrümantasyonu açıksa S40 ile bileşen tüketimini, OS'te available RAM/swap ve disk gecikmesini ölçün. Sunucu yeniden başlamış mı kontrol edin.
🟢 Salt Okunur3. S25'te yoğun digest'leri ve `rows_examined/rows_sent` oranını inceleyin; büyük raporlamalar/seq scan yükü cache'i yerinden ediyor olabilir.

4. Müdahale / Response

🟡 Geri Alınabilir1. Ani tablo taraması yapan raporu yavaşlatın veya başka replica'da çalıştırın. Sorguya uygun indeks ve seçici koşullar planlayın.
🟡 Geri Alınabilir2. RAM payı ölçülmüşse `innodb_buffer_pool_size` değerini küçük adımlarla artırın (örnek değer değil, ölçülmüş hedef kullanın). Dinamik değişiklik 5.7/8.0'da desteklenir, ancak yeniden boyutlandırma zaman alır ve bellek baskısı yaratabilir:
sql
SET GLOBAL innodb_buffer_pool_size = <olculmus_bayt_degeri>;

Yeniden başlatmada kalıcı olması için 5.7'de yapılandırma dosyası, 8.0'da uygun sürümde `SET PERSIST` veya yapılandırma yönetimi gerekir.

🔴 YÜKSEK RİSK / GERİ ALINAMAZ3. OS belleği yetersizken buffer pool'u artırmayın; swap/OOM, mevcut düşük isabetten çok daha ağırdır.

5. Doğrulama / Verification

- İki örnek üzerinden hesaplanan isabet oranı yükselirken fiziksel okuma hızı ve p95 gecikmesi düşer.

- OS available RAM, swap, MySQL proses RSS ve replica gecikmesi stabil kalır.

6. Geri Alma / Rollback

- Önceki bayt değerini `SET GLOBAL innodb_buffer_pool_size = <onceki_bayt_degeri>;` ile geri alın; kalıcı ayarı da düzeltin.

- Durdurulan raporu kontrollü hızla tekrar açın; yapılan indeks değişikliğini ayrıca değişiklik planıyla geri alın.

Diğer MYSQL Runbook'ları