Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Секционирование в MS SQL 2008 R2  [new]
walle93
Member

Откуда:
Сообщений: 4
Добрый день всем форумчанам.
Вопрос в следующем(привожу пример):
Имеется БД с записями о продажах в сети магазинов. Каждую секунду или чаще поступают новые сведения об очередной продаже+фотка(кажется не логично но это пример). В одной такой записи среди прочих полей имеется поле ДатаВремяПродажи типа dstetime, Магазин (varchar) и сумма(money). Фотка пихается в отдельную таблицу с привязкой по IDшнику. За месяц количество записей в таблице может достигать 30 млн и выше. Учитывая, что при запросах и обработке приходится использовать не менее 3 INNERов и выше, что увеличивало время выполнения, решено было ФИЗИЧЕСКИ разбить таблицу. То есть в итоге имели несколько таблиц, в каждой данные за свой месяц, то есть Продажи042013, ПродажиФото042013, Продажи052013, ПродажиФото052013, Продажи062013, ПродажиФото062013. Данные в реалтайме всегда льются в таблицу текущего месяца. Имеем в итоге огромный набор таблиц с постфиксом месцГод.
С такой кучей трудновато оперировать при поиске и при создании отчетов. Решено применять секционирование(по датевремени). Так как сам новичок в этом деле, то решил обратиться к опытным.
Вопросы в следующем:
1) В принципе лучше ли будет секционирование при уже существующем разбиении?
2) Ожидать ли прирост в производительности после осуществления секционирования?
3) Не отразится ли и как секционирование на записи в реалтайме(на входе кстати триггер имеется), UPDATE и SELECT?
4) Есть ли подводные камни на которые стоит сейчас обратить внимание?

Всем заранее спасибо!
5 июн 13, 16:45    [14395883]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL 2008 R2  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а "партишенед вью" не проще будет вам "натянуть" на то, что уже есть?
не обязательно одну, их можно много сделать для разных целей
и ограничений по версиям никаких.. и проще во многих отношениях будет
5 июн 13, 17:10    [14396041]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL 2008 R2  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
walle93,

1) В принципе лучше ли будет секционирование при уже существующем разбиении?

Что под словом "лучше" подразумевается?

2) Ожидать ли прирост в производительности после осуществления секционирования?

Производительность увеличится если каждая секция будет лежать на отдельном диске, например оперативные данные положите на более быстрый диск а исторические на медленный, и тогда операции с оперативными данными будут более производительными.
Как правило чтобы увеличить производительность запросов выборки нужно создать "правильные" индексы и исправить сами запросы, если были криво написаны.

3) Не отразится ли и как секционирование на записи в реалтайме (на входе кстати триггер имеется), UPDATE и SELECT?

Не должно отразится при условии что триггеры написаны правильно. Например они могут у вас и всю таблицу сканировать и тогда будут проблемы...

4) Есть ли подводные камни на которые стоит сейчас обратить внимание?

* секционирование доступно только на Enterprise версии
* перестроение индекса внутри секции в он-лайн не доступно
* возможно вылезут какие-нибудь нюансы с переключением секций
* уверен что много еще чего вылезет...


Вообще ваша база данных уже секционирована, у вас на каждый месяц своя секция. единственное что вам осталось сделать, это объединить все эти таблицы вьюхой (в предыдущем посте вам это уже предложили). + добавить ограничения в таблицы пример: Date >= '2013-01-01' and Date < '2013-02-01'. и проверить что Date входит в ключ кластерного индекса у этих таблиц. Далее используйте эту вьюху в своих отчетах. Если все правильно сделали, через эту вьюху можно и инсертить и апдейтить записи.
5 июн 13, 20:46    [14396888]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL 2008 R2  [new]
walle93
Member

Откуда:
Сообщений: 4
Спасибо за ответы! Возник встречный вопрос, так как опять таки и с View не знаком. Не будет ли она, по идее, жрать оперативку в наглом количестве?
6 июн 13, 08:55    [14397821]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL 2008 R2  [new]
walle93
Member

Откуда:
Сообщений: 4
И еще. Так как у меня таблицы для месяца создаются в ночь на этот новый месяц (например для июня таблица создается в последнюю ночь мая), то не нужно ли будет каждый раз этот самый View корректировать?
6 июн 13, 08:59    [14397833]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL 2008 R2  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
walle93,

Под вьюху оператива не выделяется.
Рассматривайте этот вью как обычный запрос объединяющий ваши таблицы.
6 июн 13, 09:09    [14397870]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL 2008 R2  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
walle93
И еще. Так как у меня таблицы для месяца создаются в ночь на этот новый месяц (например для июня таблица создается в последнюю ночь мая), то не нужно ли будет каждый раз этот самый View корректировать?

Да
6 июн 13, 09:10    [14397878]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL 2008 R2  [new]
walle93
Member

Откуда:
Сообщений: 4
Еще раз спасибо! Буду пробовать!
6 июн 13, 09:35    [14397970]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL 2008 R2  [new]
Crimean
Member

Откуда:
Сообщений: 13147
walle93
так как опять таки и с View не знаком


почитайте внимательно про "updatable partitioned views"
возможно, вам очень понравится
раз есть код, который добавляет таблицы - почему бы ему и не альтерить адекватно представление?
убирая старые секции и добавляя новые?
6 июн 13, 10:58    [14398520]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить