О, Господи, я думаю, что видел их всех. Чаще всего это попытка исправить проблемы с производительностью кем-то, кто слишком ленив, чтобы выяснить причину этих проблем с производительностью или даже выяснить, действительно ли существует проблема с производительностью. Во многих из этих случаев мне интересно, не тот ли это случай, когда человек хочет попробовать какую-то особую технологию и отчаянно ищет гвоздь, который подходит для их нового блестящего молотка.
Вот недавний пример:
Архитектор данных приходит ко мне с тщательно продуманным предложением по вертикальному разделению таблицы ключей в довольно большом и сложном приложении. Он хочет знать, какой тип усилий по разработке понадобится для адаптации к изменениям. Разговор шел так:
Я: Почему вы рассматриваете это? Какую проблему вы пытаетесь решить?
Он: Таблица X слишком широка, мы разбиваем ее по соображениям производительности.
Я: Что заставляет вас думать, что оно слишком широкое?
Он: Консультант сказал, что в одной таблице слишком много столбцов.
Я: И это влияет на производительность?
Ему: Да, пользователи сообщают о периодических замедлениях в модуле XYZ приложения.
Меня: Откуда вы знаете, что ширина таблицы является источником проблемы?
Ему: Это таблица ключей, используемая модулем XYZ, и она похожа на 200 столбцов. Это должно быть проблемой.
Я (Объяснение): Но модуль XYZ, в частности, использует большинство столбцов в этой таблице, и столбцы, которые он использует, непредсказуемы, поскольку пользователь настраивает приложение для отображения данных, которые он хочет отобразить из этой таблицы. Вполне вероятно, что в 95% случаев мы все равно будем объединять все столы вместе, что ухудшит производительность.
Ему: Консультант сказал, что он слишком широкий, и нам нужно его изменить.
Меня: Кто этот консультант? Я не знал, что мы наняли консультанта, и они вообще не разговаривали с командой разработчиков.
Ему: Ну, мы еще не наняли их. Это часть предложения, которое они предложили, но они настаивали на том, что нам нужно реорганизовать эту базу данных.
Меня: Ага. Поэтому консультант, который продает услуги по перепроектированию базы данных, считает, что нам нужно перепроектировать базу данных ....
Разговор продолжался и продолжался вот так. После этого я еще раз взглянул на данную таблицу и определил, что ее можно сузить с помощью некоторой простой нормализации без необходимости использования экзотических стратегий разбиения. Это, конечно, оказалось спорным вопросом, как только я исследовал проблемы с производительностью (ранее не сообщавшиеся) и выявил их по двум факторам:
- Отсутствуют индексы по нескольким ключевым столбцам.
- Несколько мошеннических аналитиков данных, которые периодически блокировали таблицы ключей (включая «слишком широкую»), обращаясь непосредственно к производственной базе данных с помощью MSAccess.
Конечно, архитектор по-прежнему настаивает на вертикальном разделении стола, опираясь на «слишком широкую» мета-проблему. Он даже поддержал свое дело, получив предложение от другого консультанта по базам данных, который смог определить, что нам нужны серьезные изменения в базе данных, не глядя на приложение и не проводя анализ производительности.