Compartir a través de


Diseñar vistas con particiones distribuidas

Al diseñar un conjunto de vistas con particiones distribuidas con el fin de implementar una federación de servidores de bases de datos, tenga en cuenta lo siguiente:

  • Determinar el patrón de instrucciones SQL ejecutadas por la aplicación.

  • Determinar cómo se relacionan las tablas entre sí.

  • Hacer coincidir la frecuencia de las instrucciones SQL con las particiones definidas al analizar las claves externas.

  • Definir las reglas de enrutamiento de la instrucción SQL.

Patrón de instrucciones SQL ejecutadas por la aplicación

Desarrolle una lista de las instrucciones SQL que ejecutará la aplicación durante los períodos de procesamiento normales. Divida la lista en las categorías SELECT, UPDATE, INSERT y DELETE y ordene la lista de cada categoría por frecuencia de ejecución. Si las instrucciones SQL hacen referencia a procedimientos almacenados, utilice las instrucciones base SELECT, INSERT, UPDATE y DELETE del procedimiento almacenado. Si va a crear particiones en una base de datos de SQL Server existente, puede utilizar el SQL Server Profiler para obtener la lista.

La recomendación de utilizar la frecuencia de las instrucciones SQL se aplica también en la base de datos típica de OLTP (procesamiento de transacciones en línea) o de un sitio Web, en la que las vistas divididas distribuidas funcionan mejor. Estos sistemas se caracterizan por tener instrucciones SQL individuales que recuperan cantidades relativamente pequeñas de datos si se comparan con los tipos de consultas en un sistema OLAP o de ayuda de toma de decisiones. Cuando cada instrucción SQL hace referencia a una cantidad pequeña de datos, con el simple estudio de la frecuencia de cada instrucción se obtiene una aproximación razonable del tráfico de datos en el sistema. No obstante, numerosos sistemas tienen algún grupo de instrucciones SQL que hacen referencia a un gran volumen de datos. Es posible que convenga realizar el paso adicional de ponderar estas consultas para que reflejen sus requisitos de una cantidad mayor de datos.

Relaciones de las tablas

La intención es encontrar clústeres de tablas en donde crear particiones a lo largo de la misma dimensión, por ejemplo, números de pieza o números de departamento, de manera que todas las filas relacionadas con repeticiones individuales de una dimensión terminen en el mismo servidor miembro. Por ejemplo, puede determinar que una forma de dividir la base de datos sea por regiones. Para permitir esto, incluso las tablas que no tengan un número de región en su clave deben poder dividirse de alguna manera relacionada con una región. En bases de datos de este tipo, aunque la tabla Customer no contenga una columna de número de región, si las regiones se definen como colecciones de provincias o estados completos, la columna Customer.StateProvince se puede utilizar para dividir los clientes en las distintas regiones.

Las claves externas implícitas y explícitas son los principales elementos a revisar cuando se busca la manera de dividir los datos en particiones, ya que éstos definen las relaciones entre tablas. Estudie las definiciones de claves externas explícitas para determinar el modo en que las consultas utilizarán normalmente las filas de una tabla para buscar filas de otra tabla. Asimismo, estudie las claves externas implícitas o las formas en las que las instrucciones SQL utilizan los valores de las filas de una tabla para hacer referencia a las filas de otra tabla en operaciones de combinación, incluso si no hay definiciones de clave externa concretas. Debido a que las claves implícitas externas no se definen explícitamente como parte del esquema de la base de datos, debe revisar las instrucciones SQL generadas por la aplicación para ver si hay instrucciones que combinen tablas que utilicen columnas sin clave. Normalmente, se crea un índice de estas claves externas implícitas para mejorar el rendimiento de combinación. Por lo tanto, debe revisar también los índices definidos en la base de datos.

Frecuencia de las instrucciones SQL con las particiones

Haga coincidir la frecuencia de las instrucciones SQL con las particiones definidas al analizar las claves externas. Seleccione el tipo de partición más apropiado para la combinación de instrucciones SQL de su aplicación. Si se pueden crear particiones de algunos conjuntos de tablas de más de una manera, utilice la frecuencia de las instrucciones SQL para determinar qué partición satisface un mayor número de instrucciones SQL. Las tablas a las que más frecuentemente hagan referencia las instrucciones SQL son las que debe incluir en la partición en primer lugar. Dé prioridad a la secuencia de partición de las tablas de acuerdo con la frecuencia con la que se hace referencia a dichas tablas.

El patrón de instrucciones SQL también influye en la decisión de dividir o no una tabla:

  • Divida una tabla en particiones si más de un 5% de las instrucciones que hacen referencia a una tabla son INSERT, UPDATE o DELETE y se puede dividir la tabla en particiones a lo largo de la dimensión que ha elegido.

  • Conserve copias completas de las tablas en cada servidor miembro si menos del 5% de las instrucciones que hacen referencia a la tabla son INSERT, UPDATE o DELETE. También debe definir cómo se realizarán las actualizaciones de forma que se actualicen todas las copias de la tabla. Si se requiere una gran integridad para las transacciones, puede codificar desencadenadores que distribuyan las actualizaciones de todas las copias dentro del contexto de una transacción distribuida. En caso contrario, puede utilizar uno de los mecanismos de replicación de SQL Server para propagar las actualizaciones desde una copia de la tabla al resto de copias.

  • No divida en particiones ni copie una tabla si más de un 5% de las instrucciones que hacen referencia a una tabla son INSERT, UPDATE o DELETE y no se puede dividir la tabla en particiones a lo largo de la dimensión que ha elegido.

Reglas de enrutamiento de la instrucción SQL

Las reglas de enrutamiento deben ser capaces de definir qué servidor miembro puede procesar de manera más eficaz cada instrucción SQL. Estas reglas deben establecer una relación entre el contexto de la información suministrada por el usuario y el servidor miembro que contiene la mayor parte de los datos necesarios para completar la instrucción. Las aplicaciones deben ser capaces de tomar una parte de los datos introducidos por el usuario y hacer que concuerden con las reglas de enrutamiento, para determinar así qué servidor miembro debe procesar la instrucción SQL.