Всё стало медленным
Разбираем, какие запросы съедают время: смотрим план выполнения, ищем недостающие индексы и лишние, переписываем то, что нельзя ускорить индексом. Обычно выясняется, что дело в двух-трёх запросах, а не в «слабом сервере».
Услуга
Отдельная работа, а не приложение к сайту. Приходят обычно с одной из трёх бед: всё тормозит, данные лежат в чём-то доисторическом, или копий нет и это выяснилось не вовремя.
Задачи
Разбираем, какие запросы съедают время: смотрим план выполнения, ищем недостающие индексы и лишние, переписываем то, что нельзя ускорить индексом. Обычно выясняется, что дело в двух-трёх запросах, а не в «слабом сервере».
Access, самописные решения, устаревшие версии MySQL, выгрузки в таблицах. Переносим со сверкой: количество записей, суммы, контрольные выборки — чтобы было доказано, что ничего не потерялось.
Схема под задачу: сущности, связи, ограничения целостности, индексы под реальные запросы. Ограничения ставятся на уровне базы, а не только в коде, — тогда неверные данные физически не смогут туда попасть.
Настраиваем ежедневные копии и проверку восстановления. Проверка — обязательная часть: копия, которую ни разу не разворачивали, копией не является.
Смотрим схему, индексы, размеры, права доступа, наличие копий и то, как база защищена снаружи. Результат — письменный отчёт с приоритетами.
Если в базе есть данные людей — проверяем, где она физически размещена, кто имеет доступ, ведётся ли журнал и есть ли сроки хранения. Для граждан России база должна находиться в России, и это требование закона, а не рекомендация.
Стек
MariaDB и MySQL — основные. Проектирование, репликация, настройка параметров под нагрузку, разбор медленных запросов, обновление версий.
SQLite — там, где отдельный сервер базы избыточен: небольшие сервисы, встроенные решения, инструменты для внутреннего пользования.
Если у Вас что-то другое — скажите, посмотрим. Отказываемся честно и сразу, если задача выходит за пределы того, за что можем отвечать.
Деньги
Работы с базами считаются по времени, а не проектом: заранее неизвестно, найдётся причина за час или за день.
3 000 ₽ за час. Время фиксируется по факту, отчёт — что делали и сколько заняло.
Сначала смотрим на задачу и называем вилку часов. Если по ходу становится ясно, что вилка не выдержана, — предупреждаем до того, как её превысить, а не после.
От 5 000 ₽ — столько же, сколько любая другая небольшая работа. Ниже этой суммы браться невыгодно обеим сторонам.
Вопросы
Чаще всего дело не в объёме, а в отсутствии нужного индекса или в запросе, который заставляет базу перебирать всю таблицу. Такое видно по плану выполнения запроса, и лечится обычно быстро.
Сверкой: сравниваем количество записей в каждой таблице, контрольные суммы по ключевым полям и делаем выборочную проверку записей вручную. Результат сверки отдаём вместе с работой.
Да, это частая задача. Сложность обычно не в самом переносе, а в том, что за годы в таких файлах накапливаются несогласованные данные: дубли, разные написания одного и того же, пустые обязательные поля. Это разбирается отдельно и обсуждается до начала.
Да, по доступам, которые Вы выдаёте, и только в оговорённом объёме. Перед любыми изменениями делается копия, чтобы был путь назад.
Настроить их — первое, что мы сделаем, до всех остальных работ. Оптимизировать базу, которую нельзя восстановить, — плохая идея.
География
Мы в Сургуте, но к базе подключаемся по защищённому каналу, а не выездом — расположение подрядчика здесь не значит ничего. Значит другое: перед любыми изменениями делается копия, а работы идут в согласованное окно, чтобы не задеть рабочий день. Работаем по всей России.
Достаточно симптомов: что тормозит, где лежат данные сейчас, чего боитесь потерять.