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

jueves, diciembre 25, 2008

Trabajo en Equipo.

Esta historia me llego por primera vez creo que por el año 96, en ese entonces me parecio una buena historia y la guarde, al cambiarme de trabajo la perdi ya que la guardaba entre mis mails los que quedaron en la antigua empresa, sin embargo algunas veces la recordaba y mas de una vez trate de buscarla en Internet sin encontrarla, sin embargo hoy poniendome al dia con los mail de una lista me encontre con la historia.

Como no quiero volverla a perder, la dejo aca para todos los que me leen y para encontrarla si quiero recurrir a ella. El mensaje sigue tan vigente como en esos años.

Saludos!!

Isa

Competencia de Remo entre Japón y Chile

Primera competencia, los remeros japoneses llegan a la meta una hora antes que el equipo Chileno. De regreso en al país, el Comité Ejecutivo se reúne para analizar las causas de tan desconcertante e imprevisto resultado.

Las conclusiones son:

Equipo Japonés: 1 Jefe de remeros y 10 remeros.
Equipo Chileno: 10 Jefes de equipo y 1 remero.

La decisión pasa a la esfera de planificación estratégica para el próximo año, con una reestructuración que toque profundamente a la delegación.

En la proxima competencia el equipo japonés vuelve a adelantarse desde el comienzo. Esta vez el equipo Chileno arriba a la meta dos horas más tarde. El nuevo análisis del Comité Ejecutivo arroja los siguientes resultados:

El equipo Chileno, tras los cambios introducidos por el departamento de Planificación Estratégica tenía la composición siguiente:

1 Jefe de equipo
2 asistentes al jefe
7 jefes de sección
1 remero.

Equipo japonés: siguió igual.

La conclusión del comité fue unánime y lapidaria. EL REMERO ES UN INCOMPETENTE.

Para una proxima competencia, el departamento de Nuevas Tecnologías y Negocios ha puesto en marcha un plan destinado a mejorar la productividad introduciendo novedosas modificacionesen la organización que generarán, sin lugar a dudas, incrementos substanciales de eficiencia. Serán la clave del éxito, el broche de oro de un trabajo que va a humillar al mismísimo Emperador del Japón.

El resultado es catastrófico, el equipo Chileno llega tres horas más tarde que el japonés. Las conclusiones revelan datos escalofriantes.

Para desconcertar, el equipo japonés optó por la alineación tradicional, un jefe de equipo y 10 remeros.

El equipo Chileno utilizó una novedosa formación vanguardista integrada por:

Un jefe de equipo
Dos auditores de calidad total
Un asesor de poder
Un supervisor de planeación
Un analista de procedimientos
Un experto en tecnología
Un controlador
Un jefe de sección
Un apuntador de tiempos
Un remero

Luego de varios días de agotadoras reuniones y profundo análisis, el comité decidió castigar AL REMERO quitándole todos los bonos e incentivos por el fracaso alcanzado.

En la reunión de cierre el comité junto con los accionistas representativos concluyeron: Recurriremos a la contratación de un nuevo remero, pero a través de una agencia con el objeto de no tener que lidiar con el sindicato y no estar atado a convenios laborales, que sin duda degradan la eficiencia y productividad de los recursos.

En sesion extraordinaria el directorio obtuvo tres moralejas:

1. No hay justicia en los juegos olímpicos.
2. Los japoneses usan anabólicos.
3. El remero era reactivo en lugar de proactivo, era flojo y no se apegó a la misión, visión, objetivos, estrategias y tácticas del sistema. Y por si fuera poco, no supo trabajar en equipo... POR GENTE COMO ESA NUESTRO PAÍS NO AVANZA!




viernes, diciembre 05, 2008

SP2 para Windows Vista y Server 2008

Les dejo los cambios que trae este parche Beta, trae varias mejoras que vale la pena darle una mirada, solo sigan el siguiente link.

http://technet.microsoft.com/en-us/library/dd335036.aspx

Saludos!

Isa