Это продолжение предыдущего вопроса мой после того, как я определенно выбрал переключение разделов как лучший способ быстро получить данные в сильно проиндексированную таблицу типов фактов, которая должна оставаться доступной для читателей.
Несмотря на то, что это кажется лучшим способом, его недостаточно, чтобы действительно удовлетворить требование, позволяющее нескольким (‹ 5) пользователям выполнять массовую вставку одновременно, индексировать новые данные и отображать их в индексированных представлениях (не обязательно настоящие индексированные представления, просто выбираются те, которые полагаются на индексы).
Идея секционирования заключалась в том, что каждый раздел и поддерево индекса с корнем в разделе можно было параллельно блокировать как доступ только для чтения, копировать в рабочую таблицу, вставлять/обновлять новые данные и перестраивать индексы, а затем переключать обратно в основную таблицу. чтобы читатели не пострадали.
Проблема в единственном рабочем столе. Для каждой параллельной массовой вставки требуется собственная копия с теми же ограничениями, что и для основной таблицы, чтобы можно было переключаться.
До сих пор я столкнулся с несколькими стенами, пытаясь обойти это узкое место:
- Я попытался разделить рабочую таблицу, используя ту же функцию разделения. Это не работает, потому что вы не можете отключить индексы для отдельных разделов, чтобы вставлять их в один при перестроении индекса в другом.
- Создание временной таблицы в качестве рабочей таблицы. Это не работает, потому что, хотя вы можете использовать одни и те же имена индексов, вы не можете легко динамически создавать ограничения и в любом случае не можете их переключать.
- У вас есть фиксированный набор именованных рабочих таблиц? Как я могу выбрать один и работать с ним под псевдонимом, чтобы у меня был только один сохраненный процесс?
- Динамический SQL? Я очень старался не идти по этому пути. Это сложно, как это.
Большая проблема, но есть ли у кого-нибудь идеи, прежде чем я приму узкое место? Sql 2012 поможет? Как с этим справляются правильные хранилища данных?