Чи може MySQL ефективно скористатися 64 Гб оперативної пам’яті?


22

Ми зіткнулися з проблемою, коли запит на таблицю, що містить приблизно 50 мільйонів рядків і розмір індексу в 4 ГБ (розмір таблиці близько 6 ГБ), призводить до того, що сервер бази даних замінює пам'ять і різко сповільнюється. Я впевнений, що це стосується перевищення розміру темп-таблиці та її заміни на диск.

Якщо я модернізував свій сервер баз даних з 32 ГБ оперативної пам’яті до 64 ГБ оперативної пам’яті, мені цікаво, чи зможе база даних MySQL повністю скористатися цією додатковою пам’яттю, а не замінюватись. Я пережив декілька змінних (наприклад, KEY_BUFFER_SIZE тощо), і вони, здається, підтримують значення значень понад 64 ГБ. Однак документація MySQL говорить, що tmp_table_size максимум на 4 Гб.

То чи варто було б оновити пам'ять? Чи виграла б проблема "велика таблиця запитів" від цього, чи не допоможе це через обмеження в 4 Гб? Я знаю, що є потенційно інші рішення, як-от реструктуризація таблиці, щоб її розподілити різними способами тощо ... але, не змінюючи нічого про таблицю, допоможе додаткова пам'ять?

Також, взагалі, чи є інші змінні, пов'язані з пам'яттю, якими MySQL не міг би скористатися при переході від 32 до 64 ГБ оперативної пам’яті?

Ми використовуємо 64-бітовий Linux (Ubuntu) як наш сервер баз даних.

Спасибі, Гален

Відповіді:


5

Якщо ви використовуєте InnoDB, найважливішою змінною є встановлення innodb_buffer_pool_size. Я встановив би це приблизно 80% вашої системної пам'яті. Як тільки кеш прогріється після деякого використання, ваші найактивніші дані (робочий набір даних) залишаться в пам'яті (innodb_buffer_pool_size), і ваші операції з ним повинні бути дуже швидкими. Маючи 64 Гб оперативної пам’яті, ви точно можете помістити багато там. Пам’ять завжди хороша покупка для серверів БД.


11

Так - якщо ви використовуєте InnoDB і маєте велике навантаження для завантаження, ви можете абсолютно скористатися великою кількістю оперативної пам’яті [при умові, що ваш набір даних поміститься в пам’яті - ваш сервер швидко палає].

Я використовую MySQL зі сховищем InnoDB на 8-16 ГБ серверах з робочим набором, що вміщується в пам'яті.


Те саме тут - ми запускаємо InnoDB на 64 ГБ коробках, і це чудово.
Джеймс

9

Можливо, варто було б докласти трохи додаткового часу та зусиль на дослідження того, що викликає обмін системою, перш ніж витрачати гроші на пам'ять?

32 Гб пам’яті залишає багато доступної пам’яті навіть після завантаження всієї таблиці, індексу та максимальної темп_таблі в пам'ять. Швидкий пошук показав ці два документації, які можуть бути актуальними:


0

Якщо ви думаєте, що це пов'язано з тим, що створена дуже велика тимчасова таблиця, ви можете розглянути шляхи покращення запиту, щоб уникнути тимчасових таблиць.

Ви можете розмістити на Stackoverflow публікацію, що містить схему, запит, план пояснення та деякі деталі для проблеми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.