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

Откуда:
Сообщений: 588
Попробую сформулировать суть вопроса,
есть секционированная таблица по датам,
Файловые группы LeftFG и RightFG всегда пустые, для возможного расщепления
При попытке добавить данные за новую дату 201701112 я добавляю новый RANGE, который должен разбить крайнюю пустую секцию,
которая хранится в RightFG на две, залить данные в новую FG 20170112FG(заранее созданную) и оставить пустую секцию.

Мне не понятно как сервер определяет что данные нужно заносить в 20170112FG, RightFG оставить пустой, а не наоборот.


USE TestDB;
GO
-- add five new filegroups to the TestDB database
ALTER DATABASE TestDB
ADD FILEGROUP LeftFG;
GO
ALTER DATABASE TestDB
ADD FILEGROUP 20170110FG;
GO
ALTER DATABASE TestDB
ADD FILEGROUP 20170111FG;
GO
ALTER DATABASE TestDB
ADD FILEGROUP RightFG;
GO

CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE RIGHT FOR VALUES ( '20170110', '20170111', '201701112' );
GO

CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (LeftFG, 20170110FG, 20170111FG, RightFG);
GO

ALTER DATABASE TestDB ADD FILEGROUP 20170112FG
GO  
ALTER DATABASE TestDB ADD FILE (NAME='20170112File', FILENAME='d:\data\20170112File') TO FILEGROUP 20170112FG;
GO

ALTER PARTITION SCHEME myRangePS1
NEXT USED 20170112FG;
GO
ALTER PARTITION FUNCTION myRangePF1 ()
SPLIT RANGE ('201701113');
GO
6 фев 17, 22:07    [20186675]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
lex452,

это у вас даты такие?
7 фев 17, 10:09    [20187568]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4400
TaPaK
lex452,

это у вас даты такие?


Тоже стало интересно

'201701112'

Это 112-е января?
Сначала выносите мозг скулю, а потом обижаетесь на него, что неправильно работает.
7 фев 17, 11:56    [20188113]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
lex452
Member

Откуда:
Сообщений: 588
Видно же что опечатался, да это секционирование по датам
USE TestDB;
GO
-- add five new filegroups to the TestDB database
ALTER DATABASE TestDB
ADD FILEGROUP LeftFG;
GO
ALTER DATABASE TestDB
ADD FILEGROUP 20170110FG;
GO
ALTER DATABASE TestDB
ADD FILEGROUP 20170111FG;
GO
ALTER DATABASE TestDB
ADD FILEGROUP RightFG;
GO

CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE RIGHT FOR VALUES ( N'2017-01-10', N'2017-01-11', N'20170112' );
GO

CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (LeftFG, 20170110FG, 20170111FG, RightFG);
GO

ALTER DATABASE TestDB ADD FILEGROUP 20170112FG
GO  
ALTER DATABASE TestDB ADD FILE (NAME='20170112File', FILENAME='d:\data\20170112File') TO FILEGROUP 20170112FG;
GO

ALTER PARTITION SCHEME myRangePS1
NEXT USED 20170112FG;
GO
ALTER PARTITION FUNCTION myRangePF1 ()
SPLIT RANGE (N'2017-01-13');
GO
7 фев 17, 12:47    [20188390]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37151
Делать int-функцию для дат весьма оригинально. Туда не только 112е января поместится...
7 фев 17, 13:23    [20188604]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
lex452
Member

Откуда:
Сообщений: 588
Гавриленко Сергей Алексеевич,

я вроде написал исправленную версию, так что с сарказмом опоздали.
7 фев 17, 19:51    [20190452]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37151
lex452
Гавриленко Сергей Алексеевич,

я вроде написал исправленную версию, так что с сарказмом опоздали.

В каком месте она исправлена-то?

CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE RIGHT FOR VALUES ( N'2017-01-10', N'2017-01-11', N'20170112' );
7 фев 17, 20:01    [20190462]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34750
Блог
lex452
Мне не понятно как сервер определяет что данные нужно заносить в 20170112FG, RightFG оставить пустой, а не наоборот.
[/src]


добавляемые данные сортируются в tempdb и на основе метаданных функции секционирования определяется нужная секция
7 фев 17, 20:20    [20190494]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
lex452
Member

Откуда:
Сообщений: 588
Гавриленко Сергей Алексеевич,

Извиняюсь, недосмотрел DateTime там конечно
7 фев 17, 21:46    [20190660]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
lex452
Member

Откуда:
Сообщений: 588
Критик
lex452
Мне не понятно как сервер определяет что данные нужно заносить в 20170112FG, RightFG оставить пустой, а не наоборот.
[/src]


добавляемые данные сортируются в tempdb и на основе метаданных функции секционирования определяется нужная секция


Ответ обо всем и ни о чем.
После того как я разбиваю SPLIT секцию новой точкой например секцию с данными от 2017-01-12 до бесконечности
точкой 2017-01-13. Добавляю 20170113FG по какому принципу сервер данные за 12 число кладет в 20170112FG, а в 20170113FG
данные от 13 до бесконечности
7 фев 17, 21:51    [20190671]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
lex452
После того как я разбиваю SPLIT секцию новой точкой например секцию с данными от 2017-01-12 до бесконечности
точкой 2017-01-13. Добавляю 20170113FG
Наоборот - вы сначала добавляете 20170113FG, потом указываете, что для нового диапазона в функции секционирования сервер должен использовать новую файлгруппу.
А потом уже разбиваете SPLIT секцию новой точкой, и сервер, в соответствии с вашими предыдущими указаниями, привязывает новый диапазон к этой файлгруппе.

lex452
Ответ обо всем и ни о чем.
Непонятно, что вы собственно хотите узнать?

Ну вот, можете посмотреть метаданные по вашим секциям и файлгруппам:
--	Статистика по файлгруппам и файлам
SELECT	fg.name as FileGroupName,
		fg.is_read_only,
		df.name as LogicalFileName,
		df.physical_name as FileName,
		--r.value as [Native range],
		case when f.type = 'R' THEN '>= ' ELSE '<= ' END + convert(varchar(24), r.value, 120) AS [Native range],
		sum(p.rows) as rows,
		max(convert(decimal(18,3), convert(decimal(18,3), df.size) * 8196 / (1024*1024*1024))) as [FileSize_GB],
		max(convert(decimal(18,3), convert(decimal(18,3), FILEPROPERTY(df.name, 'SpaceUsed')) * 8196 / (1024*1024*1024))) as [SpaceUsed_GB]
FROM sys.indexes i 
	JOIN sys.tables t ON (t.object_id = i.object_id)
	JOIN sys.partition_schemes ps ON (i.data_space_id = ps.data_space_id)
	JOIN sys.partition_functions f ON f.function_id = ps.function_id
	JOIN sys.destination_data_spaces dds ON (ps.data_space_id = dds.partition_scheme_id)
	LEFT JOIN sys.partition_range_values r on r.function_id = f.function_id and r.boundary_id + cast(f.boundary_value_on_right as int) = dds.destination_id
	JOIN sys.partitions p ON p.object_id = i.object_id and p.index_id = i.index_id  and p.partition_number = dds.destination_id
	JOIN sys.filegroups fg ON dds.data_space_id = fg.data_space_id
	JOIN sys.database_files df ON df.data_space_id = fg.data_space_id
WHERE (i.index_id IN (0,1))
GROUP BY fg.name, fg.is_read_only, df.name, df.physical_name, case when f.type = 'R' THEN '>= ' ELSE '<= ' END + convert(varchar(24), r.value, 120) --r.value
ORDER BY FileGroupName, LogicalFileName
8 фев 17, 00:35    [20190946]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
lex452
Member

Откуда:
Сообщений: 588
alexeyvg
Наоборот - вы сначала добавляете 20170113FG, потом указываете, что для нового диапазона в функции секционирования сервер должен использовать новую файлгруппу.
А потом уже разбиваете SPLIT секцию новой точкой, и сервер, в соответствии с вашими предыдущими указаниями, привязывает новый диапазон к этой файлгруппе.


Примерно это и хотел услышать

Только у меня созрел еще вопрос,
Я читал что когда используешь RANGE RIGHT то слева всегда пустая секция и ее надо разбивать.
Как лучше сделать, когда у меня данные могут добавляться и слева и справа, возможно ли сделать чтобы и слева и справа была пустая секция и в случае добавления данных расщеплялась всегда пустая секция, а не с данными? Или на производительность это не сильно скажется?
9 фев 17, 12:50    [20196374]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
[quote lex452]
alexeyvg
Или на производительность это не сильно скажется?

очень может сказаться, если данных будет много и их сиквелу придётся перемещать
9 фев 17, 12:53    [20196383]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
lex452
Или на производительность это не сильно скажется?
Сильно скажется.

lex452
Как лучше сделать, когда у меня данные могут добавляться и слева и справа, возможно ли сделать чтобы и слева и справа была пустая секция и в случае добавления данных расщеплялась всегда пустая секция, а не с данными?
Ну вообще это в какой то степени условность.
Вам ничего не мешает справа добавить новую правую секцию до того, как вы начали писать данные в существующую последнюю правую секцию.
9 фев 17, 14:41    [20196942]     Ответить | Цитировать Сообщить модератору
 Re: Поясните как server определяет в какую FG помещать секционированные данные  [new]
lex452
Member

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

Ну вообще это в какой то степени условность.
Вам ничего не мешает справа добавить новую правую секцию до того, как вы начали писать данные в существующую последнюю правую секцию.


То есть поправьте если ошибаюсь.
У меня в таблице крайняя секция за 12 число (от 12 до бесконечности, но данных в ней нет)
чтобы добавить данные за 14 число, мне нужно создать секцию за 13(будет пустая), за 14 число (туда я буду заливать данные )
и за 15 число (будет крайняя и пустая для будущего расщепления) или есть более простой способ?

И как мне в данном случае назначить файловые группы для пустых секций для которых нет еще данных?
13 фев 17, 12:42    [20207026]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить