El escenario era el siguiente :
Teniamos un dominio del 10.000, conectado directamente a 2 storage externos un EMC y un SHARK, el s.o era solaris 7, con oracle 9.2.01
Migramos dicho servidor a un 4900, con solaris 10 , veritas 4.0 y oracle 10, conectado a el mismo storage pero a travez de una SAN ( switch brocade 24K ), con placa qlogic 2340.
El problema era el siguiente :
Luego de migrar, la gente de base de datos decia que :
Las aplicaciones que hacen acceso random a los datafiles de oracle, tienen mucha mas demora que en la maquina anterior.
Las operaciones que realizan un acceso secuencial sobre los datafiles, funcionan mucho mejor. ( fullscan).
Teniamos hasta el momento,segun estos datos, 2 lugares hacia donde apuntar, los discos de la SAN o quizas los parametros de la placa qlogic.
Por ejemplo, uno de los parametros a modificar en el /kernel/drv/qlc.conf , podria llegar a ser el hba1-execution-throttle=256 ( donde el actual es 1 )
LUEGO, tocamos los siguientes parametros en el /etc/system :
El dba, me dijo que bajaron los tiempos con este parametro
* Tamanio fisico maximo de un I/O con VM
* Unidad=sector (de 512 bytes)
set vxio:vol_maxio=32768
Tocamos parametros de Veritas de io
Luego de esto ultimo, El DBA me dijo que ya estaba solucionado el problema y que el resto seria un bug de Oracle, por lo cual pedi cerrar el caso en sun.
A los 2 o 3 dias, seguimos con los mismos problemas.
El escenario sigue siendo el mismo que detalle al comienzo .
El tema es que el error los da en forma aleatoria. ya sea en forma secuencial o random.
Lo que probe hacer fue bajar desde veritas con el vxtunefs bajar el parametro discover_direct_ioz a 64 k, segun me guie en el siguiente blue print
http://www.sun.com/blueprints/ 0400/ram-vxfs.pdf
Pero se sigue dando el error en forma aleatoria y mas seguido cuando se trabaja con lectura random.
Abreviando muchismo, aca fue donde afinamos la punteria :
1) Generamos 2 filesystems para probar, ellos son /interfaz y /carga.
al filesystem /carga le sacamos el parametro directio de las opciones del mount.
y al filesystem /interfaz, le dejamos la opcion directio en el vfstab, que es como esta en el ambiente productivo.
/dev/vx/dsk/SOS/vol01 /dev/vx/rdsk/SOS/vol01 /carga vxfs 3 yes largefiles
/dev/vx/dsk/SOS/vol02 /dev/vx/rdsk/SOS/vol02 /interfaz vxfs 3 yes largefiles,convosync=direct
Realizamos las siguientes pruebas.
En el fs /carga, ejecutamos un vxbench con opciones , write, read, random write,
random read sin direct i/o y un vxbench con las mismas opciones pero con directio.
A continuacion muestro la salida de los vxbench que hicimos en el fs /carga, Observemos los tiempos de
la primer columna , como se pegan un viaje cuando los tiras con directio.
El tema es que el error los da en forma aleatoria. ya sea en forma secuencial o random.
Lo que probe hacer fue bajar desde veritas con el vxtunefs bajar el parametro discover_direct_ioz a 64 k, segun me guie en el siguiente blue print
http://www.sun.com/blueprints/
Pero se sigue dando el error en forma aleatoria y mas seguido cuando se trabaja con lectura random.
Abreviando muchismo, aca fue donde afinamos la punteria :
1) Generamos 2 filesystems para probar, ellos son /interfaz y /carga.
al filesystem /carga le sacamos el parametro directio de las opciones del mount.
y al filesystem /interfaz, le dejamos la opcion directio en el vfstab, que es como esta en el ambiente productivo.
/dev/vx/dsk/SOS/vol01 /dev/vx/rdsk/SOS/vol01 /carga vxfs 3 yes largefiles
/dev/vx/dsk/SOS/vol02 /dev/vx/rdsk/SOS/vol02 /interfaz vxfs 3 yes largefiles,convosync=direct
Realizamos las siguientes pruebas.
En el fs /carga, ejecutamos un vxbench con opciones , write, read, random write,
random read sin direct i/o y un vxbench con las mismas opciones pero con directio.
A continuacion muestro la salida de los vxbench que hicimos en el fs /carga, Observemos los tiempos de
la primer columna , como se pegan un viaje cuando los tiras con directio.
Write SIN Directio
/carga/PRUEBA # /usr/sbin/vxbench -w write -i iosize=16,iocount=10000,nrep= 10 test1
total: 5.088 sec 314448.66 KB/s cpu: 4.84 sys 0.21 user
Read SIN Directio
/carga/PRUEBA # /usr/sbin/vxbench -w read -i iosize=16,iocount=10000,nrep= 10 test1
total: 2.830 sec 565335.87 KB/s cpu: 2.65 sys 0.17 user
Write CON Directio
/carga/PRUEBA #/usr/sbin/vxbench -w write -i iosize=16,iocount=10000,nrep= 10 -c direct test2
total: 101.390 sec 15780.62 KB/s cpu: 12.01 sys 0.47 user
READ CON Directio
/carga/PRUEBA # /usr/sbin/vxbench -w read -i iosize=16,iocount=10000,nrep= 10 -c direct test2
total: 88.032 sec 18175.25 KB/s cpu: 10.05 sys 0.45 user
Randon Write SIN Directio
/carga/PRUEBA # /usr/sbin/vxbench -w rand_write -i iosize=16,iocount=10000,nrep= 10 test3
total: 19.299 sec 82906.56 KB/s cpu: 18.09 sys 0.43 user
Randon READ SIN Directio
/carga/PRUEBA # /usr/sbin/vxbench -w rand_read -i iosize=16,iocount=10000,nrep= 10 test3
total: 6.507 sec 245873.36 KB/s cpu: 6.17 sys 0.32 user
Random Write CON Directio
/carga/PRUEBA # /usr/sbin/vxbench -w rand_write -i iosize=16,iocount=10000,nrep= 10 -c directio
total: 362.794 sec 4410.21 KB/s cpu: 53.67 sys 0.77 user
Random READ CON Directio
/carga/PRUEBA # /usr/sbin/vxbench -w rand_read -i iosize=16,iocount=10000,nrep= 10 -c directio
total: 663.139 sec 2412.77 KB/s cpu: 12.64 sys 0.56 user
/carga/PRUEBA #
Hicimos las mismas pruebas sobre el filesystem /interfaz, es decir el que esta montado con directio
y la conclusion fue ....................:
En el /etc/vfstab, sacamos la opcion convosync=direct de los filesystems de la Base de Datos y anduvo Perfecto.
/carga/PRUEBA # /usr/sbin/vxbench -w write -i iosize=16,iocount=10000,nrep=
total: 5.088 sec 314448.66 KB/s cpu: 4.84 sys 0.21 user
Read SIN Directio
/carga/PRUEBA # /usr/sbin/vxbench -w read -i iosize=16,iocount=10000,nrep=
total: 2.830 sec 565335.87 KB/s cpu: 2.65 sys 0.17 user
Write CON Directio
/carga/PRUEBA #/usr/sbin/vxbench -w write -i iosize=16,iocount=10000,nrep=
total: 101.390 sec 15780.62 KB/s cpu: 12.01 sys 0.47 user
READ CON Directio
/carga/PRUEBA # /usr/sbin/vxbench -w read -i iosize=16,iocount=10000,nrep=
total: 88.032 sec 18175.25 KB/s cpu: 10.05 sys 0.45 user
Randon Write SIN Directio
/carga/PRUEBA # /usr/sbin/vxbench -w rand_write -i iosize=16,iocount=10000,nrep=
total: 19.299 sec 82906.56 KB/s cpu: 18.09 sys 0.43 user
Randon READ SIN Directio
/carga/PRUEBA # /usr/sbin/vxbench -w rand_read -i iosize=16,iocount=10000,nrep=
total: 6.507 sec 245873.36 KB/s cpu: 6.17 sys 0.32 user
Random Write CON Directio
/carga/PRUEBA # /usr/sbin/vxbench -w rand_write -i iosize=16,iocount=10000,nrep=
total: 362.794 sec 4410.21 KB/s cpu: 53.67 sys 0.77 user
Random READ CON Directio
/carga/PRUEBA # /usr/sbin/vxbench -w rand_read -i iosize=16,iocount=10000,nrep=
total: 663.139 sec 2412.77 KB/s cpu: 12.64 sys 0.56 user
/carga/PRUEBA #
Hicimos las mismas pruebas sobre el filesystem /interfaz, es decir el que esta montado con directio
y la conclusion fue ....................:
En el /etc/vfstab, sacamos la opcion convosync=direct de los filesystems de la Base de Datos y anduvo Perfecto.