Этот вопрос связан с другим:
Поможет ли несколько файловых групп ускорить мою базу данных?
Программное обеспечение, которое мы разрабатываем, является аналитическим инструментом, использующим MS SQL Server 2005 для хранения реляционных данных. Первоначальный анализ может быть медленным (поскольку мы обрабатываем миллионы или миллиарды строк данных), но существуют требования к производительности для быстрого вызова предыдущих анализов, поэтому мы «сохраняем» результаты каждого анализа.
Наш нынешний подход заключается в сохранении результатов анализа в виде серии «специфичных для прогона» таблиц, и анализ достаточно сложен, чтобы в результате мы могли получить до 100 таблиц на анализ. Обычно эти таблицы занимают пару сотен МБ на анализ (что мало по сравнению с нашими сотнями ГБ, а иногда и несколькими ТБ исходных данных). Но в целом, дисковое пространство не является проблемой для нас. Каждый набор таблиц специфичен для одного анализа, и во многих случаях это дает нам огромное улучшение производительности по сравнению со ссылкой на исходные данные.
Подход начинает разрушаться, когда мы накапливаем достаточно сохраненных результатов анализа - прежде чем мы добавили более надежные возможности архивирования / очистки, наша тестовая база данных поднялась до нескольких миллионов таблиц. Но для нас не составит большого труда иметь более 100 000 столов, даже в производстве. Microsoft накладывает довольно огромный теоретический предел на размер системных объектов (~ 2 миллиарда), но как только наша база данных вырастет за пределы 100 000 или около того, простые запросы, такие как CREATE TABLE и DROP TABLE, могут значительно замедлиться.
У нас есть возможность обсудить наш подход, но я думаю, что это может быть сложно обойтись без большего контекста, поэтому вместо этого я хочу задать вопрос более широко: если мы вынуждены создавать так много таблиц, что является лучшим подход к управлению ими? Несколько файловых групп? Несколько схем / владельцев? Несколько баз данных?
Еще одно замечание: я не в восторге от идеи «просто бросить аппаратное обеспечение при проблеме» (т. Е. Добавить ОЗУ, мощность процессора, скорость диска). Но мы также не исключаем этого, особенно если (например) кто-то может точно сказать нам, какой эффект будет иметь добавление ОЗУ или использование нескольких файловых групп при управлении большим системным каталогом.