Tüm Ürünler
Search
Belge Merkezi

ApsaraDB RDS:MySQL memory allocation

Son Güncelleme:Oct 03, 2026

RDS örnek belleği iki kategoriye ayrılır: paylaşılan bellek ve oturuma özel bellek. Paylaşılan bellek, örnek başlatıldığında bir kez tahsis edilir ve tüm bağlantılar tarafından paylaşılır. Oturuma özel bellek ise talep üzerine bağlantı başına tahsis edilir; sıralama, birleştirme veya veri okuma gerektiren her aktif sorgu tam arabellek boyutunu anında talep eder. Yüksek eşzamanlılık altında bu bağlantı başına tahsis, bellek yetersizliği (OOM) hatalarının ve birincil/ikincil yük devretmelerinin temel nedenidir.

Bellek hesaplama yöntemi

Toplam bellek kullanımının nasıl tahmin edildiğini gösteren formül aşağıdadır:

Total memory ≈ Shared memory
             + max_connections × per-session memory per connection
Bileşen Parametreler
Paylaşılan bellek innodb_buffer_pool_size + innodb_log_buffer_size + innodb_additional_mem_pool_size + key_buffer_size + query_cache_size
Oturum başına bellek sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + binlog_cache_size + tmp_table_size

Paylaşılan bellek

Paylaşılan bellek tahsisini kontrol etmek için aşağıdaki sorguyu çalıştırın:

SHOW VARIABLES WHERE Variable_name IN (
  'innodb_buffer_pool_size',
  'innodb_log_buffer_size',
  'innodb_additional_mem_pool_size',
  'key_buffer_size',
  'query_cache_size'
);

Aşağıdaki çıktı, 240 MB'lık bir örneğe aittir:

+---------------------------------+-----------------+
| Variable_name                   | Value           |
+---------------------------------+-----------------+
| innodb_additional_mem_pool_size | 2097152         |
| innodb_buffer_pool_size         | 67108864        |
| innodb_log_buffer_size          | 1048576         |
| key_buffer_size                 | 16777216        |
| query_cache_size                | 0               |
+---------------------------------+-----------------+

Parametreler

Parametre RDS'deki Varsayılan Değer Açıklama
innodb_buffer_pool_size 64 MB (240 MB örnek) InnoDB arabellek havuzu. Veri sayfalarını, dizin sayfalarını, geri alma sayfalarını, ekleme arabelleklerini, uyarlamalı karma dizinleri, kilitleri ve veri sözlüklerini depolar. Tüm SQL okuma ve yazma işlemleri fiziksel veri dosyaları yerine arabellek havuzu üzerinde gerçekleşir; veriler daha sonra kontrol noktaları aracılığıyla diske yazılır. Daha büyük bir arabellek havuzu okuma/yazma performansını artırır ancak hata kurtarma süresini uzatır.
innodb_log_buffer_size 1 MB InnoDB günlük arabelleği. Diske aktarılmadan önce yeniden yapma günlüklerini (redo logs) depolar. Aktarma işlemi ana iş parçacığı tarafından her saniye, her işlem commit işleminde ve kullanılabilir arabellek toplam boyutunun yarısının altına düştüğünde tetiklenir. Çoğu iş yükü için 1 MB yeterlidir.
innodb_additional_mem_pool_size 2 MB Dahili InnoDB veri yapılarını depolar. Örneğinizde çok sayıda tablo varsa bu değeri artırın.
key_buffer_size 16 MB MyISAM tablo dizinlerini önbelleğe alır. MyISAM tabloları için dizin önbellekleri key_buffer içinde, veri önbellekleri ise işletim sistemi belleğinde depolanır. Tüm RDS örnekleri için 16 MB olarak ayarlanır.
query_cache_size 0 (devre dışı) Sorgu sonuçlarını SQL ifadesi karmasına göre önbelleğe alır. RDS örneklerinde devre dışıdır. Bir tablo değiştirildiğinde önbellek geçersiz kılındığından yazma yoğunluklu iş yükleri için uygun değildir.

Oturuma özel bellek

Paylaşılan belleğin aksine oturum arabellekleri başlangıçta önceden tahsis edilmez. Her parametre değeri, bir sorguya ihtiyaç duyulduğu anda tamamen tahsis edilir. Çok sayıda eşzamanlı bağlantı olduğunda kümülatif tahsis mevcut belleği aşabilir ve OOM hatalarını tetikleyebilir.

Oturum belleği tahsisini kontrol etmek için aşağıdaki sorguyu çalıştırın:

SHOW VARIABLES WHERE Variable_name IN (
  'read_buffer_size',
  'read_rnd_buffer_size',
  'sort_buffer_size',
  'join_buffer_size',
  'binlog_cache_size',
  'tmp_table_size'
);

Örnek çıktı:

+-------------------------+-----------------+
| Variable_name           | Value           |
+-------------------------+-----------------+
| binlog_cache_size       | 262144          |
| join_buffer_size        | 262144          |
| read_buffer_size        | 262144          |
| read_rnd_buffer_size    | 262144          |
| sort_buffer_size        | 262144          |
| tmp_table_size          | 262144          |
+-------------------------+-----------------+

Parametreler

Parametre RDS'deki Varsayılan Değer Konsolda Değiştirilebilir Açıklama
read_buffer_size 256 KB Hayır Sıralı tarama arabelleği. G/Ç'yi azaltmak için fiziksel okumalardan önce taranır.
read_rnd_buffer_size 256 KB Hayır Rastgele tarama arabelleği. Bir dizin taramasından sonra satırlar sıralı düzende okunduğunda kullanılır.
sort_buffer_size 256 KB Hayır ORDER BY ve GROUP BY işlemleri için sıralama arabelleği. Sıralanacak veri bu boyutu aşarsa MySQL diske geçici bir tablo yazar. Linux'ta bu değerin 2 MB üzerine ayarlanması bellek tahsisini malloc() yerine mmap() kullanmaya geçirir ve bu da verimliliği düşürür.
join_buffer_size 256 KB Hayır Birleştirme işlemi arabelleği. ApsaraDB RDS for MySQL yalnızca iç içe döngü birleştirme algoritmasını destekler. Sürücü olmayan tablo, arabellek havuzundaki çakışmayı önlemek için bu arabellekte depolanır.
binlog_cache_size 256 KB Hayır İkili günlük önbelleği. Commit öncesinde işlem günlüklerini depolar; commit sonrasında diskteki ikili günlük dosyasına aktarır.
tmp_table_size 256 KB Evet Bellek içi geçici tablonun maksimum boyutu. Bir sorgu bu limiti aşan bir geçici tablo oluşturursa MySQL bunu diskte bir MyISAM tablosuna dönüştürür. Aşağıdaki hatayı görürseniz bu değeri artırın: [Err] 1114 - The table '/home/mysql/data3081/tmp/#sql_6197_2' is full
Not: Yalnızca tmp_table_size RDS konsolunda değiştirilebilir. Diğer oturum arabelleği parametreleri konsol üzerinden değiştirilemez.