¿Poner Oracle rehace registros en DRAM SSD para una base de datos de escritura pesada?

9

Tengo un Sun M4000 conectado a una matriz EMC CX4-120 con una base de datos con gran capacidad de escritura. Escribe pico a alrededor de 1200 IO / sy 12MB / s.

Según EMC, estoy saturando el caché de escritura en la matriz EMC.

Creo que la solución más simple es mover los registros de rehacer a un SSD basado en DRAM. Esto reducirá la carga en la matriz EMC a la mitad y las aplicaciones no verán esperas de búfer de registro. Sí, el DBWR puede convertirse en un cuello de botella, pero las aplicaciones no lo estarán esperando (¡como lo hacen en los compromisos de rehacer!)

Actualmente paso por unos 4 registros de rehacer de 4 GB, por lo que incluso 20 GB de SSD marcarían una gran diferencia. Como se trata de almacenamiento a corto plazo y se sobrescribe constantemente, los SSD basados ​​en Flash probablemente no sean una gran idea.

El M4000 no tiene lotes de unidades adicionales, por lo que una tarjeta PCI-E sería perfecta, podría ser externa o mover volúmenes de arranque al EMC y liberar las unidades locales.

Sun vende una tarjeta PCIe Flash Accelerator F20, pero parece ser un caché para algunos discos SATA, no una solución DRAM SSD. Los detalles son incompletos, no enumera el M4000 como compatible, y estoy cansado de luchar contra el árbol telefónico de Sun en busca de ayuda humana. :(

¿Están de acuerdo otros en que un DRAM SSD es el camino a seguir? ¿Alguna recomendación de hardware?

ACTUALIZACIÓN Además de la información en un comentario a continuación, probé varias configuraciones para "commit_write" y no hizo la diferencia.

rmeden
fuente
¿Estás archivando los registros en alguna parte? Si finalmente necesitan copiarse de la SSD al disco, entonces puede simplemente mover el cuello de botella al archivo.
Gary
Sí ... los registros de rehacer se están archivando y la E / S en realidad aumenta a aproximadamente 80 MB / s durante la copia del registro de rehacer porque es una escritura secuencial. Siempre pensé que los registros de rehacer eran secuenciales, pero supongo que no.
rmeden

Respuestas:

9

Primero, supongo que tienes muy pocos discos en la matriz. 1200IOPS se puede admitir fácilmente en 12 discos giratorios (100 IOPS por disco es muy razonable). Si el caché no puede manejarlo, significa que su tasa de escritura sostenida de 1200 IOPS es mucho más de lo que sus discos pueden soportar.

De todos modos, es probable que SSD para rehacer registros no ayude. Primero, ¿su sesión espera principalmente en la declaración de COMPROMISO? Verifique los principales eventos de espera en statspack / AWR para verificar. Supongo que ~ 95% de su E / S no está en los registros de rehacer en absoluto. Por ejemplo, una inserción de una sola fila en una tabla con 5 índices puede hacer 1 E / S para leer un bloque de tabla (que tiene espacio para la fila), leer 5 bloques de índice (para actualizarlos), escribir 1 bloque de datos, 1 deshacer bloque y 5 bloques de índice (o más, si se actualizan bloques que no son hojas) y 1 bloque de rehacer. Por lo tanto, revise el paquete de estadísticas y vea sus eventos de espera, es probable que esté esperando muchos READs y WRITEs para datos / índices. La espera de lecturas ralentiza el INSERT, y la actividad de ESCRITURA hace que las LECTURAS sean aún más lentas: son los mismos discos (por cierto, ¿realmente necesita todos los índices?

Otra cosa a verificar es la definición RAID: RAID1 (duplicación, cada escritura es dos escrituras) o RAID 5 (cada escritura es de 2 lecturas y dos escrituras para el cálculo de la suma de verificación). RAID 5 es mucho más lento en la carga de escritura intensiva.

Por cierto, si los discos no pueden manejar la carga de escritura, DBWR será un cuello de botella. Su SGA estará lleno de bloques sucios, y no tendrá espacio para leer nuevos bloques (como los bloques de índice que deben procesarse / actualizarse) hasta que DBWR pueda escribir algunos bloques sucios en los discos. Nuevamente, revise statspack / awr report / addm para diagnosticar cuál es el cuello de botella, generalmente basado en los 5 principales eventos de espera.

Ofir Manor
fuente
1
+1 - y le daría +10 si pudiera.
Helvick
2
+1 para consejos para ver realmente dónde está el cuello de botella.
DCookie
Las esperas son "sincronización de archivo de registro" y "espacio de búfer de registro". Puedo obtener aproximadamente 150 MB / s para el volumen usando DD. Sospecho que LGWR está esperando que se complete un IO antes de enviar el siguiente. El tiempo de servicio de IO es de aproximadamente 1 ms. El EMC tiene una enorme memoria caché de 500 MB, que según EMC no se puede aumentar sin actualizar toda la caja. Tenemos 22 TB en la matriz, por qué ofrecerían algo con tan poco caché está más allá de mí. Los registros de rehacer se encuentran actualmente en un 5 a nivel de RAID 5, pero no hubo diferencias con RAID 10 (otra razón para sospechar caché)
rmeden
Por cierto, si había más caché, el disco aún podría no mantenerse. Al mover el REDO fuera de la matriz EMC, eso libera capacidad para los discos de datos y reduce la E / S a la mitad. Una pequeña SSD DRAM puede ser el disco más barato y de alto rendimiento, ya que puede ser pequeño.
rmeden
meden: ¿cuánto rehace Oracle escribe por segundo? usted dijo que la E / S total es de 12 MB / sy 1200 IOPS, significa muchas E / S pequeñas (promedio de 10 KB). Si mueve los registros de rehacer a SSD, solo verá diferentes eventos de espera ya que el DBWR se convertirá en el cuello de botella e INSERT esperará el búfer libre en el SGA. Verifique: qué tipo de RAID tiene, cuál es el tamaño de la banda y cuál es el tamaño del bloque de Oracle (también, ¿están sus archivos de datos divididos en todos los discos?). Además, verifique en el paquete de estadísticas la fuente de la mayor parte de las E / S, ya sea rehacer o alguna otra cosa, verifique las E / S por espacio de tabla
Ofir Manor el
2

dd no es nada comparado con el bloque de E / S.

Para algunas otras vistas, verifique, anandtech.com realizó una prueba exhaustiva (otorgada con el servidor MS SQL) con SAS rotando frente a SSD, en varias combinaciones, y el mundo de Solaris tiene ZFS con SSD que compone varias partes (registros, caché, etc. )

Pero sí, si RAID 5 vs RAID 10 es el mismo (para escrituras), está haciendo algo mal. Con escrituras lineales, heck RAID 5 podría ser más rápido (es decir, puede hacer la paridad en la memoria, luego escribir las franjas y la paridad de una vez), pero con un pequeño bloque aleatorio (4-8k), te matan al actualizar las franjas (como señalado por otros), la incursión 10 debería ser más de 2 veces más rápida, si no, algo está mal.

Debe profundizar antes de gastar dinero en hardware.

Ronald Pottol
fuente
2

Vi una publicación sobre el montaje de particiones UFS utilizando la opción "forceirectio" y configurando el parámetro de Oracle "filesystemio_options" en "setall".

¡Lo probé y veo una mejora de 4-5x en las escrituras de Oracle! ¡Sí!

Los síntomas clave fueron bajo rendimiento pero buenos tiempos de respuesta en el disco. Esto parece ayudar a algunas personas pero no a otras. Ciertamente hizo el trabajo por mí.

Puedo considerar SSD para nuevos servidores, pero este servidor está funcionando bien ahora.

Robert

rmeden
fuente
Lo más probable es que la aceleración que experimentó no haya sido causada al habilitar E / S directa, sino al habilitar E / S asíncrona. En Oracle, setall significa directo + asíncrono.
kubanczyk
1

Si esta caja solo hubiera sido una caja x86 / 64 con Linux, habría recomendado una de las tarjetas de unidad FusionIO PCIe: son increíblemente rápidas y no 'mueren' con grabaciones pesadas como lo hacen las SSD. Desafortunadamente, no son compatibles con Sparc o Solaris, sin embargo, es posible que desee contactarlos para discutir esto.

Chopper3
fuente
1

La tarjeta PCIe F20e es similar a la E / S Fusion en función. Básicamente es solo un SSD Flash conectado a PCIe. Con una gran carga de trabajo de escritura, deberá preocuparse por mantener suficientes bloques libres (mediante algún tipo de recolección de basura basada en la unidad) para que no termine con el ciclo Borrar / Programa en el SSD convirtiéndose en el cuello de botella, así como los ciclos de escritura limitados disponibles en un SSD basado en Flash. Definitivamente es rápido, pero podría no ser el mejor kit para este trabajo.

Juan
fuente
tks John. No pensé que funcionaría para mí. Sun ni siquiera lo admite en un M4000 de todos modos. :(
rmeden