Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 21847|Resposta: 0

[Comunicação] Resumo de Tabelas Particionadas no SQL Server

[Copiar link]
Publicado em 13/07/2021 13:52:31 | | |

Documentação oficial


Etapas de alto nível para criar uma tabela de partições

1. Criar um grupo de arquivos (semelhante ao espaço de tabela do Oracle), claro, você não pode criá-lo, pode colocar todas as partições em um único grupo de arquivos

2. Estabelecer uma função de partição e distribuir os dados de acordo com o intervalo

3. Estabeleça um esquema de partição, associe a função de partição e também associe o grupo de arquivos, a função de partição divide os dados em vários intervalos, você precisa associar vários grupos de arquivos, claro, também pode colocar esses intervalos de partições no mesmo grupo de arquivos

4. Criar uma tabela e associar o esquema de zoneamento


Um bug encontrado

Quando você clica diretamente com o botão direito na tabela para exportar a estrutura da tabela, não pode exportar as informações da partição, e só pode exportar as informações da tabela clicando com o botão direito no script database-task-generate


Algumas conclusões da tabela de partições:

1. Campos particionados não precisam necessariamente ser indexados

2. Campos particionados podem ser criados como índices agrupados ou índices sem clusters

3. Campos particionados, sejam índices agrupados ou não agrupados, são reconstruídos em índices agrupados sem esquemas de particionamento associados, e a tabela particionada torna-se uma tabela não particionada

4. Converta uma tabela comum em uma tabela particionada, basta criar um índice agrupado na tabela e usar o esquema de particionamento no índice agrupado. Por exemplo, quando o campo 1 de uma tabela não particionada cria um índice agrupado e está associado a um esquema de particionamento, a tabela é convertida em uma tabela particionada, e o campo particionado é o campo 1.

5. Converter a tabela particionada em uma tabela normal, se houver um campo de partição com índice, reconstruir o campo particionado como um índice agrupado e não associar ao esquema de partição; se o campo de partição não tiver índice, o campo de partição pode criar um novo índice agrupado e não se associar ao esquema de partição

6. Mudar uma tabela normal para uma tabela de partição ou alterar uma tabela de partição para uma tabela comum só pode ser feito usando índices agrupados, pois com índices agrupados existem tabelas de organização de índices, e a redistribuição das tabelas é realizada por meio da reconstrução de índices agrupados. Se a tabela comum se tornar uma tabela particionada, reconstrua o campo de partição em um índice agrupado e associe-o ao esquema de partição, e se a tabela de partição se tornar uma tabela normal, reconstrua o campo de partição em um índice agrupado sem associar o esquema de partição.

7. Para criar uma tabela de partição, a restrição de unicidade deve incluir uma coluna de partição

8. Ao criar um esquema de partição, é necessário garantir que o número de grupos de arquivos corresponda ao segmento de intervalo de partições da função de partição, e não importa se o nome do grupo de arquivos é duplicado.

9. Funções de particionamento e esquemas de particionamento estão em um banco de dados, não enfrentando toda a instância

10. A tabela de partições é grande demais para ocupar muito espaço em disco, e o tamanho ainda não muda após deletar alguns campos


Passos para criar uma tabela de partições

1.1. Exemplo de criação de um grupo de arquivos

alterar banco de dados teste1 adicionar grupo de arquivos parte 1;

Alter banco de dados test1 adicionar grupo de arquivos parte 1000;

alterar banco de dados test1 adicionar filegroup part2000;

alterar banco de dados test1 adicionar grupo de arquivos parte 3000;

alterar banco de dados test1 adicionar grupo de arquivos parte 4000;

1.2. Estabelecer um exemplo de arquivo e associar um grupo de arquivos

ALTERAR BANCO de DADOS test1 ADICIONAR ARQUIVO(NOME = test1part1,NOME do ARQUIVO = 'G:\test1part1.ndf',SIZE = 5MB,MAXSIZE = 100MB, FILEGROWTH = 5MB) ao filegroup parte 1;

ALTER DATABASE test1 ADD FILE(NAME = test1part1000,FILENAME = 'G:\test1000.ndf',SIZE = 5MB,MAXSIZE = 100MB, FILEGROWTH = 5MB) ao filegroup part1000;

ALTER BANCO de DADOS test1 ADICIONAR FILE(NAME = test1part2000,FILENAME = 'G:\test1part2000.ndf',SIZE = 5MB,MAXSIZE = 100MB, FILEGROWTH = 5MB) ao filegroup part2000;

ALTER BANCO de DADOS test1 ADICIONAR FILE(NAME = test1part3000,FILENAME = 'G:\test1part3000.ndf',SIZE = 5MB,MAXSIZE = 100MB, FILEGROWTH = 5MB) ao filegroup PART3000;

ALTER BANCO de DADOS test1 ADICIONAR FILE(NAME = test1part4000,FILENAME = 'G:\test1part4000.ndf',SIZE = 5MB,MAXSIZE = 100MB, FILEGROWTH = 5MB) ao filegroup part4000;

2. Um exemplo de estabelecimento de uma função de partição, a função de partição é chamada partfun1

CRIAR FUNÇÃO DE PARTIÇÃO partfun1 (int)

QUANTO AO ALCANCE RESTANTE PARA VALORES ('1000', '2000', '3000', '4000')

--VALORES ('1000', '2000', '3000', '4000') indicam que a tabela será dividida em 5 zonas, que são divididas de acordo com o tamanho dos valores nos campos da tabela, sendo as cinco menores - 1000, 1000-2000, 2000-3000, 3000-4000, 4000-maiores

3. Um exemplo de estabelecer um esquema, associar a função de partição partfun1 e associar o grupo de arquivos

CRIAR ESQUEMA DE PARTIÇÃO partschema1

COMO PARTIÇÃO PARTE 1

TO (parte 1, parte 1000, parte2000, parte3000, parte 4000);

--Construído sobre vários grupos de arquivos de parte 1, parte 1000, parte 2000, parte 3000, parte 4000

CRIAR ESQUEMA DE PARTIÇÃO partschema2

COMO PARTIÇÃO PARTE 1

TO (PARTE1,[PRIMÁRIO],[PRIMÁRIO],[PRIMÁRIO]);

--Construído sobre a parte 1, grupo de arquivos [PRIMARY], não há problema em substituir a parte 1 por [PRIMARY], para que seja semelhante a construir no grupo de arquivos [PRIMARY]

CRIAR ESQUEMA DE PARTIÇÃO partschema3

COMO PARTIÇÃO PARTE 1

ALL TO (parte 1);

--todos construídos no grupo de arquivos parte 1

CRIAR ESQUEMA DE PARTIÇÃO partschema4

COMO PARTIÇÃO PARTE 1

TODOS PARA ([PRIMÁRIO]);

--todos construídos sobre o grupo de arquivos [PRIMARY]

4. Exemplo de estabelecimento de uma tabela de partição

CRIAR TABELA PARTTABLE1(

[ID] [int] NÃO NULO,

[IDText] [nvarchar] (max) ZERO

[Data] [data-hora] NULL)

ON [partschema1](ID);

inserir em parttable1 valores (1,'1', getdate()-4);

inserir em parttable1 valores (1001, '1001', getdate()-3);

inserir em valores do parttable1 (2001, '2001', getdate()-2);

inserir em parttable1 valores (3001,'3001', getdate()-1);

inserir em parttable1 valores (4001,'4001', getdate());

5. Verificar os dados da tabela de partições

SELECT * FROM parttable1;

--Retorna todas as linhas da tabela de partição

SELECT distinto $PARTITION. [partfun1] (4) DO quadro da parte1;

--Retorna que particiona a linha com o valor do campo ID 4 a que pertence

SELECT * FROM parttable1 onde $PARTITION. [partfun1] (ID)=2

--Retorna todas as linhas da segunda partição, o ID é o ID do campo da partição

Nota: Você não pode usar SELECT * FROM parttable1 onde $PARTITION. [partfun1] (ID)=2 tem um resultado, significa que é uma tabela particionada, e o último teste 7 deste artigo é uma tabela não particionada, mas SELECT * FROM parttable1 onde $PARTITION. [partfun1] (ID)=2 ainda tem resultado


Novas partições

1. Especifique um grupo de arquivos que possa ser usado para o esquema de partições (adicione um grupo de arquivos para o esquema de partições).

2. Modificar a função de partição (adicionar o intervalo de dados da função de partição)

ALTERAR PARTITION SCHEME partschema1 PRÓXIMO USO [PRIMÁRIO]

ALTERAR FUNÇÃO DE PARTIÇÃO partfun1() FAIXA DIVIDIDA ('4500')

selecione p.partition_number,p.rows de sys.indexes i inner join sys.partitions p on p.object_id = i.object_id e i.object_id = object_id('parttable2') ordenem por 1

--A primeira instrução, se o esquema de partição usa ALL TO ([PRIMÁRIO]), essa instrução não precisa ser executada

--Uma nova partição é adicionada à segunda instrução, o intervalo é de 4000-4500

--A terceira afirmação verifica se a nova partição existe e se há linhas


Excluir\Mesclar partição

ALTERAR FUNÇÃO DE PARTIÇÃO partfun1() FAIXA DE FUSÃO ('2000')

A partição de 1000-2000 foi deletada e incorporada a 1000-3000

--Incapaz de executar ALTER TABLE NAME, DROP PARTITION PARTITIONNAME como o Oracle;


Exclua a tabela de partições e o grupo de arquivos correspondente

A ordem de exclusão é: excluir a tabela de partições, excluir o esquema de partições, excluir a função de partição e, finalmente, excluir o grupo de arquivos, e o arquivo correspondente é excluído após o grupo de arquivos ser excluído


Exemplo de converter uma tabela particionada em uma tabela normal e uma tabela normal em uma tabela particionada

TABELA DE DESCARTE 1;

CRIAR TABELA PARTTABLE1(

[Id] [int] IDENTIDADE(1,1) NÃO NULA,

[Nome] [varchar] (16) NÃO NULO,

[ID2] [int] NÃO NULO

) ON partschema1(Id2);

inserir em parttable1 valores ('1',1);

inserir valores em parttable1 ('1001', 1001);

inserir valores em parttable1 ('2001', 2001);

inserir valores no parttable1 ('3001', 3001);

inserir valores no parttable1 ('4001', 4001);

1. A restrição única criada na tabela de partição deve conter uma coluna de partição.

ALTER TABLE PARTTABLE1 ADICIONAR RESTRIÇÃO PK_prattable1_id CLUSTER DE CHAVE PRIMÁRIA ([ID] ASC)

A coluna de erro 'Id2' é a coluna de particionamento do índice 'PK_prattable1_id'. Colunas de partição para um índice único devem ser um subconjunto da chave de índice.

2. Crie um novo índice agrupado na coluna de partição id2, e o parttable1 ainda será uma tabela particionada

criar CI_prattable1_id2 de índice agrupado no parttable1(id2);

3. A coluna de partição id2 cria um índice não agrupado, e o parttable1 ainda é uma tabela particionada

índice de queda CI_prattable1_id2 no parttable1;

criar NCI_prattable1_id2 de índice não agrupado no parttable1(id2);

4. A coluna de id de coluna não particionada cria um índice clusterizado, parttable1 ou uma tabela particionada, indicando que a coluna não particionada pode ser uma coluna de índice de cluster

criar CI_prattable1_id de índice clusterizado no parttable1(id);

5. A coluna de partição ID2 é reconstruída em um índice não agrupado e não utiliza um esquema de particionamento, o parttable1 ainda é uma tabela de partições

criar índice não agrupado NCI_prattable1_id2 no parttable1(id2) COM (DROP_EXISTING = LIGADO) EM [PRIMÁRIO];

6. A coluna de partição id2 é reconstruída em um índice clusterizado sem a condição ON, e parttable1 ainda é uma tabela de partições

drop index CI_prattable1_id no parttable1;

drop index NCI_prattable1_id2 no parttable1;

criar CI_prattable1_id2 de índice agrupado no parttable1(id2);

criar índice clusterizado CI_prattable1_id2 em parttable1(id2) COM (DROP_EXISTING = ON);

7. A coluna particionada id2 é reconstruída em um índice clusterizado com condição ON, mas sem usar o esquema de particionamento, e o parttable1 se torna uma tabela não particionada

Crie CI_prattable1_id2 de índice agrupado em parttable1(id2) COM (DROP_EXISTING = LIGADO) EM [PRIMÁRIO];

8. A coluna de partição id2 é reconstruída em um índice agrupado e, usando o esquema de particionamento, o parttable1 torna-se uma tabela particionada

criar CI_prattable1_id2 índice clusterizado no parttable1(id2) COM (DROP_EXISTING = ON) no partschema1(Id2);

9. Após excluir o índice agrupado no 8 acima, o parttable1 ainda é uma tabela particionada

índice de queda CI_prattable1_id2 no parttable1;

10. A coluna de partição ID2 é criada como um índice agrupado e não usa o esquema de particionamento, e o parttable1 se torna uma tabela não particionada

criar CI_prattable1_id2 de índice clusterizado no parttable1(id2) EM [PRIMÁRIO];

11. Após excluir o índice agrupado dos 10 acima de mim, o parttable1 ainda é uma tabela não particionada

índice de queda CI_prattable1_id2 no parttable1;

12. A coluna de partição id2 foi criada recentemente como um índice não agrupado, embora o esquema de particionamento seja usado, ainda é uma tabela não particionada

criar NCI_prattable1_id2 índice não agrupado no parttable1(id2) no partschema1(Id2);


Se a tabela particionada for convertida em uma tabela normal, a restrição da chave primária é excluída, e o índice do cluster é reconstruído ou reconstruído na chave primária dos campos da chave primária original, mas isso não está relacionado ao esquema de particionamento

ALTERAR TABELA Table_name DROP RESTRIÇÃO PK_NAME COM (>

CRIAR PK_NAME DE ÍNDICE AGRUPADO EM Table_name(coluna) COM (EM [PRIMÁRIO];

ou

ALTERAR TABELA Table_name ADICIONAR RESTRIÇÃO PK_NAME CHAVE PRIMÁRIA CLUSTERED(coluna) COM (EM [PRIMÁRIA];


Se a tabela normal for convertida em uma tabela particionada, se a chave primária original for mantida, a restrição da chave primária é eliminada, e então a chave primária é criada sem defini-la como um índice agregado, e então um novo índice agregado é criado, e o esquema de particionamento é usado no índice agregado

ALTERAR TABELA Table_name DROP RESTRIÇÃO PK_NAME COM (>

ALTERAR TABELA Table_name ADICIONAR RESTRIÇÃO PK_NAME CHAVE PRIMÁRIA NONCLUSTERED(coluna) COM (EM [PRIMÁRIA];

--Criar uma chave primária, mas não definir como um índice agrupado

CRIAR index_name DE ÍNDICE AGRUPADO EM Table_name(coluna) NO esquema de partição (campo de partição)

--Criar um novo índice clusterizado no qual um esquema de particionamento é usado


Consulte o número total de linhas e o tamanho de uma tabela particionada, por exemplo, a tabela é CRM. E-mailLog

Executivo sp_spaceused 'CRM. E-mailLog';


Consulte as informações de uma tabela particionada, quantas linhas cada partição tem, por exemplo, a tabela é CRM. E-mailLog

selecione converter(varchar(50), ps.name

) como partition_scheme,

p.partition_number,

converter(varchar(10), ds2.name

) como grupo de arquivos,

convert(varchar(19), isnull(v.value, '''), 120) como range_boundary,

str(p.rows, 9) como linhas

De sys.indexes i

junte-se sys.partition_schemes ps em i.data_space_id = ps.data_space_id

Junte-se sys.destination_data_spaces DDS

em ps.data_space_id = dds.partition_scheme_id

Junte-se sys.data_spaces DS2 em dds.data_space_id = ds2.data_space_id

Junte-se às partições sys.partitions P em dds.destination_id = p.partition_number

e p.object_id = i.object_id e p.index_id = i.index_id

Junte-se sys.partition_functions PF em ps.function_id = pf.function_id

JOINA SYS. Partition_Range_values v em pf.function_id = v.function_id

e v.boundary_id = p.partition_number - pf.boundary_value_on_right

ONDE i.object_id = object_id('crm. E-mailLog')

e i.index_id em (0, 1)

Ordem por p.partition_number


Funções de partição de consulta

selecione * de sys.partition_functions


Veja a arquitetura da partição

selecione * de sys.partition_schemes


Endereço original:O login do hiperlink está visível.




Anterior:O sistema Kafka Windows trava após rodar por um período de tempo
Próximo:SQL Server DBCC DROPCLEANBUFFERS é inválido?
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com