2010-11-29 11 views
5

Contexto: base de datos Oracle 10.¿Usaría particiones sería una buena idea en tal situación?

En una tabla bastante grande (varios millones de registros) recientemente empezamos a ver algunos problemas de rendimiento. La tabla tiene algunos comportamientos/condiciones especiales.

  • su mayoría escribir una vez y luego nunca se cambió de nuevo
  • durante el primer día o los registros se clasifican desde 0..N (permite llamar a esa clase de columna). registros podrían obtener reclasificados varias veces durante el primer día
  • nuevas entradas se agregan a la clase 0 significa "no ha sido clasificado"
  • cada hora o así un proceso clasifica las nuevas reocrds y les da una nueva clase de 1..N
  • todos los lectores están interesados ​​únicamente en la clase 1
  • todos los registros anteriores a un día casi no cambian su clase,> 1 está siendo ordenados en una después de unos pocos días

Ahora, mientras se realiza la mayor parte de acceso a la clase 1, esa columna a menudo está involucrada en consultas (clase = 1), junto con otras condiciones ons. Tenemos un índice en la columna de clase, y luego nuevamente para ciertas otras columnas.

A mi pregunta: ahora estamos pensando en dividir esa tabla por clase. Por lo que he entendido, esto haría que indexar/trabajar con los datos sea más rápido, ya que la clase = 1 ya está separada del resto de los datos y, por lo tanto, su acceso es implícitamente más eficiente. ¿Es esto correcto?

Si está de acuerdo en que esta es una buena idea, leeré más a fondo el tema.

Gracias Saludos

Actualizar 2010.11.30

Muchas gracias por la entrada. No sabía que era una opción adicional :) gracias por señalar eso (antes de invertir demasiado tiempo en ello). Pero al lado del problema de la licencia, me parece que la partición no es necesariamente una buena solución en este contexto.

Respuesta

4

¿Qué operaciones están experimentando lentitud y ha podido identificar por qué esas operaciones son lentas?

Si particiona por clase, reducirá la velocidad del proceso de actualización de la clase para una fila.Como eso obligaría a una fila a moverse de una partición a otra, estaría convirtiendo una actualización en una eliminación de la primera partición y una inserción en la segunda partición. Si su proceso por hora es lento y lento, porque lleva tiempo encontrar todos los registros nuevos, la compensación de rendimiento aquí puede ser bastante razonable. Si su proceso por hora es lento porque lleva tiempo calcular qué clase nueva debería ser y actualizar todas las filas, por otro lado, esa compensación es probablemente una idea muy pobre. Dado que el particionamiento es una opción de costo adicional además de la licencia Enterprise Edition, sugiero que se asegure de no utilizar algunos índices basados ​​en funciones para obtener la mayoría de las mejoras de rendimiento a un costo relativamente bajo. . Si, por ejemplo, que tenía dos índices basados ​​en funciones

CREATE INDEX idx_new_entries 
    ON your_table((CASE WHEN class = 0 THEN primary_key ELSE null END)); 

CREATE INDEX idx_class1_entries 
    ON your_table((CASE WHEN class = 1 THEN primary_key ELSE null END)); 

junto con un par de puntos de vista

CREATE VIEW vw_new_entries 
AS 
SELECT (CASE WHEN class = 0 THEN primary_key ELSE null END) primary_key, 
     <<list of columns>> 
    FROM your_table 
WHERE class = 0 

CREATE VIEW vw_class1_entries 
AS 
SELECT (CASE WHEN class = 1 THEN primary_key ELSE null END) primary_key, 
     <<list of columns>> 
    FROM your_table 
WHERE class = 1 

entonces cualquier consultas en los nuevos puntos de vista que se filtraban en la PRIMARY_KEY usarían la función de base índices que, a su vez, solo indexarían las filas apropiadas en la tabla subyacente. Eso puede permitirle mejorar el rendimiento de búsqueda sin necesidad de recurrir a particiones.

-1

Yepp, parece una buena idea.

Sin embargo, hay mejores alternativas a esto, pero una solución fácil es una partición.

+1

El particionamiento, al menos para Oracle, es una opción costosa, y de ninguna manera apropiada en todas las situaciones. – APC

3

¿Qué tan grande es la tabla en MB? ¿Cuál es la tasa de crecimiento? ¿Estás depurando datos o planeas purgar datos? ¿Qué índices están sobre la mesa ahora? ¿Puede darnos la definición de la tabla de muestra? El particionamiento es una opción de licencia adicional. ¿Has verificado que alguien realmente va a pagar por ello?

y lo más importante, por favor suministrar muestra de consulta

Lo que has proporcionado no es suficiente información para basar una decisión sobre.

Cuestiones relacionadas