Database
 sql >> база данни >  >> RDS >> Database

Преместване на съществуваща таблица от основна файлова група в друга файлова група

В тази статия ще обясня как да преместите таблица от основната файлова група към вторичната файлова група. Първо, нека разберем какво представляват файл с данни, файлова група и тип файлови групи.

Файлове и файлови групи от база данни

Когато SQL Server е инсталиран на който и да е сървър, той създава първичен файл с данни и регистрационен файл за съхранение на данни. Първичният файл с данни съхранява данни и обекти от база данни като таблици, индекс, съхранени процедури и т.н. Регистрационните файлове съхраняват информация, необходима за възстановяване на транзакции. Файловете с данни могат да бъдат обединени във файлови групи.

SQL Server има три типа файлове

  1. Основен файл :Създава се при инсталиране на SQL сървър и съдържа метаданните и информацията на базата данни. Потребителски данни, обекти могат да се съхраняват в първичните файлове с данни. Основният файл има разширението .mdf.
  2. Вторичен файл :Вторичните файлове са дефинирани от потребителя. Те съхраняват потребителски данни, обекти, създадени от потребител. Те имат разширението .ndf.
  3. Регистрационен файл на транзакциите s:T-Log файловете регистрират всички извършени транзакции за възстановяване на базата данни. Разширението на регистрационния файл в .ldf.

Както споменах по-горе, файловете с данни могат да бъдат групирани във файлова група. Докато SQL Server се инсталира, той създава основната файлова група, която има основен файл с данни. Вторичните файлови групи са дефинирани от потребителя. Те имат вторични файлове с данни. Когато създаваме нова база данни, можем да създадем вторични файлове с данни и файлови групи. Добавянето на файлове с вторични данни помага за подобряване на производителността. Той може да бъде създаден на различни дискови устройства или отделни дискови дялове, което намалява латентността на изчакване на IO и четене-запис.

Препоръчително е да съхранявате таблици и индекси в отделни файлови групи. Освен това поддържането на големи таблици в отделни файлове подобрява производителността.

Има три типа файлови групи:

  1. Файлова група от редове :Файлова група на ред, известна още като Основна файлова група, съдържа основен файл с данни. SQL обект, данни, системни таблици се разпределят към основната файлова група.
  2. Оптимизирана за памет файлова група :Оптимизирана за памет файлова група съдържа оптимизирани за паметта таблици и данни. За да активираме OLTP в паметта, трябва да създадем файлова група, оптимизирана за паметта.
  3. Файлов поток :Файлова група с файлов поток съдържа данни от файлов поток като изображения, документи, изпълними файлове и т.н. Основната файлова група не може да съдържа данни за файлов поток, трябва да създадем файлова група FileStream. Той съдържа данните от FileStream.

Настройка на демонстрация

В тази демонстрация създадох „DemoDatabase“ на екземпляра на SQL Server 2017. В базата данни бяха създадени разделите „Записи“ и „Данни на пациента“. Първичният ключ „PK_CIDX_Records_ID“ беше създаден в таблицата „Records“, а клъстерният индекс „CIDX_PatientData_ID“ беше създаден в таблицата „PatientData“. В тази демонстрация ще преместя таблиците „Records“ и „PatientData“ от първичната файлова група към вторичната файлова група.

За това трябва да направим следното:

  1. Създайте вторична файлова група.
  2. Добавете файлове с данни към вторичната файлова група.
  3. Преместете таблицата във вторичната файлова група, като преместите клъстерирания индекс с ограничението на първичния ключ.
  4. Преместете таблиците във вторичната файлова група, като преместите клъстерирания индекс без първичния ключ.

Създаване на вторична файлова група

Вторична файлова група може да бъде създадена с помощта на T-SQL ИЛИ с помощта на съветника за добавяне на файл от SQL Server Management Studio. За да добавите файлова група с помощта на SSMS, отворете SSMS и изберете база данни, където трябва да се създаде файлова група. Щракнете с десния бутон върху базата данни, изберете „Свойства ”>> изберете „Файлови групи ” и щракнете върху „Добавяне на файлова група ” както е показано на следното изображение:

Когато щракнем върху „Добавяне на файлова група ” ще бъде добавен ред в „Редове ” решетка. В „Редове ” мрежа, посочете подходящо име на файлова група в „Име " колона. Файловата група не е нито само за четене, нито по подразбиране; следователно, запазете Само за четене и По подразбиране квадратчетата за отметка са изчистени за нова файлова група. Вижте следното изображение:

Щракнете върху OK, за да затворите диалоговия прозорец.

За да създадете файлова група с помощта на T-SQL скрипт, изпълнете следния скрипт.

USE [master]
GO
ALTER DATABASE [DemoDatabase] ADD FILEGROUP [Secondary ]
GO

Добавяне на файлове към файлова група

За да добавите файлове във файлова група, отворете свойствата на базата данни, изберете „файлове“ и щракнете върху „Добавяне“. Както е показано на следното изображение:

Ще бъде добавен празен ред в Файловете на базата данни изглед на мрежа. В изгледа на мрежата посочете подходящо логическо име в Логическо име колона, изберете Данни за редове отТип файл падащо меню, изберете вторичен от Файловата група падащото поле, задайте първоначалния размер на файла в Начален размер колони, задайте параметър за автоматичен растеж и максимален размер в Автоматичен растеж/Максимален размер колона, посочете физическото местоположение на вторичния файл с данни в Пътят колона и посочете подходящо име на файл в Име на файл колона. Вижте следното изображение:

Използвайте следния T-SQL скрипт, за да създадете вторичен файл с данни.

USE [master]
GO
ALTER DATABASE [DemoDatabase] ADD FILE ( NAME = N'DemoDatabase_tblRecords', FILENAME =
N'E:\MS_SQL\SQL2017_Data\DemoDatabase_tblRecords.ndf' , SIZE = 8192KB , FILEGROWTH = 102400KB ) TO FILEGROUP [Secondary]
GO

Вторичният файл с данни е създаден. Вижте следното изображение:

За да видите списък с файлови групи, създадени в базата данни, изпълнете следната заявка.

use DemoDatabase
go
select 
a.Name as 'File group Name', type_desc as 'Filegroup Type', case when is_default=1 then 'Yes' else 'No' end as 'Is filegroup default?',
b.filename as 'File Location',
b.name 'Logical Name',
Convert(numeric(10,3),Convert(numeric(10,3),(size/128))/1024) as 'File Size in MB'
 from sys.filegroups a inner join sys.sysfiles b on a.data_space_id=b.groupid

По-долу е изход от заявката.

Прехвърляне на съществуваща таблица от първична файлова група към вторична файлова група

Можем да преместим съществуваща таблица в друга файлова група, като преместим клъстерирания индекс в друга файлова група. Както знаем, листовият възел на клъстерирания индекс има действителни данни; следователно преместването на клъстериран индекс може да премести цялата таблица в друга файлова група. Преместването на индекса има ограничение:ако индексът е първичен ключ или уникално ограничение, не можете да премествате индекс с помощта на SQL Server Management Studio. За да преместим тези индекси, трябва да използваме създаване на индекс изявление и с DROP_Existing=ON опция.

Преместване на клъстериран индекс с ограничение на първичния ключ.

Първичният ключ налага уникални стойности, следователно създава уникален клъстериран индекс. Ключовата колона е PRN. За да го създадете във вторичната файлова група, задайте DROP_EXISTING=ON опция и файловата група трябва да е вторична. Изпълнете следния скрипт.

USE [DemoDatabas]
GO
Create Unique Clustered index [PK_CIDX_Records_ID] ON [Records] (ID asc)  WITH (DROP_EXISTING=ON) ON [Secondary]

След като командата е изпълнена успешно, проверете дали индексът е създаден във вторичната файлова група. За това щракнете с десния бутон върху Съхранение опция в Свойства на индекса диалогов прозорец. За да отворите свойствата на индекса, разгънете DemoDatabase база данни>> разгънете Таблици>> разгънете Индекси . Щракнете с десния бутон върху PK_CIDX_Records_ID , както е показано на следното изображение:

Както споменах, след като клъстерираният индекс се премести във вторична файлова група, таблицата ще бъде преместена във вторичната файлова група. За да го потвърдите, щракнете с десния бутон върху Съхранение опция вСвойства на таблицата диалогов прозорец. За да отворите свойствата на индекса, разгънете DemoDatabase база данни>> разгънете Таблица s>> щракнете с десния бутон върху Записи, и изберете хранилище както е показано на следното изображение:

Преместване на клъстериран индекс без първичен ключ

Можем да преместваме клъстериран индекс без първичен ключ, използвайки SQL Server Management Studio. За да направите това, разгънете DemoDatabase база данни>> разгънете Таблици>> разгънете Индекс s>> щракнете с десния бутон върху CIDX_PatientData_ID индекс и изберете Свойства както е показано на следното изображение:

Свойства на индекса диалогов прозорец се отваря. В диалоговия прозорец изберете Съхранение и в прозореца за съхранение щракнете върху Файлова група падащото меню, изберете Вторично файлова група и щракнете върху OK както е показано на следното изображение:

Промяната на индексната файлова група ще създаде отново целия индекс. След като индексът бъде създаден отново, отворете Свойства на таблицата и изберете хранилище.

Както можете да видите на изображението по-горе, заедно с преместването на CIDX_PatientData_ID клъстериран индекс към вторичната файлова група,PatientData таблицата също се премества в Вторично файлова група.

Като изпълните следната заявка, можете да намерите списъка с обекти, създадени в различна файлова група:

   SELECT obj.[name] as [Table Name],
       obj.[type] as [Object Type],
       Indx.[name] as [Index Name],
       fG.[name] as [Filegroup Name]
FROM   sys.indexes INDX
       INNER JOIN sys.filegroups FG
               ON INDX.data_space_id = fG.data_space_id
       INNER JOIN sys.all_objects Obj
               ON INDX.[object_id] = obj.[object_id]
WHERE  INDX.data_space_id = fG.data_space_id
And obj.type='U'       
go

По-долу е изходът от заявката:

Резюме

В тази статия обясних

    1. Основи на файловете с данни и файловите групи.
    2. Как да създадете вторична файлова група и да добавите вторичен файл с данни в нея.
    3. Преместете таблицата във вторична файлова група, като преместите:
      • Първичен ключ.
      • Клъстериран индекс.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ключалката APPEND_ONLY_STORAGE_INSERT_POINT

  2. Потенциално подобрение за актуализации на статистиката:MAXDOP

  3. SQL команди

  4. Кой е най-бързият начин за изчисляване на медианата?

  5. Как да инсталирате Microsoft SQL на Linux