MTBASE / SYBASE DE COLOMBIA
 
Búsqueda avanzada...
Versión para imprimir Versión para imprimir Enviar vínculo por e-mail Enviar por e-mail Ver atributos del documento Atributos del documento
 

Particionamiento Semántico en Adaptive Server Enterprise

Introducción

La versión 15.0 de Adaptive Server Enterprise (ASE) introdujo el particionamiento semántico. El particionamiento es particularmente útil en el manejo de tablas e índices grandes, ya que permite que dichos objetos sean divididos en pedazos más pequeños y fáciles de manipular.

Las particiones son objetos de base de datos y pueden ser manipulados independientemente. Usted puede, por ejemplo, cargar datos o crear un índice a nivel de partición. A pesar de esto, las particiones son transparentes para el usuario final, quien puede consultar y modificar los datos usando los mismos comandos, independientemente de si la tabla está particionada o no.

ASE soporta particionamiento horizontal, en el cual una selección de filas de la tabla puede ser distribuida entre particiones que residan sobre diferentes dispositivos de disco. Las filas de las tablas o de los índices son asignadas a una partición de acuerdo a una estrategia semántica o tipo round-robin.

Las estrategias de particionamiento semántico usan los valores de los datos especificados en columnas llave de cada fila para determinar la asignación de partición para dicha fila. La estrategia de particionamiento round-robin asigna filas de manera aleatoria, sin referencia a los valores de los datos.

Este documento brinda una descripción general de las estrategias de particionamiento disponibles en ASE y discute los tipos de índices soportados sobre las tablas particionadas.

Estrategias de particionamiento

A partir de ASE 15.0, se soportan cuatro estrategias de particionamiento:

Particionamiento hash (semántico)

En el particionamiento hash una función hash del sistema determina la asignación de partición para cada fila.

Ejemplo

create table lineitem ( l_orderkey integer not null ,
    l_partkey integer not null,
    l_suppkey integer not null,
    l_linenumber integer not null,
    l_quantity double not null,
    l_extendedprice double not null,
    otras columnas … )
partition by hash (l_orderkey, l_linenumber)
    (litem_hash1 on segment1,
    litem_hash2 on segment2,
    litem_hash3 on segment3,
    litem_hash4 on segment4 )

ASE aplica una función hash del sistema sobre los valores de las columnas l_orderkey y l_linenumber y determina sobre cuál partición será almacenada la fila: litem_hash1, litem_hash2, litem_hash3 o litem_hash4.

Cuándo usar particionamiento hash

  • Tablas grandes sin orden particular de valores sobre una llave que sea comúnmente usada por las aplicaciones para ordenamiento o agrupamiento.
  • Las particiones hash brindan balanceo de carga de los datos entre particiones.
  • La mayor parte de los tipos de datos pueden ser usados como columnas para la función hash.
  • Es fácil crear n particiones, ya que no se requiere especificar un rango o lista de valores para cada partición.
  • Es importante no elegir una columna con un alto grado de valores duplicados o en donde una valor sea mucho más frecuente que otros, ya que esto puede generar particiones no balanceadas (unas más grandes que otras).

Particionamiento por lista (semántico)

En el particionamiento por lista los valores de las columnas llave son comparados con conjuntos de valores especificados por el usuario, para cada partición. Las correspondencias exactas determinan la asignación de particiones.

Ejemplo

create table nation ( n_nationkey integer not null,
    n_name char(25) not null,
    n_regionkey varchar(30) not null,
    n_comment varchar(152) not null
) on segment1
partition by list (n_regionkey)
    (region1 values ('Americas'),
    region2 values ('Asia'),
    region3 values ('Europe'),
    region4 values ('Australia’, 'Other') )

ASE compara los valores de la columna n_regionkey son comparados con la lista de valores de cada partición.

  • Si la columna n_regionkey = 'Americas', la fila va a la partición region1
  • Si la columna n_regionkey = 'Asia', la fila va a la partición region2
  • Si la columna n_regionkey = 'Europe', la fila va a la partición region3
  • Si la columna n_regionkey = 'Austrlia' o 'Other', la fila va a la partición region4
  • Restringir los datos a una lista de valores es como una restricción tipo CHECK sobre los valores válidos de los datos de la columna.

Adicionalmente, una consulta como select * from nation where n_regionkey='Americas', permite que el procesador de consulta elimine (no lea) las particiones en donde el valor no se encuentra (region2, region3 y region4).

Particionamiento por rango (semántico)

En el particionamiento por rango los valores de las columnas llave son comparados con un conjunto de valores superior e inferior, definidos por el usuario y asociados a cada partición. Los valores de las columnas llave que caigan dentro de los límites especificados, determinan la asignación de particiones.

Ejemplo

create table customer ( c_custkey integer not null,
    c_name varchar(20) not null,
    c_address varchar(40) not null,
    otras columnas … )
partition by range (c_custkey)
    (cust_ptn1 values <= (20000) on segment1,
    cust_ptn2 values <= (40000) on segment2,
    cust_ptn3 values <= (60000) on segment3 )

ASE compara los valores de la columna c_custkey:

  • Si el valor de cust_ptn1 es <= 20000, la fila quedará en la partición cust_ptn1
  • Si el valor de cust_ptn1 es > 20000 y <= 40000, la fila quedará en la partición cust_ptn2
  • Si el valor de cust_ptn1 es > 40000 y <= 60000, quedará en la partición cust_ptn2

Adicionalmente, una consulta como select * from customer where c_custkey = 30000, permite que el procesador de consultas elimine (no lea) las particiones sobre las que el valor no se encuentra (cust_ptn1 y cust_ptn2).

Cuándo usar particionamiento por rango

  • Típicamente las tablas más grandes de la base de datos son candidatas a ser particionadas usando rangos. Ejemplos:
    • Datos basados en tiempo (pedidos semanales)
    • Datos ordenados (rangos de salario)
  • El particionamiento por rango permite archivar datos obsoletos. Ejemplo:
    • Eliminar extractos bancarios con más de 5 años
  • El particionamiento por rango permite adicionar nuevos rangos, sin la necesidad de reorganizar el resto de la tabla.

Particionamiento round-robin

En el particionamiento round-robin las filas son asignadas de manera aleatoria a las particiones, usando un esquema round-robin, de tal manera que cada partición contiene, más o menos, la misma cantidad de filas. Esta es la estrategia predeterminada y la que se trabaja en las versiones de ASE anteriores a la 15.0.

Ejemplo (versión 15.0 en adelante)

create table customer ( c_custkey integer not null,
    c_name varchar(20) not null,
    c_address varchar(40) not null,
    otras columnas … )
partition by roundrobin
    ( part1, part2, part3, part4 )

Ejemplo (versiones anteriores a la 15.0)

create table customer ( c_custkey integer not null,
    c_name varchar(20) not null,
    c_address varchar(40) not null,
    otras columnas … )
alter table customer partition 4

Índices sobre tablas particionadas

A partir de ASE 15.0 se soportan dos tipos de índices sobre tablas particionadas:

Índices globales

Los índices globales cubren todas las particiones de datos de la tabla.

Ejemplo

Índice nonclustered global:

create unique index ci_nkey_ckey
on customer(c_nationkey, c_custkey)
on segment4

En éste ejemplo las páginas del nivel hoja del índice apuntan a las páginas de datos de las diferentes particiones. Adicionalmente, la estructura del índice reside sobre su propio segmento.

Índices locales

Un índice local cubre los datos a nivel de cada partición. Podrían verse como "sub-índices", uno para cada partición.

Ejemplo 1

Índice nonclustered local:

create unique index ci_nkey_ckey
on customer(c_nationkey, c_custkey)
on segment4 local index 

En éste ejemplo, se crea una estructura de índice independiente para cada partición, pero todas las estructuras de índice residen sobre el mismo segmento.

Ejemplo 2

Los índices tipo clustered siempre son locales sobre tablas particionadas tipo hash, lista o rango.

Índice clustered:

create unique clustered index ci_nkey_ckey
on customer(c_custkey, c_nationkey)

En éste ejemplo, la estructura del índices es partida entre las diferentes particiones y sus segmentos asociados.

Otras consideraciones

Procesamiento de consultas

Con el uso de particionamiento semántico, el procesador de consultas de ASE obtiene beneficios desde el punto de vista de rendimiento:

  • Utiliza sólo las particiones necesarias en operaciones de join, permitiendo la lectura de una menor cantidad de información y la ejecución del join en paralelo (joins dirigidos).
  • Elimina particiones, teniendo acceso a una porción menor de la tabla; esto brinda mejor rendimiento en ambientes mixtos.
  • Usa índices locales sobre particiones, haciendo que el acceso a los datos sea más eficiente, ya que usualmente los índices locales son más pequeños; esto también brinda mejor concurrencia.
  • Es posible mantener y actualizar estadísticas específicas para cada partición.

Comandos T-SQL

Los siguientes comandos fueron extendidos en la versión 15.0 para dar soporte a las particiones semánticas:

  • create table - Permite especificar el tipo de particionamiento, columnas llave, rangos de valores, etc. usando la cláusula partition by. Los únicos tipos de datos que no pueden ser usados como llaves son text/image, bit, clases Java y columnas computadas.
  • alter table - Incorpora la cláusula partition by. Se puede usar el comando alter table para:
    • Particionar una tabla no particionada.
    • Cambiar la estrategia de particionamiento, número de particiones, columnas llave, asignación de segmentos o para agregar más particiones a una tabla particionada.
  • create index - Permite especificar si el índice es local, usando la cláusula local index.
  • select into - Usted puede usar select into para mover el contenido de una tabla hacia una nueva tabla particionada.
  • truncate table - Usted puede eliminar todos los datos de una partición usando la cláusula partition.

Configuración y procedimientos almacenados

  • El nuevo parámetro 'number of open partitions' se introdujo en la versión 15.0; debe ser suficientemente alto para poder abrir múltiples tablas en un mismo instante, cada una con una o más particiones.
  • Desde la versión 15.0 el procedimiento sp_helpartition muestra información sobre cada partición.
  • Otros procedimientos del sistema han sido extendidos en la versión 15.0 para mostrar información sobre particiones:
    • sp_helpsegment, sp_help, sp_sysmon, sp_objectsegment, sp_flushstat, sp_countmetadata, sp_monitorconfig, sp_hidetext, sp_sysmon, sp_helptext, sp_placeobject, sp_dropsegement, etc.

Funciones del sistema

  • Algunas funciones del sistema han sido rebautizadas:
    • data_pgs() -> data_pages()
    • ptn_data_pgs() -> data_pages()
    • reserved_pgs() -> reserved_pages()
    • used_pgs() -> used_pages()
    • rowcnt() -> row_count()
  • Hay dos nuevas funciones del sistema, relativas a particiones: particion_id() y partition_name().
  • La sintaxis de la función derived_stat() fue extendida para soportar particiones (4o. argumento).

Utilitarios

  • update statistics ahora funciona a nivel de partición, reduciendo ampliamente el volumen de trabajo requerido.
  • reorg ahora trabaja a nivel de partición.
    • reclaim_space, compact, forwarded_rows pueden ejecutarse sobre particiones individuales.
  • El bcp fue mejorado para soportar particiones:
    • bcp out de todas las particiones o un sub-conjunto de particiones.
    • bcp out a un archivo a múltiples archivos por partición.
    • bcp in de un archivo, múltiples archivos, o múltiples archivos por partición.
    • bcp in en paralelo a particiones específicas.

Diagnósticos

  • El comando dbcc soporta ahora particiones.
  • Algunos comandos dbcc fueron actualizados para trabajar sobre particiones específicas (por ejemplo, checktable, tablealloc, log, pglinkage, allocdump, extentcheck, extentzap etc.)

Conclusiones

ASE 15.0 introdujo nuevos esquemas de particionamiento semántico. Estos esquemas de particionamiento brindan un mayor rendimiento a las consultas, en bases de datos de gran tamaño, reduciendo el volumen de recursos requeridos por el procesador de consultas de ASE y permitiéndole sacar mejor provecho de las operaciones en paralelo.

Puntualmente, algunas de las ventajas son:

  • Acceso a un sub-conjunto de los datos (partición) de la tabla.
  • Joins dirigidos sólo a las particiones necesarias.
  • Menor contención sobre los recursos.
Atributos del Documento
Resumen: Este documento brinda una descripción general de las estrategias de particionamiento disponibles en ASE y discute los tipos de índices soportados sobre las tablas particionadas.
Código: 10198 Última Modificación: Sep 22, 2005
Temas: Administración, Rendimiento Tipo de Documento: Documento Técnico
Productos: Adaptive Server Enterprise Versión: 15.0 en Adelante
Plataformas: Todas las Plataformas Sistema Operativo: Todos los Sistemas Operativos
 
 Inicio   Sobre MTBASE   Sobre Sybase   Empleos en MTBASE   Mapa del Sitio   Aspectos Legales y Políticas de Privacidad