Секционирование существующих таблиц с журналом Робота и Оркестратора для SQLServer
Создание файловых групп
Для секционирования по месяцам необходимо создать файловые группы на каждый месяц. Приведены примеры до конца текущего года, в дальнейшем состав групп можно расширять.
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202304
GO
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202305
GO
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202306
GO
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202307
GO
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202308
GO
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202309
GO
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202310
GO
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202311
GO
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202312
GO
ALTER DATABASE ltoolslogs
ADD FILEGROUP logs202401
GOПодключаем к каждой группе файл хранилища. Путь к файлам .NDF зависит от конфигурации SQLServer’а и может быть, например, таким, C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA.
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202304,
FILENAME = '<file-groups-path>\logs202304.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202304;
GO
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202305,
FILENAME = '<file-groups-path>\logs202305.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202305;
GO
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202306,
FILENAME = '<file-groups-path>\logs202306.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202306;
GO
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202307,
FILENAME = '<file-groups-path>\logs202307.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202307;
GO
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202308,
FILENAME = '<file-groups-path>\logs202308.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202308;
GO
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202309,
FILENAME = '<file-groups-path>\logs202309.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202309;
GO
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202310,
FILENAME = '<file-groups-path>\logs202310.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202310;
GO
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202311,
FILENAME = '<file-groups-path>\logs202311.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202311;
GO
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202312,
FILENAME = '<file-groups-path>\logs202312.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202312;
GO
ALTER DATABASE ltoolslogs
ADD FILE (
NAME = logs202401,
FILENAME = '<file-groups-path>\logs202401.ndf',
SIZE = 10 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024 KB
) TO FILEGROUP logs202401;
GOСоздание функции секционирования
CREATE PARTITION FUNCTION LogsPartitionFunction(datetime2(7))
AS RANGE RIGHT
FOR VALUES (
'2023-04-01 00:00:00.0000000', '2023-05-01 00:00:00.0000000', '2023-06-01 00:00:00.0000000',
'2023-07-01 00:00:00.0000000', '2023-08-01 00:00:00.0000000', '2023-09-01 00:00:00.0000000',
'2023-10-01 00:00:00.0000000', '2023-11-01 00:00:00.0000000', '2023-12-01 00:00:00.0000000',
'2024-01-01 00:00:00.0000000'
);
GOСоздание схемы секционирования
CREATE PARTITION SCHEME LogsPartitionScheme
AS PARTITION LogsPartitionFunction
TO ('Primary',
'logs202304', 'logs202305', 'logs202306', 'logs202307',
'logs202308', 'logs202309', 'logs202310', 'logs202311',
'logs202312', 'logs202401'
)
GOНастройка таблицы Logs
Удаляем основной кластерный индекс
ALTER TABLE [Logs]
DROP CONSTRAINT [PK_Logs]
GOСоздаём такой же, но не кластерный
ALTER TABLE [Logs]
ADD CONSTRAINT PK_Logs PRIMARY KEY NONCLUSTERED([Id] ASC)
ON [PRIMARY]
GOСоздаём кластерный индекс для секционирования
CREATE CLUSTERED INDEX IX_Logs_OrchTimestampUtc
ON [Logs] ([OrchTimestampUtc] )
ON [LogsPartitionScheme]([OrchTimestampUtc])
GOНастройка таблицы OrchEvents
Удаляем основной кластерный индекс
ALTER TABLE [OrchEvents]
DROP CONSTRAINT [PK_OrchEvents]
GOСоздаём такой же, но не кластерный
ALTER TABLE [OrchEvents]
ADD CONSTRAINT PK_OrchEvents PRIMARY KEY NONCLUSTERED([Id] ASC)
ON [PRIMARY]
GOУдаляем основной кластерный индекс по колонке OrchTimestampUtc
DROP INDEX [OrchEvents].IX_OrchEvents_AllOrchTimestampUtc
GO
DROP STATISTICS [OrchEvents].IX_OrchEvents_AllOrchTimestampUtc
GOСоздаём кластерный индекс для секционирования
CREATE CLUSTERED INDEX IX_OrchEvents_AllOrchTimestampUtc
ON [OrchEvents]([OrchTimestampUtc])
ON [LogsPartitionScheme]([OrchTimestampUtc])
GO