Compartilhar via


Criando exibições particionadas distribuídas

Quando você criar um conjunto de exibições particionadas, distribuídas para implementar uma federação de servidores de banco de dados, considere o seguinte:

  • Determine o padrão de instruções SQL executado pelo aplicativo

  • Determine como as tabelas são inter-relacionadas.

  • Corresponda à freqüência de instruções SQL segundo as partições definidas na análise das chaves estrangeiras.

  • Defina as regras de roteamento da instrução SQL.

Padrão das instruções SQL executadas pelo aplicativo

Desenvolva uma lista das instruções SQL a serem executadas pelo aplicativo durante os períodos normais de processamento. Divida a lista nas categorias SELECT, UPDATE, INSERT e DELETE e classifique a lista em cada categoria por freqüência de execução. Se as instruções SQL fizerem referência a procedimentos armazenados, use as instruções base SELECT, INSERT, UPDATE e DELETE do procedimento armazenado. Se um banco de dados existente do SQL Server estiver sendo particionado, use SQL Server Profiler para obter essa lista.

A recomendação para usar a freqüência de instruções SQL é uma aproximação razoável no OLTP (Processamento de transações online) ou banco de dados de site em que as exibições particionadas e distribuídas funcionam melhor. Esses sistemas são caracterizados por instruções individuais SQL que recuperam relativamente pequenas quantidades de dados em comparação com os tipos de consultas em um sistema de apoio à decisão ou OLAP. Quando cada instrução SQL faz referência a uma pequena quantidade de dados, só pelo estudo da freqüência de cada instrução gera uma aproximação razoável do tráfego de dados no sistema. No entanto, vários sistemas têm alguns grupos de instruções SQL que fazem referência a muitos dados. É possível realizar a etapa extra de pesar essas consultas para refletir seus requisitos para grande volume de dados.

Relações das tabelas

A intenção é encontrar os clusters de tabelas que podem ser particionados na mesma dimensão. Por exemplo, número de peça ou número de departamento, de modo que todas as linhas relativas a ocorrências individuais dessa dimensão terminem no mesmo servidor membro. Por exemplo, determine que a forma de particionar o banco de dados será por região. Para oferecer suporte a isso, até mesmo as tabelas que não têm um número de região em suas chaves precisam ser particionadas de alguma forma relacionada a uma região. Nesse tipo de banco de dados, mesmo quando a tabela Customer não tiver uma coluna de número de região, se as regiões forem definidas como reuniões de estados e distritos inteiros, a coluna Customer.StateProvince poderá ser usada para particionar os clientes com relação à região.

Como definem relações entre tabelas, as chaves estrangeiras explícitas e implícitas são os principais elementos a serem verificados quando se buscam formas de particionar dados. Estude as definições de chave estrangeira explícita para determinar como as consultas usariam freqüentemente as linhas de uma tabela para localizar linhas em outra tabela. Estude também as chaves estrangeiras implícitas ou as formas pelas quais as instruções SQL usam os valores das linhas de uma tabela para referenciar linhas de outra tabela em operações de junção, mesmo quando não há definição de chave estrangeira específica. Como as chaves estrangeiras implícitas não são definidas explicitamente como parte do esquema de banco de dados, é preciso examinar as instruções SQL geradas pelo aplicativo para entender se há instruções que unem tabelas usando colunas não-chave. Essas chaves estrangeiras implícitas são indexadas, em geral, para aprimorar o desempenho da junção. Portanto, os índices definidos no banco de dados também devem ser examinados.

Freqüência das instruções SQL com relação às partições

Corresponda a freqüência de instruções SQL com as partições definidas na análise de chaves estrangeiras. Selecione o particionamento que suporta melhor a mistura de instruções SQL no aplicativo. Se alguns conjuntos de tabelas puderem ser particionados de mais de uma forma, use a freqüência de instruções SQL para determinar quais partições satisfazem o maior número de instruções SQL. As tabelas referenciadas com mais freqüência pelas instruções SQL são aquelas particionadas em primeiro lugar. Priorize a seqüência em que as tabelas são particionadas com base na freqüência com que as tabelas são referenciadas.

O padrão de instruções SQL também influencia na decisão de particionar ou não uma tabela:

  • Particione uma tabela se mais de 5 por cento das instruções que referenciam uma tabela forem instruções INSERT, UDATE ou DELETE, e se a tabela puder ser particionada com base na dimensão escolhida.

  • Mantenha cópias completas das tabelas de cada servidor membro se menos que 5 por cento das instruções que referenciam a tabela forem instruções INSERT, UPDATE ou DELETE. Defina também como as atualizações serão feitas, de modo que todas as cópias da tabela sejam atualizadas. Se for necessária uma alta integridade transacional, codifique gatilhos que realizem atualizações distribuídas de todas as cópias no contexto de uma transação distribuída. Se a alta integridade transacional não for necessária, use um dos mecanismos de replicação do SQL Server para propagar atualizações de uma cópia da tabela em todas as outras cópias.

  • Não particione nem copie uma tabela quando mais de 5 por cento das instruções que referenciam uma tabela forem instruções INSERT, UDATE ou DELETE, e quando a tabela não puder ser particionada com base na dimensão escolhida.

Regras de roteamento de instruções SQL

As regras de roteamento precisam definir qual servidor membro pode processar cada instrução SQL da forma mais eficaz. Elas precisam estabelecer uma relação entre o contexto da entrada do usuário e do servidor membro que contém a massa dos dados requeridos para completar a instrução. Os aplicativos precisam tomar um dado inserido pelo usuário e torná-lo correspondente com as regras de roteamento para determinar qual servidor membro deverá processar a instrução SQL.