Pregunta

La base de datos que estoy trabajando es en la actualidad más de 100 GiB y promete crecer mucho más grande durante el próximo año o así. Estoy tratando de diseñar un esquema de partición que va a trabajar con mi conjunto de datos, pero hasta ahora han fracasado estrepitosamente. Mi problema es que las consultas en esta base de datos se suelen poner a prueba los valores de varias columnas en ésta mesa grande, terminando en conjuntos de resultados que se superponen de manera impredecible.

Todo el mundo (los administradores de bases con los que trabajo) advierte en contra de tener tablas de un tamaño determinado y he investigado y evaluado las soluciones que he encontrado, pero todas parecen depender de una característica de los datos que permite la tabla lógica fraccionamiento. Por desgracia, no veo una manera de lograr que, dada la estructura de mis mesas.

Aquí está la estructura de nuestras dos mesas principales para poner esto en perspectiva.

Table: Case
Columns:
Year
Type
Status
UniqueIdentifier
PrimaryKey
etc.

Table: Case_Participant
Columns:
Case.PrimaryKey
LastName
FirstName
SSN
DLN
OtherUniqueIdentifiers

Tenga en cuenta que cualquiera de las columnas anteriores se pueden utilizar como parámetros de consulta.

¿Fue útil?

Solución

En lugar de adivinar, medida. Recopilar estadísticas de uso ( consultas se ejecuten ), fijamos en las propias estadísticas del motor como sys.dm_db_index_usage_stats y luego tomar una decisión informada: la partición que supera los saldos tamaño de los datos y da mejor afinidad por las consultas chocan con más frecuencia será un buen candidato. Por supuesto, usted tiene que comprometer.

Además, no hay que olvidar que partición es por índice (donde 'mesa' = uno de los índices), no por mesa, por lo que la pregunta no es qué partición en, pero que los índices de partición o no y qué función de partición para su uso. Sus índices agrupados en las dos mesas van a ser los candidatos más probables, obviamente, (no mucho sentido para particionar sólo un índice no agrupado y no se reparte el clúster uno) por lo que, a menos que usted está considerando rediseño de sus claves agrupadas, la cuestión es realmente lo que la función de partición de elegir para sus índices agrupados.

Si hubiera aventurar una conjetura yo diría que para cualquier dato que se acumula con el tiempo (como 'casos' con un 'año') la partición más natural es la ventana deslizante .

Otros consejos

Si usted no tiene otra elección que puede particionar por módulo de teclas el número de tablas de particiones. Digamos que usted desea particionar a 10 mesas. Deberá definir las tablas:
Case00
Case01
...
Case09

Y que dividir los datos por UniqueIdentifier o módulo de PrimaryKey 10 y coloque cada registro de la tabla correspondiente (Dependiendo de su única UniqueIdentifier puede que tenga que empezar la asignación manual de los IDS).

Cuando se realiza una consulta, se tendrá que ejecutar misma consulta en todas las mesas, y utilizar UNION para combinar el conjunto de resultados en un único resultado de la consulta.

No es tan buena como la partición de las tablas sobre la base de una cierta separación lógica que corresponde a la consulta era de esperar, pero es mejor que golpear el límite de tamaño de una mesa.

Otra cosa posible mirar (antes de la partición) es su modelo.

¿Está usted en una base de datos normalizada? ¿Hay otras medidas que podrían mejorar el rendimiento mediante diferentes opciones en la normalización / deshielo /-normalización parcial? ¿Hay opciones para transformar los datos en un modelo tridimensional estrellas de estilo Kimball que es óptimo para la presentación de informes / consultas?

Si no se va a dejar caer las particiones de la tabla (ventana deslizante, como se ha mencionado) o tratar diferentes particiones de manera diferente (se dice ninguna columna se pueden utilizar en la consulta), no estoy seguro de lo que está tratando de salir de la partición que no ya salir de su estrategia de indización.

No estoy al tanto de cualquier límite de mesa en filas. AFAIK, el número de filas está limitado sólo por el almacenamiento disponible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top