Mostrando las entradas con la etiqueta SQL Server. Mostrar todas las entradas
Mostrando las entradas con la etiqueta SQL Server. Mostrar todas las entradas

viernes, diciembre 14, 2012

Archivo no existe?? :O

Era una instalación como cualquier otra, muchas veces anteriormente instale SQL Server 2008 R2 y no habia tenido problemas, pero esta iba a ser una excepcion.

Mientras instalaba un feo mensaje aparecio.

TITLE: Microsoft SQL Server 2008 R2 Setup
------------------------------
The following error has occurred:
Error reading from file D:\x64\setup\sql_engine_core_shared_msi\PFiles32\SqlServr\100\Tools\Binn\schemas\sqlservr\2004\SOAP\types\SqlTran\6ckmcwa9.xsd.  Verify that the file exists and that you can access it.
Click 'Retry' to retry the failed action, or click 'Cancel' to cancel this action and continue setup.
For help, click: http://go.microsoft.com/fwlink?LinkID=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=10.50.1600.1&EvtType=0xDF039760%25401201%25401

Estuve buscando en Internet y no encontre algo que me indicara que estaba ocurriendo, ningun articulo era claro. Habian mas casos que hacian referencias al archivo, es mas, encontre varios sitios de donde bajarlos, pero que estaba pasando?

Quizas el medio estaba malo?? Una forma de probarlo era copiando los archivos desde el dvd al equipo e intentar una instalacion usando las copias locales.

Durante la copia me dio error al copiar ese archivo... el DVD estaba malo, pero que paso? No lo tengo claro, el ISO esta ok antes de grabarlo, durante la grabacion quedo ese archivo corrupto y no solo en ese dvd sino que ambas copias que se hicieron, pero al extraer el iso directamente no tenia problemas, sera el largo del path??

La solucion, al expandir el iso tome el archivo faltante y lo copie en la ruta indicada de modo que se pudiera leer sin problemas en forma local, la instalacion por fin paso y quedo todo ok.

Saludos!

Isa

domingo, abril 29, 2012

Quiero mis papitas!!! D:

Muchos de mis seguidores son parte de la comunidad donde juego y creo podran entender mi frustración y probablemente no el resto del artículo.

Como muchos juegos online gratuitos, si quieres tener algo mas que lo que te brinda el juego gratis necesitas invertir lo que llamamos dinero real para comprar una moneda intermedia que nos sirve para adquirir aquellos tan preciados bienes.

Este fin de semana era especial, no solo estaba la tienda con un 50% de descuento sino que ademas habian sets muy especiales que uno no podia dejar de adquirir, preparo mi tarjeta de credito, selecciono cargar papitas, selecciono medio de pago, coloco los datos de mi tarjeta y me sale el mensaje que todo esta ok.

Espero unos minutos que se hagan efectivos y nada :( espero un par de horas y nada, aun espero y solo digo: Quiero mis papitas!!! D:

Transacciones.

En el mundo de las bases de datos y un poco mas alla, existen lo que llamamos transacciones, cual es la idea de una transaccion, que si yo saco dinero de una cuenta, esta aparesca en la cuenta de destino y que no se pierda en el camino, para que una transaccion sea realmente tal debe cumplir con ciertas caracteristicas, por lo que decimos que las transacciones son "ACID".

A tomica (Atomicity). Una transaccion debe ser lo mas pequeña posible y realizar solo la transaccion, esta debe ser un todo o nada, si alguna parte de la transaccion falla, toda la transaccion falla, debe considerar cada punto en la transaccion, incluyendo fallas de comunicacion, cortes de energia, etc.

C onsistente (Consistency). Las transacciones comiensan con un estado valido de los datos y deben finalizar con un estado valido y no un estado intermedio, esto incluye validaciones, triggers , etc.

I ndependiente (Insolation). Una transaccion no debe ser afectada por otras transacciones, una vez que ella comenzo no puede ser cambiado el contexto de cuando comenzo.

D durables (Durability). Una vez que la transacción a terminado se debe asegurar que no se revertira, aunque ocurran errores como cortes de energia o fallas.

Algunas de estas caracteristicas las entrega la base de datos y otras es parte responsabilidad de quienes desarrollan la transacción.

Ahora a esperar que mis papitas aparescan, lastima que ya las tendre disponibles cuando no este el evento D:

Buena Caza!!

Isha

lunes, diciembre 20, 2010

Problemas de Memoria 2

Aun existen muchas máquinas que están trabajando con 32 bits, ya vimos en artículos anteriores el como optimizar el uso de memoria en estas versiones para servidores de Bases de Datos (SQL Server y Exchange) a través del uso de los parámetros /3GB y /PAE en el archivo boot.ini

 

Parámetro /PAE

Este parámetro lo que hace es permitir al sistema operativo reconocer la memoria por sobre los 4GB de RAM, a continuación una tabla de las versiones de sistema operativo y la cantidad de RAM soportada.

Windows y PAE

Versión de Windows Soporte
Windows 2000 Profesional
Windows XP
AWE API y 4GB de RAM Física
Windows XP SP2 y Posterior AWE API y 4GB de Espacio de Direccionamiento Físico
Windows 2000 Server
Windows Server 2003, Standard Edition
AWE API y 4GB de RAM Física
Windows Server 2003 SP1, Standard Edition AWE API y 4GB de Espacio de Direccionamiento Físico
Windows Server 2003, Enterprise Edition 8 procesadores y 32GB de RAM
Windows Server 2003 SP1, Enterprise Edition 8 procesadores y 64GB de RAM
Windows 2000 Advanced Server 8 procesadores y 8GB de RAM
Windows 2000 Datacenter Server 32 Procesadores y 32GB de RAM
Windows Server 2003, Datacenter Edition 32 Procesadores y 64GB de RAM
Windows Server 2003 SP1, Datacenter Edition 32 Procesadores y 128GB de RAM

Fuente: http://www.microsoft.com/whdc/system/platform/server/PAE/pae_os.mspx

 

Parámetro /3GB

En circunstancias típicas y para cada proceso se asignan 2 GB de espacio de direcciones virtuales para el proceso de modo de usuario y se asignan otros 2 GB de espacio de direcciones virtuales para el sistema operativo. Cuando utiliza el modificador /3GB en Windows Server 2003, se asignan 3 GB de espacio de direcciones virtuales para el proceso de modo de usuario y sólo se asigna 1 GB de espacio de direcciones virtuales para el sistema operativo.

Este parámetro debe usarse con cuidado, ya que al cambiar la forma de direccionar la memoria puede obtenerse un efecto inverso al que se espera, en servidores por ejemplo que tienen el rol de Active Directory, Terminal Server (Remote Desktop) o Application Server los cuales hacen uso de memoria kernel, se ven estrangulados y su capacidad de direccionamiento disminuye, en Servidores como Exchange o SQL Server se puede apreciar su beneficio.

El problema.

Se tenían servidores con distintos roles los cuales necesitaban ser actualizados de 4GB a 32GB de RAM, eran 2 grupos de servidores, los primeros, Application servers los cuales trabajaban con IIS y los otros, Cluster SQL Server 2005.

Al realizarse el upgrade de memoria física, los servidores de Aplicación no tuvieron problemas, sin embargo los servidores de SQL Server comenzaron con un comportamiento extraño.

No se observaron errores en el log de eventos que nos indicara algún problema o la causa del problema, si aparecía un error pero al parecer era la consecuencia, este error es el Event ID 1053

Revisando mas, se observa que las tarjetas de red no presentan trafico, bytes enviados o recibidos estaban en cero.

Nada que nos indicara que podría estar ocurriendo y menos como resolverlo. El único cambio que se había realizado era agregar la memoria al servidor. Se vuelve atrás.

Se programa nuevamente la actividad pero esta vez se realiza una actualización completa del sistema operativo y los drivers correspondientes al hardware, muchos de los problemas se resuelven de esta forma, un sistema operativo actualizado tiene menor probabilidad de tener problemas relacionados con issues conocidos y con parches liberados.

Nuevamente se realiza la actualización y presenta el mismo efecto.

Que configuraciones relacionadas con la memoria tenemos en el servidor?? Pues /PAE y /3GB en el archivo boot.ini

Vamos a la configuración de booteo y duplicamos la línea donde están estos parámetros cambiándole a una de ellas la descripción y sacándole ambos.

Se reinicia el servidor y se valida la configuración de memoria. Solo reconoce 3.4Gb de los 32Gb.

Se repone el parámetro /PAE en archivo boot.ini, este parámetro esta presente en las maquinas de aplicación.

Se reinicia el servidor y se valida configuración de memoria, reconoce los 32Gb y los servicios funcionan bien.

El culpable era el parámetro /3GB, revisemos el siguiente articulo donde se explica con mas detalle que es 4GT y como funciona.

http://technet.microsoft.com/en-us/library/cc786709(WS.10).aspx

Quiero destacar de acá las siguientes líneas que describen nuestro escenario:

4GT should not be used if either of the following is true:

  • Greater than 16 GB of physical memory are available and PAE X86 is enabled on the server.

Nuestra situación era exactamente esa, mas de 16Gb y PAE habilitado.

Saludos!

Isa

pd: No olvidar cambiar los tamaños en el archivo de paginación cuando se realicen aumentos de memoria!!!!!

martes, diciembre 07, 2010

Identificando la Version de SQL Server Instalada.

En muchas oortunidades nos toca que necesitamos saber cual es la version instalada en nuestro servidor de SQL Server.

El siguiente KB es bastante completo para realizar esta operacion: http://support.microsoft.com/kb/321185/en-us

Como un resumen, aca dejo un listado de las versiones y a cual corresponden desde 6.5 hasta 2008 SP1

10.0.1600 - SQL Server 2008 release (RTM)
10.0.2531 - SQL Server 2008 Service Pack 1

9.00.1399 – SQL Server 2005 release (RTM)
9.00.2047 – SQL Server 2005 SP1
9.00.3042 – SQL Server 2005 SP2
9.00.4053 – SQL Server 2005 SP3

8.00.194 – SQL Server 2000 release (RTM)
8.00.384 – SQL Server 2000 SP1
8.00.534 – SQL Server 2000 SP2
8.00.760 – SQL Server 2000 SP3
8.00.2039 – SQL Server 2000 SP4

7.00.623 – SQL Server 7.0 release (RTM)
7.00.699 – SQL Server 7.0 SP1
7.00.842 – SQL Server 7.0 SP2
7.00.961 – SQL Server 7.0 SP3
7.00.1063 – SQL Server 7.0 SP4

6.50.201 – SQL Server 6.5 release (RTM)
6.50.213 – SQL Server 6.5 with Service Pack 1
6.50.240 – SQL Server 6.5 with Service Pack 2
6.50.258 – SQL Server 6.5 with Service Pack 3
6.50.281 – SQL Server 6.5 with Service Pack 4
6.50.415 – SQL Server 6.5 with Service Pack 5
6.50.416 – SQL Server 6.5 with Service Pack 5a
6.50.479 - SQL Server 6.5 with Service Pack 5a(Update)

Saludos!!

Isa

jueves, julio 16, 2009

Esos $##@@&%$ Transaction Logs!!!

A quien no le ha tocado alguna vez que se haya llenado el disco por que los Transaction logs han crecido y crecido?? Tanto en SQL Server como Exchange.

Hoy me toco ver una base de datos SQL Server de solo 600Mb con un Transaction log de 54GB, no es primera vez que me toca ver algo así, había visto Tlogs de 30GB para bases de 2GB y había apagado mas de un incendio por disco lleno debido a esto mismo, es un tema que siempre se esta repitiendo y no muchos administradores entienden por que esta pasando.

 

Por que crece el Tlog?

Cuando una aplicación o una sesión en SQL Server envía una transacción a la base de datos, el motor lee los datos, los carga en memoria (Buffer Cache) y son modificados, esta modificación es registrada en el TLog en disco, cuando el Checkpoint ocurre, las paginas modificadas que están en memoria son escritas al archivo de data, de esta forma, si el server tiene algún problema, al levantar nuevamente con la información de los archivos de data mas el tlog es capaz de reconstruir la información que estaba en memoria y no había sido escrita a disco todavía, dejando la base de datos consistentes. Estas transacciones son las que hacen crecer el archivo.

 

Y cuando se “limpia”?

Eso depende (que me encanta esa palabra :P )

Si el recovery model de la base de datos esta en simple, las transacciones que ya finalizaron y fueron escritas a disco, son eliminadas del archivo, dejando ese espacio libre, sin embargo el tamaño físico del archivo no cambia.

Si el recovery model esta en Full o Bulk-logged, estas transacciones son limpiadas cuando se realiza el backup del Tlog.

 

Pero estoy haciendo un backup full todas las noches, porque no se limpia!

Ese es un error que cometen muchos administradores, piensan que el backup full también respalda el Tlog, sin embargo no es así.

El respaldo Full de la base de datos solo respalda la parte activa del Tlog, es decir, aquellas transacciones que aun no han sido escritas a disco.

 

Entonces que debo hacer para que el archivo no crezca?

Cambiar el recovery model a simple ;)

 

Pero tenia entendido que la recomendación para bases de datos de producción es con recovery model full.

Exactamente!! Pero si no los respaldas ni haces nada con ellos, para que los tienes en full??

 

Ok, creo que voy entendiendo, explícame mejor que es lo que debo hacer entonces para no seguir teniendo este problema.

Primero que nada, resolvamos el problema que tienes, disco lleno. Lo mas probable es que tengas problemas con la base por lo mismo, no creo que valga la pena en este momento realizar un respaldo de ese Tlog, así que lo vamos a truncar a la mala con el siguiente T-SQL

BACKUP LOG <basededatos> WITH TRUNCATE_ONLY

Ya tenemos el espacio liberado en el archivo, ahora devolvamos al sistema este espacio libre “achicando” este archivo a través del siguiente T-SQL

DBCC SHRINKFILE (<nombrelogicoarchivodelog>)

Con esto ya tenemos nuestro archivo chiquitito. Sin embargo comenzara a crecer nuevamente cuando empiecen a entrar los usuarios, mira, ya comenzó a crecer :D

Ahora para tener esto controlado y no vuelva a crecer y llenar el disco programemos un respaldo del Tlog por ejemplo cada una hora y guardémoslo junto a los otros respaldos, cuando necesitemos recuperar la base de datos podremos recuperar hasta casi la ultima transacción que se ejecuto, pero eso es para otro post.

 

También tengo un problema similar con Exchange, se me llena el disco con los archivos que se generan.

En Exchange el que los Tlog no se estén eliminando es una señal de que los respaldos no están terminando correctamente, estos son archivos de 5M para Exchange 2003 o anteriores y de 1M para Exchange 2007.

Al realizar el respaldo de la base de datos se aplican las transacciones y los archivos aplicados son eliminados de disco, por lo que no debieran eliminarse estos archivos a mano sin tomar algunas precauciones.

Los Tlog están relacionados al storage group mas que a un mailbox store en particular, por lo que para que se eliminen estos archivos deben estar correctamente respaldados todas las bases dentro del storage group.

La forma correcta de eliminar los Tlog en Exchange esta descrita en el KB 240145 para Exchange 2000 y 2003.

Si queremos evitar que se generen estos archivos, considerando que este hecho no nos permitirá recuperarnos de un desastre hasta la ultima transacción, podemos cambiar la modalidad de log a circular siguiendo el KB 314605 para Exchange 2000 y 2003 y en este Artículo para Exchange 2007

 

Conclusión.

Como conclusión final, la recomendación para servidores de producción de SQL Server es el recovery model full realizando backups periódicos de los Tlogs, para Exchange, deshabilitando Circular Logging y validando que los respaldos terminen correctamente y se estén respaldando todas las bases del Storage Group.

 

Saludos!!

Isa

 

Aclaración: Los diálogos que utilizo en el blog corresponden a conversaciones conmigo misma y no con segundos y/o terceros. A veces son media lenta para entenderme y debo explicarme con manzanitas :S

domingo, febrero 01, 2009

El Modelo de Datos

El siguiente paso fue la DATA, para realizar las pruebas necesitamos datos, una base lo suficientemente grande como para que las actividades que realizaramos mostraran resultados medibles.

La Bestia es una maquina bastante poderosa, asi que esta base no deberia ser pequeña.

El modelo

La empresa ficticia es de desarrollo y venta de software. Nuestra base esta compuesta por 5 tablas.

Desarrollador: Esta tabla contiene los datos de los 103 desarrolladores.

CREATE TABLE [dbo].[DESARROLLADOR](
[IDDESARROLLADOR] [int] NOT NULL,
[NOMBREDEV] [varchar](100) NOT NULL,
CONSTRAINT [PK_DESARROLLADOR] PRIMARY KEY NONCLUSTERED
(
[IDDESARROLLADOR] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO


Aplicacion: Nuestros desarrolladores han desarrollado 553 Aplicaciones.

CREATE TABLE [dbo].[APLICACION](
[IDSOFTWARE] [int] NOT NULL,
[IDDESARROLLADOR] [int] NOT NULL,
[DESCRIPCION] [varchar](250) NULL,
[VERSION] [varchar](10) NULL,
[NOMBRESW] [varchar](100) NULL,
CONSTRAINT [PK_APLICACION] PRIMARY KEY NONCLUSTERED
(
[IDSOFTWARE] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO


Clientes: Durante el tiempo que ha estado funcionando la empresa, hemos tenido 31224 Clientes

CREATE TABLE [dbo].[CLIENTE](
[CODIGOCLIENTE] [int] NOT NULL,
[RUT] [int] NULL,
[NOMBRECLIENTE] [varchar](100) NULL,
CONSTRAINT [PK_CLIENTE] PRIMARY KEY NONCLUSTERED
(
[CODIGOCLIENTE] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO


Facturas: Hemos vendido 2 millones de facturas a nuestros clientes, como los productos son muy bueno :P

CREATE TABLE [dbo].[FACTURA](
[NUMEROFACTURA] [int] NOT NULL,
[CODIGOCLIENTE] [int] NOT NULL,
[FECHA] [datetime] NULL,
CONSTRAINT [PK_FACTURA] PRIMARY KEY NONCLUSTERED
(
[NUMEROFACTURA] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO


Licencias: En cada factura podemos tener una o mas licencias, no se cuantas licencias se han vendido........... aun :D

CREATE TABLE [dbo].[LICENCIA](
[IDLICENCIA] [int] NOT NULL,
[CODIGOCLIENTE] [int] NOT NULL,
[IDSOFTWARE] [int] NOT NULL,
[NUMEROFACTURA] [int] NOT NULL,
[LICENCIA] [uniqueidentifier] NOT NULL CONSTRAINT [DF_LICENCIA_LICENCIA] DEFAULT (newid()),
CONSTRAINT [PK_LICENCIA] PRIMARY KEY NONCLUSTERED
(
[IDLICENCIA] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO


ya con el modelo se definieron algunas relaciones entre las tablas a través de llaves foráneas.


ALTER TABLE [dbo].[LICENCIA] WITH CHECK ADD CONSTRAINT [FK_LICENCIA_DETALLE_F_FACTURA] FOREIGN KEY([NUMEROFACTURA])
REFERENCES [dbo].[FACTURA] ([NUMEROFACTURA])
GO

ALTER TABLE [dbo].[LICENCIA] WITH CHECK ADD CONSTRAINT [FK_LICENCIA_RELATIONS_CLIENTE] FOREIGN KEY([CODIGOCLIENTE])
REFERENCES [dbo].[CLIENTE] ([CODIGOCLIENTE])
GO

ALTER TABLE [dbo].[LICENCIA] WITH CHECK ADD CONSTRAINT [FK_LICENCIA_VENTA_DE__APLICACI] FOREIGN KEY([IDSOFTWARE])
REFERENCES [dbo].[APLICACION] ([IDSOFTWARE])
GO

ALTER TABLE [dbo].[FACTURA] WITH CHECK ADD CONSTRAINT [FK_FACTURA_COMPRAS_CLIENTE] FOREIGN KEY([CODIGOCLIENTE])
REFERENCES [dbo].[CLIENTE] ([CODIGOCLIENTE])
GO

ALTER TABLE [dbo].[APLICACION] WITH CHECK ADD CONSTRAINT [FK_APLICACI_RELATIONS_DESARROL] FOREIGN KEY([IDDESARROLLADOR])
REFERENCES [dbo].[DESARROLLADOR] ([IDDESARROLLADOR])
GO



Para la generacion de los datos, de las tablas mas pequeñas, desarrollador y aplicacion, se uso excel, despues esos datos fueron cargados, el archivo generado en excel tenia lineas como las siguientes:

insert into desarrollador (idDesarrollador, NOMBREdev) values (1,'luis rivas')
insert into desarrollador (idDesarrollador, NOMBREdev) values (2,'robinson barruylle')
insert into desarrollador (idDesarrollador, NOMBREdev) values (3,'matilde piñats')
insert into desarrollador (idDesarrollador, NOMBREdev) values (4,'josefina parada')
insert into desarrollador (idDesarrollador, NOMBREdev) values (5,'jeanette antipan')
insert into desarrollador (idDesarrollador, NOMBREdev) values (6,'josé bravo')


Sin embargo al usar el mismo metedo para cargar la tabla de clientes se nos fueron los tiempos a la chuña. Habiamos generado 65.xxx clientes, sin embargo ya llevabamos media hora cargandolos y cortamos el script quedando cargados solo 32.xxx. El script de poco mas de 6Mb se guardo para usarlo despues en las pruebas.

Nos quedaba la carga de los 2 millones de facturas con sus detalles de licencias y este metodo no nos serviria, a menos que quisieramos quedarnos toda la semana cargando los datos :P

Generamos 2 scripts, uno en Transact-SQL, el otro creo que el awk, pero el que se uso fue el de SQL ya que el de awk generaria las lineas de insert y estariamos en el mismo punto anterior.

El script usado fue el siguiente:

DECLARE @counter int;
DECLARE @cliente int;
DECLARE @nlic int;

SET @counter = 1;

WHILE @counter <= 2000000
BEGIN
SET @cliente = (RAND()* 31224);
INSERT INTO dbo.FACTURA (NUMEROFACTURA,CODIGOCLIENTE,FECHA) VALUES (@counter,@cliente,getdate())
SET @nlic = (RAND()* 12);
WHILE @nlic >= 1
BEGIN
INSERT INTO dbo.LICENCIA (CODIGOCLIENTE,IDSOFTWARE,NUMEROFACTURA) VALUES (@cliente,(RAND()* 553),@counter)
@nlic = @nlic - 1
END
SET @counter = @counter + 1
END;
GO


Despues de poco mas de 1 hora ejecutandose llevabamos mas de 110000 facturas y mas de 730000 licencias por lo que lo dejamos y procedimos a retirarnos para continuar otro dia.


Durante el ultimo proceso tomamos algunas muestras de los contadores de performance los cuales les comento a continuacion, teniamos 2 sesiones terminal server abiertas, en una de ellas trabajaba Chubasco y en la otra yo, el script se estaba ejecutando en mi sesion.

Tiempo de la muestra: 31 de Enero 2009 entre las 16:30 y las 17:45
Processor: %Processor Time: _Total : llego a un maximo de 3,4 durante el proceso.


La grafica anterior nos muestra una linea azul que representa el promedio de la cola al disco Logico donde tenemos el archivo de Data, cuando comenzo la carga describio una curva que fue creciendo hasta llegar mas o menos a 1,6 y alli pareciera que se mantiene mas o menos constante, si agregamos a la grafica los valores de los discos fisicos tenemos una curva que coincide.


Respecto a la memoria, observamos que esta va decreciendo en la medida que vamos cargando los datos.

Podemos observar una caida fuerte, esta caida se debio a la ejecucion de una query que me mostraba la informacion de las lineas de licencias que llevabamos hasta ese momento.

La query ejecutada fue la siguiente:

SELECT dbo.APLICACION.NOMBRESW, dbo.CLIENTE.RUT, dbo.CLIENTE.NOMBRECLIENTE, dbo.APLICACION.VERSION, dbo.APLICACION.DESCRIPCION,
dbo.DESARROLLADOR.NOMBREDEV, dbo.FACTURA.NUMEROFACTURA, dbo.LICENCIA.LICENCIA
FROM dbo.FACTURA
INNER JOIN dbo.CLIENTE ON dbo.FACTURA.CODIGOCLIENTE = dbo.CLIENTE.CODIGOCLIENTE
INNER JOIN dbo.LICENCIA ON dbo.FACTURA.NUMEROFACTURA = dbo.LICENCIA.NUMEROFACTURA
INNER JOIN dbo.APLICACION ON dbo.LICENCIA.IDSOFTWARE = dbo.APLICACION.IDSOFTWARE
INNER JOIN dbo.DESARROLLADOR ON dbo.APLICACION.IDDESARROLLADOR = dbo.DESARROLLADOR.IDDESARROLLADOR
GO



Demorando 14 segundos y devolviendo cerca de 600000 lineas.



El tamaño del archivo de Data crecia en la medida que los datos se iban ingresando, este crecimiento no solo es de los datos, si se fijan en la figura enterior del reporte de tamaño de las tablas que fue tomado durante el proceso veran que el espacio usado por los indices incluso es mayor al usado por los datos. Los indices en las bases de datos es un tema interesante que da para mas de un futuro articulo :D



Las transacciones que se ejecutaba por segundo en esta sesion fluctuaban entre 162 a 166.

Eso es lo que les puedo contar por ahora. Si tiene curiosidad sobre algun contador que no inclui, coloquenlo en los comentarios, lo mismo si tienen alguna query interesante que podriamos agregar al set de pruebas final.

Saludos!!

Isa

miércoles, enero 14, 2009

Sácale el jugo a SQL Server: Administrando Infraestructura y BI

En esta sesión sabrás como administrar de mejor forma tus servicios de SQL Server. Configuraciones, logs, tuning, control de transacciones, entre otros.

Además podrás ver las principales virtudes de SQL Server como Integrador, Analizador y Reportador de datos y de Inteligencia de Negocios.

No desaproveches la oportunidad de sacarle el jugo a tu actual plataforma de SQL Server.

Oradores: Juan Andrés Valenzuela (Microsoft MVP), Felipe Zúñiga e Isabel de la barra.

Hora y Lugar Fecha: Martes, 20 de enero de 2009
Hora: 18:30 - 21:30
Ubicación: Microsoft Chile
Calle: Mariano Sánchez Fontecilla 310, Piso 6. Las Condes
Ciudad: Santiago, Chile



REGISTRATE AQUÍ: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032400575&culture=es-cl

Facebook: http://www.new.facebook.com/event.php?eid=43466999665#/event.php?eid=55744668560

Saludos!!

Isa

domingo, diciembre 28, 2008

Empezamos!!


Despues de 1 mes de la reunion por fin tenemos la maquina conectada en un datacenter, no es una maquina que uno se pueda llevar a la casa y conectarlo en un enchufe cualquiera, tiene enchufes especiales y el consumo daria mas de un dolor de cabeza.



Pase a buscar a Chubasco al trabajo, pasamos a comprar algunas cosas al super y de ahi via transantiago llegamos al lugar, nos estaban esperando, aunque la maquina estaba rackeada aun no habia sido conectada, asi que se conecto y encendio.

Alli estaba tambien HAJ y el anfitrion.

Lleve los iso y cds y genere los discos de instalacion, se instalo Windows 2003 Server Enterprise x64 R2 SP2 en Ingles, no tuvo ningun problema en reconocer lo 8GB en RAM ni los 16 procesadores logicos.

Fue bautizada como BESTIA

Despues de las configuraciones basicas (nombre, ip, workgroup, etc.) se le saco una imagen para cuando se deba instalar de nuevo no partir desde cero, aunque la instalacion fue bastante rapida.

Tiene 2 discos de 70GB, se genero una particion pequeña para el sistema operativo en uno de los discos, otra particion pequeña para los logs en el otro disco y 2 particiones mas grandes, una en cada disco para hacer respaldos y la data de las bases.

En la particion de respaldos colocamos los Isos que usariamos, se instalo una pequeña aplicacion para montar iso y procedimos a la instalacion de SQL Server 2005 Enterprise Edition de 64 bits, solo el motor en la instancia por defecto, las herramientas administrativas y las bases y codigos de ejemplo.

Al momento de intentar instalar el SP2 me percate que tenia la version x86 y no 64 asi que solo quedo la version RTM.

Revise en los contadores de performance la cantidad de memoria que podia tomar y me mostro los 6GB, esto es lo entrete de las versiones de 64, que no necesitas realizar configuraciones especiales para que le saquen el mejor provecho al hardware.

Jugamos Backgammon, comimos unos sandwitch y nos retiramos a jugar Rol.... bueno, en realidad yo me quede en mi pc y los chicos estan jugando rol al otro lado de la muralla.

Saludos!!

Isa

viernes, noviembre 28, 2008

La Reunion


La reunion fue virtual, hay que usar la tecnologia, jeje.

Se definio principalmente la estrategia. Mediante un script se generara el archivo con los millones de registros y sobre esos datos se armaran un conjunto de queries (a cargo de Chubasco) estas cconsultas y/o transacciones se usaran en todos los escenarios.



En cada transaccion se colocara antes y despues una funcion que retorne el tiempo de modo que al realizar la diferencia entre ambos se obtenga el tiempo de ejecucion. Adicionalmente se mediran distitos contadores usando otras herramientas nativas del sistema operativo o del motor.





En el grupo participaran 2 chicos mas, ellos son Nico y HAJ, aun no conosco sus especialidades pero de seguro pronto las descubriremos.

Las cosas se estaban dando para comenzar hoy sabado y no domingo, partiriamos a las 13:00 instalando Windows Server, sin embargo por problemas de logistica quedamos estancados.



La maquina no es pequeña, ustedes estan viendo las fotos, no es posible trasladarla en un auto, es necesaria una camioneta o un vehiculo grande, no nos fue posible realizar las coordinaciones necesarias asi que por el momento esta suspendido el evento.

Ya estan en conversaciones un furgon para moverlo el Lunes asi que esperamos comenzar el Lunes y no el Domingo.

Saludos!!

Isa

jueves, noviembre 27, 2008

Fiesta Geek - Empiezan los Preparativos

Muchos me han preguntado donde y a que hora para ir, lo siento pero nos pidieron mantener la reserva, no puede haber mucha gente, pero ire publicando todo lo que vayamos realizando y espero que a traves de este medio participen tambien con ideas o comentarios o por ultimo una palabra de animo para no rendirnos, jeje.

La protagonista sera una espectacular 4 x 4 , pero no es un jeep, es un juguetito de 64 bits bastante prometedor, 4 procesadores Intel Xeon 7100 Cuad Core de 3.4Ghz con 8 GB en RAM y aaaaaaaaaaaaaaaaaaaaarrrrrto disco que no me supieron decir cuanto, seguro que es mas que mi disco externo, jeje, nada de mal verdad? No tengo fotos de este bebe, pero apenas las tenga las publico :P

Para el software y licencias Microsoft se usaran las de mi subscripcion Technet, regalito por mi participacion en IT Pro Momentum desde alli baje todo el coctel de iso necesarios para este laboratorio, todo en 64 bits

Entre las cosas que nos han pedido probar esta el tema de alta disponibilidad, replicacion y esas cosas, sin embargo solo contamos con una maquina, en un momento pensamos en armar un cluster, pero para eso se requiere hardware especial asi que para otra oportunidad sera, fuera que el objetivo es comparar performance en distintos escenarios y versiones y no otras caracteristicas.

La base de datos con que jugaremos tendra cerca de 20 millones de registros, no conosco el modelo y no soy experta construyendo queries, asi que se aceptan ideas de como darle un pokito de carga, con esa cantidad de registros creo que el hacer un select * from basegrandota le hara un poco mas que cosquillas.

Nos pidieron tambien que publicaramos tips sobre performance, como hacer tunning, best practices, etc, estos de seguro iran apareciendo en los post a medida que los vayamos aplicando, espero que a todos les sea de mucho provecho.

Como han de imaginarse, la fiesta estara animada por musica de Star war, jeje, les dejo aca el link de mi favorita.

Saludos!!!

Isa

martes, noviembre 25, 2008

Fiesta Geek - La Idea

"Isabel, eres muy Geek!!!"

Asi me dijo un amigo por telefono cuando le dije que nos podiamos juntar el viernes para planificar la actividad del domingo.

Que pasa el domingo se preguntaran?

Pues aun no esta claro, todavia no nos juntamos a planificarlo, jejeje :D

El tema partio por que Mauricio estaba revisando unas comparativas entre los distintos SQL Servers he intercambiamos un par de opiniones respecto a ellos, le comente que he hecho en mas de una oportunidad algunos tunning a servidores mejorando el performance y muchas veces el mal performance de una base va por una mala configuracion.

Necesitaba a alguien que le dijiera que escoger para medir el desempeño de una base de datos y que criterios usar, tambien me comento que con pruebas "duras" el SQL Server 2000 era mas rapido que SQL Server 2005.

A mi me gusta probar las cosas por mi misma le dije, que me armaria un lab y probaria las 3 versiones bajo las mismas exigencias y veria cual es la que me sirve.

No le gusto la idea de que fuera en maquinas virtuales, la idea era probarlo con fierro de verdad.

OK! le dije, si tienes el fierro, pongamosle fecha y lo armamos!

Y adivinen.........

Se consigio el fierro, se consigio el lugar y la fiesta empieza el Domingo!!!!!

Objetivos:

1) Comparar performance de SQL Server 2000, 2005 y 2008

2) Comparar MySQL corriendo sobre Linux vs Server Core 2008

Espero que quienes quieran seguir esta serie de articulos donde les contare no solo la parte tecnica sino que tambien la experiencia, nos dejen sus comentarios.

Cualquier aporte es bienvenido ;)

Saludos!!!

Isa

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

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

miércoles, julio 16, 2008

A estudiar SQL Server 2008

Ya esta pronto a liberarse la nueva version de SQL Server, el cual trae muchas nuevas caracteristicas relacionadas con seguridad, disponibilidad, crecimiento, etc.

Para empezar a prepararnos para esta nueva plataforma ya esta disponible en Microsoft Virtual Academy la carrera de SQL Server 2008.

En ella encontraran Webcast, Clinics, documentacion, por ahora esta en gran parte en Ingles, pero hay mas de algo en español para quienes no dominan en ingles.

A disfrutarlo!!

Isa

domingo, febrero 17, 2008

Heroes!!

Todo partio como una serie de television, despues aparecieron los Heroes nacionales, y como en toda moda, Microsoft no podia estar ausente y esta en plena campaña para reclutar a nuestros Heroes Tecnologicos.

Asi como cuando comenzo la moda de los Realitys me hice presente en el primer RealityIT (como una repesentante femenina! Chicas donde estan??) en esta oportunidad tampoco estare ausente y los invito a todos ustedes a participar tambien como los Heroes que son.

La inscripcion es super facil, solo debes hacer Click Aqui y registrarte, no olvides anotarte en los boletines para mantenerte al tanto de los eventos que se vayan organizando o en como puedes ser tu tambien un Heroe.

Siguiendo con el ciclo de conferencias de Mision Critica te dejo aca los 3 proximos eventos, no olvides inscribirte y apoyar a los Heroes que las dictan :D

20 de Febrero
Alta disponibilidad de SQL Server 2005
Jorge Díaz y Felipe Zúñiga

28 de Febrero
Alta disponibilidad de archivos, DNS externo y DHCP
Isabel de la Barra y Gonzalo Balladares

5 de Marzo
Alta disponibilidad de ISA Server 2006
Emerson González y Ricardo Rojas

Los eventos son GRATUITOS de 19:00 a 22:00 en Teatinos 550 (New Horizonts), queda a 2 cuadras del metro Sta Ana.

Espero verlos a todos!!

Saludos!

Isa

miércoles, diciembre 26, 2007

Profesional 5 Estrellas ahora en SQL Server 2005 y Unified Communications

El popular programa Profesional Cinco Estrellas extiende su cobertura ofreciendo no solo el ya conocido programa paso a paso de acreditación de estrellas para Windows Server 2003, sino también para SQL Server 2005 y para UC, Unified Communications.

Si ya venías haciendo cosas con PCE en Windows Server 2003 y deseas iniciar PCE para estas plataformas, verás una ventana similar a esta:


Visita entonces el home page de PCE, regístrate o ingresa con tu Windows Live ID y empieza a acreditar nuevas estrellas.

Saludos.

Isa

Tomado del Blog de Guillermo Taylor