LINUX.ORG.RU
ФорумAdmin

Как бы б одну InnoDB базу MySQL всё время держать закешированной в памяти?

 , ,


0

4

Есть весьма нагруженная машина с 32Гб оперативки. Под MySQL удаётся выделить не более 11Гб оперативки. Иначе совсем не остаётся места под кеши и буфера и всё начинает чудовищно тормозить.

Есть MySQL базы суммарным объёмом 36Гб. Основная часть используется редко, поэтому выделенные 11Гб вполне справляются. Да, некоторые крупные запросы тормозят, но это не критично.

Критично другое. Есть таблица на 1Гб размером. Когда к ней обращаются, результат нужен мгновенный. Но обращения к ней по всему объёму бывают редко, поэтому она вытесняется из кешей и оно при обращении часто тормозит.

Можно ли как-то придумать, чтобы эта таблица всегда была в кеше MySQL?

Вариант, который приходит в лоб — это часто сканировать эту таблицу, скажем, регулярно читая её записи по случайному индексу. Но как-то криво :)

Есть иные способы?

★★★★★
Ответ на: комментарий от KRoN73

Выделить таблицу в отдельную базу данных, кинуть её на виртуальную ФС в образе, скопировать образ в tmpfs и сделать из этих двух образов RAID1? :)

intelfx ★★★★★
()
Ответ на: комментарий от KRoN73

У mdadm есть параметр --write-mostly:

-W, --write-mostly

subsequent devices listed in a --build, --create, or --add command will be flagged as 'write-mostly'. This is valid for RAID1 only and means that the 'md' driver will avoid reading from these devices if at all possible. This can be useful if mirroring over a slow link.

Возможно, сработает, если пометить образ на диске как write-mostly. Но да, это ад, и наверняка есть более хорошее решение.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от DoTheGNU

О, а это чудесная штука. Стать демоном и потом mlockall — забавное решение.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)

Тормоза могут быть изза того что большой индекс на диске Тут могут помочь именованные кеши http://sqlinfo.ru/articles/info/3.html

И есть еще такая штука - горячий и холодный кеш, они как раз управляют вытеснением таблиц из памяти

ism ★★★
()
Ответ на: комментарий от intelfx

И каким местом оно сюда применимо?

Я не он, но. Применимо как пример беспощадной в своей бессмысленности оптимизации, проистекающей от избытка умений и непонимания происходящего, очевидно же.

Jameson ★★★★★
()

Перенести эту таблицу в отдельный экземпляр mysql, работающий в отдельной cgroup, у которой всегда достаточно памяти для оптимальной работы этой таблицы

Ну или не маяться дурью и перенести данные с критичным временем доступа в redis с периодической записью на диск

annulen ★★★★★
()
Ответ на: комментарий от annulen

Перенести эту таблицу в отдельный экземпляр mysql
и перенести данные с критичным временем доступа в redis

Не катит. Часто нужны JOIN'ы с другими таблицами.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

В таком случае у тебя все таблицы критичны к скорости доступа, а не только одна на гиг. Остается только посоветовать обмазаться индексами для минимизации обращений непосредственно к строкам, ну или поменять базу на более умную, которая сумеет должным образаом соптимизировать джойны в этом направлении

annulen ★★★★★
()
Ответ на: комментарий от annulen

Нет. Обычно то, что использует join-ы оперирует только с относительно свежими записями или не критично к производительности. Проблема в «чистых» запросах, но использующих полное сканирование таблицы.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от pi11

Удваиваю за копию таблицы в памяти. Обмазаться тригерами на запись/обновление и всё нормально будет.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от blind_oracle

Если оно тормозит нередко в рамках одной базы, то с чего ему в итоге быстрее работать в federated-варианте с разносом баз? :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Ну оно тормозит у тебя из-за того что таблицу из памяти вытесняет? А если сделаешь отдельный инстанс с гарантированным объемом памяти только для этой таблицы, то она будет всегда в пейдж кэше иннодб. За скорость федерейтед не скажу, не пробовал.

blind_oracle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.