viernes, octubre 31, 2008

SQL Server Access Methods object: Page Splits/sec

Una causa del exceso de I/O es el particionamiento de páginas, el page Split ocurre cuando una página está llena y se debe partir en 2 para colocar la data que se esta ingresando.

Si bien el page Split es normal, un número excesivo puede causar problemas de disco contribuyendo a un bajo performance, en este caso se debe considerar aumentar el fill factor de los índices, con esto aumentara la fragmentación y evitara los page Split.

Para bases de datos muy transaccionales (OLTP) el fill factor debe estar entre 1 y 99, para bases de datos de solo consulta (OLAP) debe estar en 0.


Esta es la forma muy resumida de que se trata este contador, sin embargo el tema no es tan simple como parece.

Partiendo desde el principio, Que es un página?

SQL Server almacena los indices y la data en blocks de 8KB de espacio continuo llamados páginas, estas se agrupan de a 8 continuas formando un Extend, los extends son de 64KB, los archivos fiisicos de la base de datos son "formateados" en paginas y extends. Cada pagina puede tener 1 o mas filas de una tabla o contener una o mas entradas de un indice.

Ok!, entonces Que es el page split?

Los indices y las tablas que continen indices clusterizados son almacenados siguiendo el orden que indica en indice correspondiente. Cuando insertamos una fila en la tabla esta debe ser ingresada en cierta posicion dentro del indice o la tabla y los datos contenidos en las paginas son ordenados.

Algunas veces estamos de suerte y la pagina donde debe ser ingresado tiene espacio disponible y solo se inserta en ella, sin embargo en otras ocasiones la pagina esta llena porlo tanto esta pagina es "dividida" en 2 y parte de las filas quedan en una pagina y otra parte queda en otra pagina. Esta division es el Page Split.

Entonces el page split es bueno o malo?

Los page split son normales en las bases de datos transaccionales, mientras mayor page split se produce un mayor requerimiento de I/O al disco, un excesivo page split puede afectar el performance del servidor generando problemas de performance de disco

Uups!! y hasta que valores es bueno y cuando pasa a ser malo?

Pues es dificil dar un numero, en algunos articulos mencionan 100 como un numero malo, valores sobre 100 generan problemas de discos, pero podria ser ya problemas un numero menor a ese, hay que observar como estan nuestros contadores de disco, en particular el contador "Physical Disk:Avg Disk Queue Length", si se observa este valor sobre lo aceptado y coinciden con los valores altos de page split, entonces estamos en el escenario malo.



mmmm, y como puedo evitar o disminuir los page split?

Pues incrementando el fill factor :D

ya, y que es el fill factor?

Para entender que es el fill factor primero debemos saber como se almacenan los indices dentro de la base de datos, los indices se guardan usando un B-Tree (Arbol Balanceado), cada nodo de este arbol es una pagina, la cual contiene uno o mas entradas de indice. Como ya mencionamos, cada vez que se inserta un dato este es colocado en la pagina que le corresponda segun el orden del indice y si la pagina esta llena se produce una division de la misma, esto tiene un costo.

Pero, y si nos aseguramos de alguna forma de que las paginas tengan espacio disponible de modo de no producir el Page Split?

Eso es el fill factor! con el le decimos al SQL Server que tan llenas deseamos que esten las paginas de modo que sean minimas las veces que encuentre paginas llenas, este factor solo hace referencia a las paginas hojas (Leaf), si queremos que tambien las paginas intermedias del indice esten con espacio disponible debemos habilitar el pad index.

Por ejemplo, usando CREATE CLUSTERED INDEX ... FILLFACTOR = 33 crea un índice clusterizado con un valor FILLFACTOR del 33 por ciento. Suponga que SQL Server calcula que 5,2 filas es el 33 por ciento del espacio de una página. SQL Server redondea esa cantidad, de forma que coloca seis filas en cada página.

La desventaja de usar fill factor y pad index es que usa mas paginas (Fragmentacion) y para las lecturas (SELECT) es un poco mas lento por que lee mas paginas, pero las inserciones son mas rapidas.

Entonces, que valor de fill factor uso?

Pues depende del nivel de transacciones y lecturas de las tablas donde estan los indices, para tablas del tipo OLAP, debe estar en 0, para OLTP un valor entre 1 y 99 dependiendo del nivel de transacciones, mientras mas insert/update vs select, menor debiera ser.

Mencionaste la fragmentacion, segun todo esto, la fragmentacion seria buena?


Para estos casos si, un indice fragmentado en una tabla muy transaccional tendria sus beneficios, pero solo en este escenario, en otros casos podria no ser bueno.

Para terminar, les dejo un articulo sobre Page Split que encontre muy interesante.

What is a page split? What happens? Why does it happen? Why worry?

Saludos!

Isa

sábado, octubre 18, 2008

Por que estudie computacion ......

Cuando sali del colegio no sabia que queria estudiar, lo unico que tenia claro era que me gustaban las matematicas y la fisica, una opcion habia pensado era ser profesor, pero ya se habian encargado de convencerme que no era una buena opcion.

De niña a veces iba al parque O`Higgins con mi papa o mis hermanas, al pasar por Beauchef veia la universidad y leia un letrero que decia "Facultad de Ciencias Fisicas y Matematicas" y pensaba en mis adentros "Aqui voy a estudiar".

Cuando estaba en la media estuve saliendo con un chico que estudiaba en primer año de ingenieria en Beauchef y le conte que yo queria estudiar alli, en la conversacion me quedo muy claro que o era machista o no me tenia por una mujer inteligente pues me decia que esa escuela no era para mi.

Como soy porfiada, al postular a la universidad esa fue mi primera opcion, y quede.

A pesar de los pronosticos del chico con que habia salido, mi estadia en la escuela fue de mas de un semestre, mucho mas que el año que alcanzo a durar el :D

Afortunadamente para mi, los 2 primeros años es de plan comun, por que queria entrar a matematicas, sin embargo el primer semestre me di cuenta que no era tan buena en matematicas como pensaba y que lo que me gustaba era el algebra y no calculo.

Desilusionada de las matematicas tenia que pensar que carrera seguir, la fisica y las matematicas ya no eran tan entretenidas como en el colegio, me toco hacer un ramo de dibujo tecnico, me iba bastante bien, era buena con la regla y la escuadra y calculando los angulos y distintas vistas, quizas lo mio seria mecanica o quizas podria cambiarme a arquitectura, aunque aun tenia un par de semestres mas para elegir.

En tercer semestre me toco hacer introduccion a la computacion.

Para mi era ciencia ficcion, las computadoras eran parte de los libros de Asimov que tanto me gustaban, pero no habia pensado que existian de verdad, en ese tiempo no eran tan conocidos como ahora.

Numeros binarios y un lenguaje que no entendia mucho, mas encima instrucciones en ingles, odiaba el ingles, iba a ser un ramo complicado, algo extraño.

Mi primera tarea fue calcular la orbita del cometa Halley, el cual andaba dando vueltas en ese tiempo por estas coordenadas, nos dieron un archivo de entrada y teniamos los datos que debiera entregar como salida, sin embargo mi programa entregaba cualquier cosa, no entendia nada, eso no era lo mio.

En la sala de terminales se me acerco un chico y me pregunto si necesitaba ayuda, le dije que si y me explico como debia hacer la tarea, me hizo notar algunos pasos que me estaba saltando y las cosas incorrectas que estaba haciendo.

"Los computadores son tontos, no saben nada, debes darle todas las intrucciones en orden y todos los detalles, por que ellos haran exactamente lo que tu le dijiste este bueno o este malo".

Esa frase me marco, a partir de eso momento supe que lo mio era la computacion, despues de mas de 20 años, me doy cuenta que mi eleccion fue la correcta, aunque durante mis estudios mi enfoque fue hacia la programacion y los ramos que tomaba iban por ese lado el destino me hizo dedicarme a la administracion de servidores y no me arrepiento, disfruto lo que hago.

Pero ..... los computadores no son tontos ;) si no sabes tratarlos como corresponde, quizas no hagan exactamente lo que les dices.

Saludos!!

Isa

viernes, octubre 17, 2008

Problemas para Imprimir con Report Server

Este martes que recien paso, al igual que los meses anteriores, fueron liberados varios hotfixes, uno de ellos nos dio algunos dolores de cabeza.

Hace un par de dias a los usuarios al tratar de imprimir los reportes comenzo a aparecerle el mensaja "no se puede cargar el control de impresion del cliente" (En ingles "Unable to load client print control"), era algo extraño ya que eran muchos los usuarios y no se habia hecho ningun cambio ni en el server ni en los reportes, las maquinas con problemas eran practicamente todas.

Buscando en Internet, encontre en los foros de Microsoft a varios usuarios con el mismo problema, ya no habia duda, era un parche, pero cual?

Uno de los post me dio la respuesta.

El hotfix 956391 (Microsoft Security Advisory: Cumulative security update for ActiveX) era el culpable, tomamos un equipo con problemas, se desintala el parche y se soluciona.

Esa no es la unica solucion, al investigar mas encontre que instalando el SP1 de Microsoft Report Viewer tambien debiera solucionarlo, esto se instalaria en el servidor donde se encuentra el Report Services.

Saludos!

Isa

jueves, octubre 09, 2008

Profe!!

Cuando sea grande quiero ser profesor :D

Eso le dije con mi mejor sonrisa a mi profesor de matematicas en el colegio, me gustaba el tema de entregar mis conocimientos y ayudar a otros, me salia facil explicarles y sentia satisfaccion cuando aprendian, sin embargo mi profesor se molesto y me dijo que no debia ser profesor sino que ingeniero.

Cuando estudiaba ingenieria nunca fui profesor ayudante, pues mis notas no eran muy espectaculares, pero igual me ayudaba economicamente haciendo clases de matematicas en el barrio donde vivia, y en la escuela ayudando cuando podia.

Me seguia gustando el compartir con los demas lo que sabia.

Ya de profesional tuve la oportunidad de estar a cargo de estudiantes en practica, siempre les preguntaba que sabian para hacerlos trabajar en temas que no conocian y asi aprendieran mas cosas, sigo en contacto con varios de ellos y son excelentes profesionales, espero haber sido un aporte en esa formacion.

Hace unos años, al tomar un curso un profesor me hablo de las certificaciones y el ser MCT, en ese tiempo comence con las certificaciones, pero veia el ser MCT un poco mas lejano, sin embargo como han leido en mi blog, despues de mi viaje a fargo, soy MCT :D

Aunque al participar del grupo de technet y antes en la comunidad de Linux me toco dar algunas charlas es muy distinto a estar en una sala de clases, no es solo unas horas, 2 o 3 maximo que te paras delante y explicas algo, sino que te paras delante de personas que quieren aprender y tu estas alli para entregar.

Hace como un mes di mi primera clase como MCT.

Estaba nerviosa, no conocia a mis alumnos, no sabia cuantos eran (en realidad si deberia haberlo sabido de antes pero nunca me fije), al comienzo del curso los alumnos y el profe se presentan y yo comence mi presentacion asi:

"Siempre quise ser profesor, pero por mi puntaje en la PAA tuve que estudiar ingenieria, sin embargo nunca perdi la esperanza de llegar a serlo un dia, me esforce, estudie, me certifique y eso me ayudo para estar hoy frente a ustedes en mi primera clase"

Fue un excelente curso, fue una muy buena experiencia y me gusto, la proxima semana me toca otro, con nuevos estudiantes, asi que estoy estudiando mucho para poder entregarles todo lo se y al mismo tiempo aprender de ellos, pues en una clase no solo los alumnos aprenden.

Ya soy grande, ahora quiero ser profesor :D

Un abrazo!!

Isa