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

Что такое MySQL "Эффективность ключа"

MySQL Workbench сообщает о значении, называемом "Эффективность ключа" в связи с безопасностью сервера. Что это значит и каковы его последствия?

alt text

Из MySQL.com "Эффективность ключа":

... указание количества key_read_requests, что привело к фактическому key_reads.

Хорошо, так что это значит. Что это говорит мне о том, как я должен настраивать сервер?

4b9b3361

Ответ 1

"Эффективность ключа" - это показатель того, какое значение вы получаете от кэшей индексов, хранящихся в памяти MySQL. Если эффективность ключа высока, то чаще всего MySQL выполняет ключевые поиски из области памяти, что намного быстрее, чем необходимость извлекать соответствующие индексные блоки с диска.

Способ повышения эффективности ключа состоит в том, чтобы посвятить больше вашей системной памяти кешам индексирования MySQL. Как вы это делаете, зависит от используемого вами механизма хранения. Для MyISAM увеличьте значение размера ключа-буфера. Для InnoDB увеличьте значение размера пула innodb-buffer.

Однако, как указывает Майкл Икинс, в операционной системе также хранятся кэши дисков, к которым он недавно обращался. Чем больше памяти, доступной вашей операционной системе, тем больше дисковых блоков она может кэшировать. Кроме того, диски в самих случаях (и в некоторых дисковых контроллерах) также имеют кэши, что также может ускорить получение данных с диска. Иерархия немного похожа на это:

  • fastest - получение индексных данных из кеша индекса MySQL. Стоимость - это несколько операций с памятью.
  • получение индексных данных, хранящихся в кеше файловой системы ОС. Стоимость - системный вызов (для чтения) и некоторые операции с памятью.
  • получение индексных данных, хранящихся в кеше дисковой системы (контроллер и диски). Стоимость - системный вызов (для чтения), связь с дисковым устройством и некоторые операции с памятью.
  • медленнее - получение данных индекса с поверхности диска. Стоимость - это системный вызов, связь с устройством, физическое перемещение диска (перемещение руки + вращение).

На практике разница между 1 и 2 почти незаметна, если ваша система не очень занята. Кроме того, маловероятно (если у вашей системы меньше резервной памяти, чем у вашего контроллера диска), сценарий 3 будет запущен.

Я использовал серверы с таблицами MyISAM с относительно небольшими кэшами индекса (512 МБ), но массивная системная память (64 ГБ), и мне было трудно продемонстрировать ценность увеличения размера кеша индекса. Я думаю, это зависит от того, что еще происходит на вашем сервере. Если все, что вы используете, является базой данных MySQL, вполне вероятно, что кэш ОС будет достаточно эффективным. Тем не менее, если вы запускаете другие задания на одном и том же сервере, и они используют большое количество обращений к памяти/диску, тогда они могут вытеснить ценные кешированные блоки индекса, приводящие к частому удалению диска MySQL.

Интересное упражнение (если у вас есть время) заключается в том, чтобы возиться с вашей системой, чтобы она работала медленнее. Выполняя стандартную рабочую нагрузку на больших таблицах, уменьшайте буферы MySQL до тех пор, пока влияние не станет заметным. Сбросьте кеш файловой системы, перекачивая огромные суммы (больше, чем ОЗУ) нерелевантных данных через вашу файловую систему (cat large-file > /dev/null). Наблюдайте за iostat по мере запуска ваших запросов.

"Эффективность ключа" НЕ является показателем того, насколько хороши ваши ключи. Хорошо продуманные клавиши будут иметь гораздо большее влияние на производительность, чем высокая "Эффективность ключа" . MySQL, к сожалению, не может вам помочь.

Ответ 2

Key_read_requests - это количество запросов на чтение блока ключей из кеша. В то время как key_reads - количество физических чтений блока ключей с диска. Таким образом, эти 2 переменные может увеличиваться независимо. (http://bugs.mysql.com/bug.php?id=28384)

Это все еще так же ясно, как и грязь.

На следующий бит объяснения:

Частично действительное использование Key_reads

Существует частично обоснованная причина изучите Key_reads, считая, что мы заботиться о количестве физических что происходит, потому что мы знаем, что диски очень медленные относительно других частей компьютера. И вот где я возвращаюсь к тому, что я называл "в основном фактический" выше, потому что На самом деле, key_reads не являются физическими диск читает вообще. Если запрашиваемая блок данных не находится в системный кеш, тогда Key_read - это диск читается - но если он кэшируется, то это просто системный вызов. Однако, пусть сделают нашу первую непродуманную Предположение:

Трудное доказательство № 1: A Key_read может соответствовать возможно, читается физический диск. Если мы примем это предположение как истинное, то то, что Другая причина может быть у нас для ухода о Key_reads? Это предположение приводит "кэш-промах" значительно медленнее, чем попадание в кеш ", что делает смысл. Если бы было так же быстро сделать Key_read как Key_read_request, что использование буфера ключей в любом случае? Пусть доверяют создателям MyISAM на этом один, потому что они разработали кеш-хит быть быстрее, чем промах. ( http://planet.mysql.com/entry/?id=23679)