Хранение часто используемых таблиц в 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 не будет опубликован. Обязательные поля помечены *