Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как перенести старые данные базы в отдельную файловую группу?  [new]
Traygod
Member

Откуда:
Сообщений: 82
Добрый день, уважаемые форумчане!

Столкнулся с ситуацией, что в связи с нестандартной конфой, программисты не берутся за свертку базы 1с. Появилась мысль просто отцепить данные в отдельную файловую группу, т.е. разбить базу на 2 файловые группы - PRIMARY и SECONDARY, где SECONDARY все данные до 2016-го года. Для чего? База 400 гигов, данные от царя гороха, к данным до 2016-го года обращаются редко, а массив данных сумасшедший. Спецы подскажите, кто-нибудь сталкивался с таким опытом? Заранее спасибо.
6 май 17, 14:19    [20462471]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Rankatan
Member

Откуда:
Сообщений: 250
А чем вам новая файловая группа поможет? Вам похоже нужно вторую БД создавать, в которой содержать данные до 2016.
6 май 17, 15:17    [20462496]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Traygod
Member

Откуда:
Сообщений: 82
Rankatan
А чем вам новая файловая группа поможет? Вам похоже нужно вторую БД создавать, в которой содержать данные до 2016.


Основной смысл разбиения данных в том, чтобы можно было перенести вторичную файловую группу на отдельный диск. Отдельная база - это не удобно, так как она будет выделяться неким архивом и нужно держать дополнительные ресурсы сервера для дополнительных запусков 1с и т.д., а тут можно работать с одной базой. Вопрос в том есть ли способ выделить данные до 01.01.2016 в отдельную группу?
6 май 17, 15:26    [20462505]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Traygod
Rankatan
А чем вам новая файловая группа поможет? Вам похоже нужно вторую БД создавать, в которой содержать данные до 2016.


Основной смысл разбиения данных в том, чтобы можно было перенести вторичную файловую группу на отдельный диск. Отдельная база - это не удобно, так как она будет выделяться неким архивом и нужно держать дополнительные ресурсы сервера для дополнительных запусков 1с и т.д., а тут можно работать с одной базой. Вопрос в том есть ли способ выделить данные до 01.01.2016 в отдельную группу?


В теории возможно, таблица секционируется и и можно сделать, чтобы диапазон до 2016 будет лежать в одной ФГ, диапазон после 2016 в другой ФГ
Но такое нужно делать для всех таблиц и как вы там будете отделять данные до 2016 и после под вопросом.

Это только для enterprice. Плюс нужно еще проверять, установятся ли обновления если таблица секционирована

CREATE PARTITION FUNCTION pfTableRange (datetime)
	AS RANGE LEFT FOR  VALUES ('20160101')
GO
CREATE PARTITION SCHEME psTable
	AS PARTITION pfTableRange 
	TO (PRIMARY, SECONDARY);	-- это имена файловых групп в которых будут лежать выбранные диапазоны
GO

ит.д.
6 май 17, 15:37    [20462517]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Traygod
Member

Откуда:
Сообщений: 82
Rankatan
Traygod
пропущено...


Основной смысл разбиения данных в том, чтобы можно было перенести вторичную файловую группу на отдельный диск. Отдельная база - это не удобно, так как она будет выделяться неким архивом и нужно держать дополнительные ресурсы сервера для дополнительных запусков 1с и т.д., а тут можно работать с одной базой. Вопрос в том есть ли способ выделить данные до 01.01.2016 в отдельную группу?


В теории возможно, таблица секционируется и и можно сделать, чтобы диапазон до 2016 будет лежать в одной ФГ, диапазон после 2016 в другой ФГ
Но такое нужно делать для всех таблиц и как вы там будете отделять данные до 2016 и после под вопросом.

Это только для enterprice. Плюс нужно еще проверять, установятся ли обновления если таблица секционирована

CREATE PARTITION FUNCTION pfTableRange (datetime)
	AS RANGE LEFT FOR  VALUES ('20160101')
GO
CREATE PARTITION SCHEME psTable
	AS PARTITION pfTableRange 
	TO (PRIMARY, SECONDARY);	-- это имена файловых групп в которых будут лежать выбранные диапазоны
GO

ит.д.


Я слабоват в скуле, но выдало ошибку...

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'PRIMARY'.

При том глянул в скуле - версия сервака 2008 enterprise...

Чё-то не вкуриваю.
6 май 17, 16:08    [20462546]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30735
Traygod
Чё-то не вкуриваю.
BOL
When you specify the primary filegroup in file_group_name [ 1 , ...n], PRIMARY must be delimited, as in [PRIMARY ], because it is a keyword.
7 май 17, 01:42    [20463379]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Traygod
Member

Откуда:
Сообщений: 82
alexeyvg
Traygod
Чё-то не вкуриваю.
BOL
When you specify the primary filegroup in file_group_name [ 1 , ...n], PRIMARY must be delimited, as in [PRIMARY ], because it is a keyword.


Ничего не понятно. Разграничить как, можете подсказать?
7 май 17, 11:59    [20463659]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
o-o
Guest
Traygod
alexeyvg
пропущено...
пропущено...


Ничего не понятно. Разграничить как, можете подсказать?

кого граничим?
PRIMARY надо писать в квадратных скобках, вот так: [PRIMARY]
8 май 17, 09:45    [20464796]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 742
Rankatan,
Зачем вы начинаете советовать человеку усложненную схему - Enterprise Edition, схемы-функции - смысл из пушки по воробьям стрелять? Кто потом это поддерживать будет, зачем оно в принципе так новорочено все?
Все, что нужно человеку - это:
- создать новую файловую группу
- Создать один/несколько файлов в этой файловой группе
- пересоздать кластерный индекс у таблиц (а так же некластерные, дабы заалайнить) в новой файловой группе,
выбрав в студии в пункте меню - скрипт объекта-кластерного индекса и указав вручную, где именно это создавать - не в [PRIMARY] а в[SECONDARY], указав перегруженную версию вызова - WITH DROP_EXISTING = ON

Для некластерных таблиц-куч - есть воркароунд - можно времено создать кластерный индекс в новой ФГ, а затем удалить его.
Или вариант 2 - заскриптовать данные в таблице, заскриптовать создание самой таблицы в новой ФГ, затем во вновь созданную таблицу залить заскриптованные данные, скорее всего через sqlcmd, так как файл будет огромным и студия его не сьест
8 май 17, 11:51    [20464940]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Rankatan
Member

Откуда:
Сообщений: 250
PsyMisha
Rankatan,
Зачем вы начинаете советовать человеку усложненную схему - Enterprise Edition, схемы-функции - смысл из пушки по воробьям стрелять? Кто потом это поддерживать будет, зачем оно в принципе так новорочено все?
Все, что нужно человеку - это:
- создать новую файловую группу
- Создать один/несколько файлов в этой файловой группе
- пересоздать кластерный индекс у таблиц (а так же некластерные, дабы заалайнить) в новой файловой группе,
выбрав в студии в пункте меню - скрипт объекта-кластерного индекса и указав вручную, где именно это создавать - не в [PRIMARY] а в[SECONDARY], указав перегруженную версию вызова - WITH DROP_EXISTING = ON

Для некластерных таблиц-куч - есть воркароунд - можно времено создать кластерный индекс в новой ФГ, а затем удалить его.
Или вариант 2 - заскриптовать данные в таблице, заскриптовать создание самой таблицы в новой ФГ, затем во вновь созданную таблицу залить заскриптованные данные, скорее всего через sqlcmd, так как файл будет огромным и студия его не сьест


И как это будет работать до 2016 года и после?
8 май 17, 12:11    [20464981]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
o-o
Guest
PsyMisha
Rankatan,
Зачем вы начинаете советовать человеку усложненную схему - Enterprise Edition, схемы-функции

он ему советует, как организовать то, что ТС попросил
и хотел он данные до 2016 на другой диск сложить,
а 2017 оставить там, где есть.
вашим же способом он вообще все перенесет, таблицу целиком.
8 май 17, 12:13    [20464983]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Traygod
Rankatan
пропущено...


В теории возможно, таблица секционируется и и можно сделать, чтобы диапазон до 2016 будет лежать в одной ФГ, диапазон после 2016 в другой ФГ
Но такое нужно делать для всех таблиц и как вы там будете отделять данные до 2016 и после под вопросом.

Это только для enterprice. Плюс нужно еще проверять, установятся ли обновления если таблица секционирована

CREATE PARTITION FUNCTION pfTableRange (datetime)
	AS RANGE LEFT FOR  VALUES ('20160101')
GO
CREATE PARTITION SCHEME psTable
	AS PARTITION pfTableRange 
	TO (PRIMARY, SECONDARY);	-- это имена файловых групп в которых будут лежать выбранные диапазоны
GO

ит.д.


Я слабоват в скуле, но выдало ошибку...

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'PRIMARY'.

При том глянул в скуле - версия сервака 2008 enterprise...

Чё-то не вкуриваю.


там последней строчкой "ит.д.", хоть по началу кажется что это мало, но в реальности это сотни строк кода, которые вам нужно написать самим. Без хороших знаний скула не получится
8 май 17, 12:23    [20465000]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
aleks2
Guest
Rankatan
Traygod
пропущено...


Я слабоват в скуле, но выдало ошибку...

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'PRIMARY'.

При том глянул в скуле - версия сервака 2008 enterprise...

Чё-то не вкуриваю.


там последней строчкой "ит.д.", хоть по началу кажется что это мало, но в реальности это сотни строк кода, которые вам нужно написать самим. Без хороших знаний скула не получится


Стисняюсь спросить: нафига "сотни строк кода"?
8 май 17, 13:33    [20465149]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30735
Traygod
Ничего не понятно. Разграничить как, можете подсказать?
Реально непонятно? Непонятна фраза "заключите слово PRIMARY в квадратные скобки"???
8 май 17, 15:38    [20465372]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Traygod
Member

Откуда:
Сообщений: 82
alexeyvg
Traygod
Ничего не понятно. Разграничить как, можете подсказать?
Реально непонятно? Непонятна фраза "заключите слово PRIMARY в квадратные скобки"???


Да спасибо, не заметил сначала, уже разобрался - пробую переносить, но по таблице это жесть делать. Можно как-то отобрать по таблице? Так как для каждой таблицы, я так понял, ещё и схема partition должна быть уникальной... Ей богу, буду очень благодарен, если кто-то поможет со скриптом...
8 май 17, 18:37    [20465627]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30735
Traygod
Да спасибо, не заметил сначала, уже разобрался - пробую переносить, но по таблице это жесть делать. Можно как-то отобрать по таблице?
А у вас что, множество таблиц имеют одинаковый и огромный размер?
Traygod
Так как для каждой таблицы, я так понял, ещё и схема partition должна быть уникальной...
Если логически данные разделяются одинаково, то схема и функция могут быть одинаковыми.
Traygod
База 400 гигов, данные от царя гороха, к данным до 2016-го года обращаются редко, а массив данных сумасшедший.
Вообще непонятно, зачем для такой крохотной базы заморачиваться с разделением и переносом. Тем более, если это не "вынос" одной большой таблицы.

Это будет дороже, чем купить пару SSD, даже если программистами и админами у вас нищие гастробпйтеры.
8 май 17, 19:43    [20465693]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Traygod
Member

Откуда:
Сообщений: 82
alexeyvg
Traygod
Да спасибо, не заметил сначала, уже разобрался - пробую переносить, но по таблице это жесть делать. Можно как-то отобрать по таблице?
А у вас что, множество таблиц имеют одинаковый и огромный размер?
Traygod
Так как для каждой таблицы, я так понял, ещё и схема partition должна быть уникальной...
Если логически данные разделяются одинаково, то схема и функция могут быть одинаковыми.
Traygod
База 400 гигов, данные от царя гороха, к данным до 2016-го года обращаются редко, а массив данных сумасшедший.
Вообще непонятно, зачем для такой крохотной базы заморачиваться с разделением и переносом. Тем более, если это не "вынос" одной большой таблицы.

Это будет дороже, чем купить пару SSD, даже если программистами и админами у вас нищие гастробпйтеры.


Не думаю что нужно переносить все таблицы, достаточно перенести тяжелые данные, а это как правило документы и тому подобное, так как остальная информация статична в целом(Исходя из даты создания). Я вижу следующий сценарий:

1) Отборка тяжелых таблиц через отчет или выборку.
2) Определение индекса (Кластер или нет)
3) Соответственно выстраивание схем переноса.

Не соглашусь что для офисного сервака 400 гигов - это малая база.

Всё равно это надо сделать, если форумчанам не интересна тема как опыт, то ничего не могу поделать - я попросил совета.
8 май 17, 21:44    [20465831]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30735
Traygod
Не думаю что нужно переносить все таблицы, достаточно перенести тяжелые данные, а это как правило документы и тому подобное, так как остальная информация статична в целом(Исходя из даты создания).
Ээээ, так вы даже не знаете, как у вас будет это работать???
Как вы думаете, сможет ли сервер понять, откуда ему брать данные для запросов, из какой секции (диска)?
Traygod
Я вижу следующий сценарий:

1) Отборка тяжелых таблиц через отчет или выборку.
2) Определение индекса (Кластер или нет)
3) Соответственно выстраивание схем переноса.
Для начала нужно отобрать те таблицы, которые можно разделить таким образом. В запросах к которым всегда бы присутствовал критерий разделения.

Далее, делить нужно не по какой то "тяжести", тут критерий сложнее.

Вы же понимаете, что, если вы к некоторым данным обращаетесь часто, а к некоторым редко, то первые будут всегда в памяти, а вторые всегда на диске?

Не так однозначно, что и как разделять...
Traygod
Не соглашусь что для офисного сервака 400 гигов - это малая база.
Да и в десяток раз больше - немного. Чем это вас так пугает 400 гигов? Через пару лет в телефонах столько будет :-)
Traygod
Всё равно это надо сделать, если форумчанам не интересна тема как опыт, то ничего не могу поделать - я попросил совета.
Ну, всем интересен опыт, любой опыт интересен, я же не против.
Просто я понимаю, что для бизнеса такая идея будет вредна. Но у вас другие критерии, очевидно, не про бизнес, а про выполнение задания от такого же некомпетентного в сиквеле начальства. Это нормально, все так работают :-)
9 май 17, 00:13    [20465985]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Traygod
Member

Откуда:
Сообщений: 82
В общем часть тяжелых таблиц я разбил на 2 куска, судя по нагрузке на диск в permon, при массовом проведении документов за период после 2016 год нагрузка уменьшилась на основной диск в разы, разумеется выросла на второй диск. Пока буду пробовать перетащить максимум вручную, сколько успею, завтра поглядим. Со сценарием было бы быстрее конечно...
9 май 17, 13:21    [20466409]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
uaggster
Member

Откуда:
Сообщений: 757
alexeyvg
Traygod
Да спасибо, не заметил сначала, уже разобрался - пробую переносить, но по таблице это жесть делать. Можно как-то отобрать по таблице?
А у вас что, множество таблиц имеют одинаковый и огромный размер?
Traygod
Так как для каждой таблицы, я так понял, ещё и схема partition должна быть уникальной...
Если логически данные разделяются одинаково, то схема и функция могут быть одинаковыми.
Traygod
База 400 гигов, данные от царя гороха, к данным до 2016-го года обращаются редко, а массив данных сумасшедший.
Вообще непонятно, зачем для такой крохотной базы заморачиваться с разделением и переносом. Тем более, если это не "вынос" одной большой таблицы.

Это будет дороже, чем купить пару SSD, даже если программистами и админами у вас нищие гастробпйтеры.

Неистово плюсую!

Traygod
В общем часть тяжелых таблиц я разбил на 2 куска, судя по нагрузке на диск в permon, при массовом проведении документов за период после 2016 год нагрузка уменьшилась на основной диск в разы, разумеется выросла на второй диск. Пока буду пробовать перетащить максимум вручную, сколько успею, завтра поглядим. Со сценарием было бы быстрее конечно...

Вы б предварительно (до занятия, прости Господи, онанизмом), поинтересовались бы, может вам тупо индексов на рабочих таблицах не хватает? Или, к примеру, в покрывающие индексы поля забыли добавить (или логика так изменилась, что их там стало не хватать).
Или, может быть, статистику просто нужно обновить?
Или, может быть у вас сервер не под 1С настроен (см. https://its.1c.ru/db/metod8dev#content:5904:hdoc ).
Или памяти 8 Гб, всего?
Или tempdb захлёбывается (а 1С очень любит ее использовать, особенно если нестандартные конфигурации).
Энд етц.
Разделить 1С-овскую базу на секции - это, вообще, жесть жестяная.
Вы уверены, что оно обновление конфигурации переживет?

Да и не решаются так проблемы с производительностью!
Если у вас при проведении именно так выглядит активность - значит оно тупо сканирует какие-то таблицы.
Посмотрите планы запросов, которые летят при проведении.
10 май 17, 09:23    [20467772]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
aleksrov
Member

Откуда:
Сообщений: 948
Интересно у вас тут, секционированием решаете проблемы производительности 400 гиговой базы.
To Traygod.
Как написали выше, вы не тем занимаетесь, это как если бы у вас была сломана рука, а вам отрубили ногу, на время вы о руке забудете. Посмотрите что у вас сервер вообще делает, там уже и думайте, что делать. Я тут недавно, на прошлой неделе, работал с одним сервером, его владельцы просили дать рекомендации по апгрейду железа, в частности они хотели добавить оперативы, ибо "все ну ваще тормозит", когда я посмотрел что у них делает сервер я о... сильно удивился. В кратце, когда пользователь запрашивал определнные данные (наверно отчетность, но не уверен, т.к. ничего толком не обьяснили) то создавалась временная таблица, практически полная копия основной таблицы, десятки или сотни миллинов строк, потом программа брала какие то данные (я до конца логику не понял) из этой таблицы и она уничтожалась, такие запросы выполнялись несколько часов, сканируя всю огромную таблицу целиком, железо, а в частности диски, не справлялось (+ все файлы 15 баз на одном диске), но все просто винили слабое железо.
P.S. Они кстати решили просто добавить оперативы и возможно купить SSD, хотя один фиг не поможет.
10 май 17, 09:51    [20467855]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
Владислав Колосов
Member

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

разбиение Вам никак не поможет, т.к. 1С не использует СУБД оптимально. Скорее всего Вы всё равно получите просмотр индексов всех файловых групп.
10 май 17, 10:28    [20467984]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
aleks2
Guest
Владислав Колосов
Traygod,

разбиение Вам никак не поможет, т.к. 1С не использует СУБД оптимально. Скорее всего Вы всё равно получите просмотр индексов всех файловых групп.

Ну вылитая Каркуша.

1. 1С, канешно, не фонтан.
2. Но все записи оно не выгребает.
3. Конечно, индексы очень желательно секционировать "как таблицу".
4. Там, большая засада - стремление 1С контролировать схему данных.
10 май 17, 10:40    [20468037]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30735
aleks2
3. Конечно, индексы очень желательно секционировать "как таблицу".
Да как там сервер будет это использовать? Там запросы с кучей таблиц со связями по ключу (из одного поля), и вот все эти таблицы, которые в запросе, секционированы. Какие там варианты, кроме поиска во всех секциях?
Ну да, что то где то выигрывается, допустим, за счёт пары тройки больших таблиц, но несильно.

Зато сколько геморроя, и сколько затрат на создание этого решения и его сопровождение.
Это же нормальное промышленное решение, не стартаперский сайтик, оно живёт в среднем дольше, чем в компании работают программисты и их начальники. Вот зачем бизнесу это дерьмо? Всё равно что в каком то станке заменить крепёж на дюймовый, потому что завалялась халявная коробочка, можно сэкономить тыщу рублей.

Я вот представил себе лица франчей, которых попросили что то там сделать лет через 5, и вот они это увидели :-) А никто даже не знает, откуда это чудо выросло и когда :-)
10 май 17, 13:25    [20468919]     Ответить | Цитировать Сообщить модератору
 Re: Как перенести старые данные базы в отдельную файловую группу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30735
Traygod,

Я бы ещё понял, если бы задача ставилась так:
- есть пара огромных таблиц операций, они занимают 80% объёма базы, запросы к ним всегда с указанием диапазона дат, обращения к старым данным очень редкие, если идея их секционировать с выносом старых данных на отдельный большой медленный диск.

Это было бы вполне интересно попробовать, вдруг прокатит, и вдруг апдэйт 1С этого не заметит?

Но секционировать все(!) таблицы скриптом(!)???
Это идиотизм.
Полезно только для изучения MSSQL, не более.
10 май 17, 13:33    [20468962]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить