Подтвердить что ты не робот

Как выяснить, подходит ли индекс mysql целиком в памяти

Есть ли способ определить, подходит ли индекс mysql целиком в доступной памяти? Если да, то как бы я:

  • Определить размер индексов mysql
  • Определить доступную память для приложения
  • Определите, соответствуют ли индексы целиком в памяти
4b9b3361

Ответ 1

Зависит от механизма хранения

MyISAM (страницы индексов кэшей из файлов .MYI)

SELECT FLOOR(SUM(index_length)/POWER(1024,2)) IndexSizesMB
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','performance_schema','mysql');

Вычтите из key_buffer_size. Если ответ > 0, то Да

InnoDB (данные кэша и индексы)

SELECT FLOOR(SUM(data_length+index_length)/POWER(1024,2)) InnoDBSizeMB
FROM information_schema.tables WHERE engine='InnoDB';

Вычтите из innodb_buffer_pool_size. Если ответ > 0, то Да

Я написал об этом в DBA StackExchange

На выделенном сервере БД убедитесь, что InnoDBSizeMB+IndexSizesMB не превышает 75% ОЗУ.

Ответ 2

Чтобы найти память, доступную для MySQL, просмотрите my.cnf, вероятно, расположенный по адресу: /etc/mysql/my.cnf

key_buffer_size = 264M

Чтобы найти размер индексов для таблицы: SHOW TABLE status FROM [DBNAME]