innodb_buffer_pool_size
InnoDB Buffer Pool
innodb_buffer_pool_size este parametrul global MySQL care controlează câtă RAM este rezervată pentru Buffer Pool-ul InnoDB — structura din memorie care păstrează în cache paginile de date și indecși pentru a reduce accesele la disc. Este parametrul cu cel mai mare impact asupra performanței unui server MySQL dedicat.
Cum funcționează #
InnoDB gestionează Buffer Pool-ul ca un set de pagini de 16 KB (implicit). Când o interogare accesează un rând, InnoDB încarcă pagina corespunzătoare în Buffer Pool; citirile ulterioare pe aceeași pagină sunt servite din RAM fără a accesa discul. Paginile modificate (dirty pages) sunt scrise pe disc asincron de thread-uri de flushing care rulează în fundal.
Valoarea se configurează în my.cnf sau my.ini:
[mysqld]
innodb_buffer_pool_size = 12G
Pe servere cu RAM ≥ 1 GB, MySQL permite și reconfigurarea dinamică la runtime:
SET GLOBAL innodb_buffer_pool_size = 12884901888;
Dimensionare și context operațional #
Pe servere dedicate MySQL, regula empirică consacrată este 70-80% din RAM-ul disponibil. Lăsarea a mai puțin de 20% liber pune presiune pe sistemul de operare și, în cazurile cele mai grave, declanșează utilizarea swap-ului — cu o degradare drastică a performanței.
Într-un cluster InnoDB cu 3 noduri, fiecare nod menține propriul Buffer Pool independent. Supradimensionarea pe mașini unde RAM-ul este partajat cu alte procese (agenți de monitorizare, servere binlog etc.) este o cauză frecventă de saturare a swap-ului.
Monitorizarea Buffer Pool hit rate este primul indicator de urmărit:
SELECT
(1 - (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests)) * 100
AS hit_rate_pct
FROM information_schema.GLOBAL_STATUS
WHERE Variable_name IN ('Innodb_buffer_pool_reads','Innodb_buffer_pool_read_requests');
Un hit rate sub 95% pe sarcini OLTP indică un Buffer Pool subdimensionat.