Як оптимізувати використання пам'яті MySQL?


9

МОЯ НАСТРОЙКА ( приклад )

Я запускаю Linux на Amazon High CPU Extra Large EC2 з такими специфікаціями:

  • 7 ГБ пам'яті
  • 20 обчислювальних одиниць EC2 (8 віртуальних ядер з 2,5 обчислювальних одиниць EC2)
  • 1690 ГБ місцевого зберігання
  • 64-розрядна платформа

У мене є дві великі бази даних MySQL, що працюють в системі зберігання даних MyISAM. Один - 2 Гб, а інший - 500 Мб. Я хотів би переконатися, що MySQL використовує стільки оперативної пам’яті, скільки може / потрібно для максимальної швидкості запитів. Я знаю , що є купа MySQL опцій конфігурації пам'яті , як key_buffer_sizeі , MyISAM_sort_buffer_size,але я НЕ знайомий з оптимізацією їх.

ЗАПИТАННЯ

  1. Як перевірити, яку пам’ять MySQL зараз використовує в системі Linux?
  2. Як можна максимально / оптимізувати використання пам'яті MySQL?
  3. Припустимо, що мої запити та схема оптимізовані, які ще зміни слід врахувати?

Ви можете перевірити програму htop.
neworld

Максимізація використання пам’яті не призведе до пам’яті всієї бази даних. Ви повинні мати файлову систему на базі ОЗУ ...

4
Файлова система на основі оперативної пам’яті небезпечна. Якщо збій на сервері всі дані будуть втрачені
neworld

Відповіді:


7

Це важка тема. Тут не можна відповісти, про це написано цілі книги . Я рекомендую зробити ваш розмір innodb_buffer_pool_size досить великим. Якщо ви використовуєте таблиці myisam, перевірте розмір key_buffer_size. Також слід враховувати table_cache та max_connections.

Ось щось, що може вам допомогти:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- основи оптимізації продуктивності / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

Редагувати:

Як зазначає @ drew010, важливо враховувати тип використання, який має DB. Налаштування для великого БД, що читається, сильно відрізняється від важкого запису. Також ви можете розглянути інші стратегії. Як Memcached, nosql баз даних тощо


2
Домовились, вони досить малі бази даних занадто відносно кажучи. Якщо ви очікуєте тонни доступу до читання баз даних, то ви можете розглянути якусь систему кешування, наприклад запам’ятовувану, яку ваша програма може використовувати для зберігання значень із бази даних, щоб зменшити звернення до бази даних. Якщо ви робите в основному вставки, то диск буде дуже важливим фактором. У певній мірі питання залежить від того, якими є ваші випадки використання. Якщо дані не сильно змінюються, кеш запитів mysql повинен багато допомагати і при швидких запитах. Також переконайтесь, що ваші індекси / первинні ключі хороші.
drew010

+1 ти правий брат. Я припускав, що він просить провести базове налаштування, але важливо врахувати використання БД та інші речі. Знову ж таки, я не можу говорити тут, я думаю.
santiago.basulto

1

Якщо вам потрібно бути впевненим, що MySQL використовує всю необхідну йому пам'ять, вам потрібно перейти на InnoDB. Якщо ви не використовуєте FULLTEXTможливості пошуку MySQL , серйозних проблем не виникне.

У випадку з MyISAM використовується декілька кеш-пам'яті, включаючи внутрішні буфери ключів MySQL та системний кеш. Якщо ви хочете досягти найкращої продуктивності, вам потрібно залишити місце для будь-якого кешу, але все-таки я не рекомендую MyISAM для цієї мети, особливо якщо ваші бази даних важкі для запису: MyISAM блокує всю таблицю в режимі запису, тоді як InnoDB фіксує лише зачеплені рядки.

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

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