kumaxim
@kumaxim
Web-программист

Как разобраться в огромной БД?

Доброго времени суток коллеги.
Приходит мне сегодня проект - очень маленькая БД: 9000+ таблиц весом под 300 Gb.

Внутри там видно "наслоение" минимум трех поколений разработчиков:
  1. Начинали, видимо, правильно, видны внешние ключи, индексы, нет избыточности и т.д. Собственно 3 нормальная форма. Все названия таблиц и полей на корректном английском
  2. Далее, по всей видимости, поддержка ушла другой команде, которая или не смогла или не захотела разбираться с тем что там было и пошли разного рода "интересные решения": несвязные ни с чем таблицы живущие какой-то своей жизнью, поля с json-строками, какой-то кэш(сильно похоже на содержимое *.tmp-файлов от WP'шного SuperCache) откуда-то там приходит... Названия таблиц и полей идет уже на транслите.
  3. После этого, по всей видимости, базу начали поддерживать 1С-программисты, потому что названия полей и таблиц стали идти на русском, у базы появилась какая-то своя собственная "нормальная" форма, при которой в ее полях лежат кракозябры, скриптом потом приводящиеся в читабельный русский текст...


Какое количество программ/скриптов/клиентов и т.п. использует эту БД вопрос вообще тяжелый... Как минимум 6, но точно можно узнать, только вырубив сервер с ней часов в 11 утра и посчитать количество гневных звонков в следующие 30 минут... Надеюсь, все понимают что это не вариант.

Сказать что все это дело сейчас жутко тормозит - не сказать ничего. Работает сие на Dell Power Edge, модель не назову, но на материнской плате два слота с Intel Xeon 2.4 GHz и 48 Gb ОЗУ. В общем, ресурсов хватает, как я думаю.

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

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

Собственно прошу Вас, подскажите пожалуйста, с чего вообще начать, по какой фразе гуглить, в каком направлении копать?

P.S.: префиксы есть у 500 таблиц максимум, видимо от разработчиков первого поколения. Эту часть я уже вынес в отдельную БД
P.S. 2: представлений, триггеров и процедур в БД нет
P.S. 3: СУБД MySQL, если это играет какое-то значение. Привязки именно к ней нет, можно сменить при необходимости
  • Вопрос задан
  • 596 просмотров
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
300 гб не очень маленькая, но и совсем не большая база. Вам нужно бы снять статистику по чтению/записи, посмотреть самые тяжелые запросы (такой функционал средствами mysql можно получить habrahabr.ru/post/31072/).
Выяснить чего именно не хватает - проца, оперативки, диска на запись, диска на чтение?
От этого уже и танцевать. может просто парочку ssd в рейд и хватит?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы