Доброго времени суток коллеги.
Приходит мне сегодня проект -
очень маленькая БД:
9000+ таблиц весом под
300 Gb.
Внутри там видно "наслоение" минимум трех поколений разработчиков:
- Начинали, видимо, правильно, видны внешние ключи, индексы, нет избыточности и т.д. Собственно 3 нормальная форма. Все названия таблиц и полей на корректном английском
- Далее, по всей видимости, поддержка ушла другой команде, которая или не смогла или не захотела разбираться с тем что там было и пошли разного рода "интересные решения": несвязные ни с чем таблицы живущие какой-то своей жизнью, поля с json-строками, какой-то кэш(сильно похоже на содержимое *.tmp-файлов от WP'шного SuperCache) откуда-то там приходит... Названия таблиц и полей идет уже на транслите.
- После этого, по всей видимости, базу начали поддерживать 1С-программисты, потому что названия полей и таблиц стали идти на русском, у базы появилась какая-то своя собственная "нормальная" форма, при которой в ее полях лежат кракозябры, скриптом потом приводящиеся в читабельный русский текст...
Какое количество программ/скриптов/клиентов и т.п. использует эту БД вопрос вообще тяжелый... Как минимум 6, но точно можно узнать, только вырубив сервер с ней часов в 11 утра и посчитать количество гневных звонков в следующие 30 минут... Надеюсь, все понимают что это не вариант.
Сказать что все это дело сейчас жутко тормозит - не сказать ничего. Работает сие на Dell Power Edge, модель не назову, но на материнской плате два слота с Intel Xeon 2.4 GHz и 48 Gb ОЗУ. В общем, ресурсов хватает, как я думаю.
Задача, поставленная передо мной - сделать так, чтобы это работало шустрее. Решить проблему в лоб - купить еще один сервер и настроить репликацию между ними, компания себе позволить не может. Следовательно, нужно сего монстра каким-то образом оптимизировать...
Поскольку такое я вижу впервые, то даже не представляю с какой стороны здесь можно подступиться, чтобы начать разбирать сие произведение предыдущих поколений.
Собственно прошу Вас, подскажите пожалуйста, с чего вообще начать, по какой фразе гуглить, в каком направлении копать?
P.S.: префиксы есть у 500 таблиц максимум, видимо от разработчиков первого поколения. Эту часть я уже вынес в отдельную БД
P.S. 2: представлений, триггеров и процедур в БД нет
P.S. 3: СУБД MySQL, если это играет какое-то значение. Привязки именно к ней нет, можно сменить при необходимости