Хранение часто используемых таблиц в MySQL


yuriynik
140

Добрый день.
Мне нужно хранить в ОЗУ сервера большое количество страниц, около 60 тыс. Конкретно, две таблицы на 60 тыс и 8 тыс записей.
При чтении запросов из БД время ответа сервера 400-600 мс. При чтении из ОЗУ всего 60 мс. Поэтому хочу хранить таблицы в ОЗУ как можно дольше.
БД всего 100 Мб. ОЗУ на 2 Гб (VPS).
Как это можно решить?  Каждый день вручную краулить сайт Screaming Frog-om не интересно, надо чтобы работало на автомате.


Aisamiery

yuriynik :
Добрый день.
Мне нужно хранить в ОЗУ сервера большое количество страниц, около 60 тыс. Конкретно, две таблицы на 60 тыс и 8 тыс записей.
При чтении запросов из БД время ответа сервера 400-600 мс. При чтении из ОЗУ всего 60 мс. Поэтому хочу хранить таблицы в ОЗУ как можно дольше.
БД всего 100 Мб. ОЗУ на 2 Гб (VPS).
Как это можно решить?  Каждый день вручную краулить сайт Screaming Frog-om не интересно, надо чтобы работало на автомате.

Скорее всего в ваших таблицах не хватает индексов — рекомендую проставить.

А так есть тип memory перегоняйте данные туда и читайте с неё, ну или можно залить все в другие типы хранилищ, но вам помогут индексы

MySQL :: MySQL 8.0 Reference Manual :: 16.3 The MEMORY Storage Engine

  • dev.mysql.com
Feature Support


yuriynik

Aisamiery #:

Скорее всего в ваших таблицах не хватает индексов — рекомендую проставить.

А так есть тип memory перегоняйте данные туда и читайте с неё, ну или можно залить все в другие типы хранилищ, но вам помогут индексы

Спасибо, подумаю над этим 


artshevtsov

Еще, как вариант, вы можете закешировать результаты повторяющихся тяжелых запросов с помощью Redis или  Memcached in-memory cache.  Часто бывает, что  запрос какой-нибудь менюшки-списка с JOIN +  GROUP BY + ORDER BY портит всю малину. Ну и оптимизировать/упростить сами запросы в мускуль, добавить индексы. Еще можете посмотреть что скажет про вашу конфигурацию утилита mysql-tuner, она может подсказать что надо подкрутить в конфиге. 


LEOnidUKG

Настройте сервер нормально, таблицы InnoDB автоматически полностью загружаются в БД при частом использовании данных.

Но если записи не будет, то тип таблиц MEMORY как выход. Но опять же там нужно настроить сервер, чтобы они туда помещались.

Так же мы не знаем что у вас за таблицы и что за запросы.


yuriynik

Спасибо за советы. Буду пробовать.


yuriynik

Подскажите, почему таблицы memory не оптимизируются? Как это исправить?
http://joxi.ru/zANYMpJFvopyG2


LEOnidUKG

Забудьте про кнопку Оптимизация. НИКОГДА не пользуйтесь ей, если не знаете что это и как проходят там процессы. 

Для Memory явно нечего оптимизировать.


yuriynik

LEOnidUKG #:

Забудьте про кнопку Оптимизация. НИКОГДА не пользуйтесь ей, если не знаете что это и как проходят там процессы. 

Для Memory явно ничего оптимизировать.

Даже так… А я где-то читал оптимизировать таблицы время-от времени полезно. Данные со временем фрагментируются, оптимизация удаляет всё лишнее и ускоряет работу таблицы…


LEOnidUKG

yuriynik #:

Даже так… А я где-то читал оптимизировать таблицы время-от времени полезно. Данные со временем фрагментируются, оптимизация удаляет всё лишнее и ускоряет работу таблицы…

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

Но при этом сайте лежит и если не ДАЙ бог додумается кто-то mysql перезагрузить или весь сервер, могут случиться необратимые последствия.


yuriynik

LEOnidUKG #:

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

Но при этом сайте лежит и если не ДАЙ бог додумается кто-то mysql перезагрузить или весь сервер, могут случиться необратимые последствия.

Спасибо, разберусь подробнее в этом

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *