Налаштування (та розуміння) table_cache у mySQL


18

Я запустив відмінний сценарій настройки продуктивності MySQL і почав працювати над пропозиціями. Одна, на яку я наткнувся, була

TABLE CACHE
Поточне значення table_cache = 4096 таблиць У вас є 1073 таблиці. У вас 3900 відкритих столів. Поточна частота звернень table_cache становить 2%, тоді як 95% вашого кеша таблиці використовується. Ви, ймовірно, повинні збільшити таблицю_cache

Я почав читати на table_cache, але виявив, що документація на MySQL зовсім не вистачає. Вони кажуть збільшити table_cache"якщо у вас є пам'ять". На жаль, table_cacheзмінна визначається як "Кількість відкритих таблиць для всіх потоків".

Як зміниться пам'ять, яку використовує MySQL, якщо я збільшить цю змінну? Що таке хороша цінність, щоб встановити його?

Відповіді:


16

З документації на MySQL

Наприклад, для 200 одночасних запущених з'єднань у вас повинен бути розмір кешу таблиць не менше 200 × N, де N - максимальна кількість таблиць на приєднання в будь-якому із запитів, які ви виконуєте. Ви також повинні залишити кілька додаткових дескрипторів файлів для тимчасових таблиць і файлів.

Отже, якщо у вашій програмі у вас є запит, який поєднує 4 таблиці, і ви хочете мати можливість обробляти 200 одночасних з'єднань, виходячи з цього твердження, у вас повинен бути таблиця_cache щонайменше 800.

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


Дякуємо за вказівник. Мені трохи страшно збільшити номер таблиці_cache, не знаючи, як зміниться використання оперативної пам’яті. Оперативна пам’ять машини вже заповнена.
jotango

Ви впевнені, що пам'ять фактично використана або просто пам'ять була зайнята буферами / кешем? Запустіть "free -m" і подивіться на другий рядок (- / + буфери / кеш), це більш точне представлення використання вашої пам'яті в mb. Дивіться відповіді на сервері defaultfault.com/questions/73189/… та serverfault.com/questions/9442/…
ManiacZX

Так, це дійсно використання пам'яті. Вчора він обмінявся, що насправді погано для виробництва db. Сьогодні я замовив оновлення оперативної пам’яті від HP.
Джотанго

для тих, хто зараз приходить до цього, ця відповідь не є точною для mysql 5.1+. тепер це стосується, table_open_cacheколи ви дивитесь на документи. Дивіться відповідь @MarkRs, дивлячись наtable_cache
Джейсон

3

Ви повинні слідкувати за змінною Opened_Tables і бачити, як швидко вона збільшується. Якщо це значно швидше, ніж ви створюєте нові таблиці (включаючи тимчасові), то кеш таблиці може бути занадто малим.

Table_Cache завжди повинен бути значно більшим, ніж загальна кількість таблиць на сервері. Інакше він буде тримати відкриття та закриття столів.

Я не можу зрозуміти, як ви могли отримати 2% швидкість кешування, якщо тільки ви не вимірювали час відразу після перезавантаження сервера або багато використовували FLUSH TABLES (стосовно кількості запитів). Зазвичай частота показів кеш-таблиць повинна становити 99,9%, інакше продуктивність буде недосяжною.

Не робіть ПЛАТИШНІ ТАБЛИЦІ, якщо зможете цього уникнути, це видуває кеш.

Відкриття столів коштує дорого, оскільки йому потрібно прочитати файл FRM. У MyISAM це значно гірше (ніж в інших двигунах), оскільки, коли він закриває таблицю, він також викидає всі блоки в кеш-пам'ять ключів, що надійшли з його індексів. Тож закриття таблиці скидає свої індекси з кеш-пам'яті ключа == не добре! Інші двигуни зберігають кешовані блоки, але все ж потрібно перечитати метадані та виділити деякі структури.

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