problemas con el sp4 del SQL

12/09/2005 - 16:27 por fgoico | Informe spam
Estimados señores,

Hemos detectado algunos problemas en nuestros servidores de desarrollo
despues instalar el Service Pack 4 del MSSQL. Concretamente, hemos detectado
un notable deterioro en el rendimiento del servidor, concretamente en el
consumo de CPU y acceso a disco cuando se ejecutan algunas querys. Os voy a
poner un ejemplo, no tengo muy claro cual es la mejor manera de mostrar esto,
pero espero que lo que os adjunto a continuacion os sirva de algo, y sino
pregúntarme lo que querais.

SERVIDOR1:
2 CPU PIV XEON 3,2GHZ 2MBL2
4GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2000 SERVER CON SP4 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

SERVIDOR2:
2 CPU PIV XEON 3,2GHZ 2MBL2
4GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2003 SERVER STD CON SP2 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

SERVIDOR3:
2 CPU PIV XEON 2,8GHZ 2MBL2
6GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2003 SERVER ENTERPRISE CON SP2 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

Bien, una de las querys en las que hemos detectado este problema es:

declare @IdEmpresas as decimal
declare @Login as varchar(30)
declare @IdAppModulos as varchar(5)
declare @IdAppContenedores as varchar(50)

set @IdEmpresas = 1
set @Login = 'betas'
set @IdAppModulos = 'EM'
set @IdAppContenedores = 'frmEmpleados'

SELECT AppPermisosEmpresas.IdAppObjetos AS Objeto,
AppPermisosEmpresas.IdAppContenedores AS Contenedor,
AppPermisosEmpresas.IdAppModulos AS Modulo,
IsNull(AppPermisosEmpresas.Visible,0) as Visible,
IsNull(AppPermisosEmpresas.Enabled,0) AS
Enabled,IsNull(AppPermisosEmpresas.NoDisponible,0) AS NoDisponible
FROM AppPermisosEmpresas INNER JOIN AppObjetos ON
AppPermisosEmpresas.IdAppModulos=AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedoresAppObjetos.Contenedor AND AppPermisosEmpresas.IdAppObjetos=AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1)=1 AND AppPermisosEmpresas.Login =
@Login AND
AppPermisosEmpresas.IdAppContenedores = @IdAppContenedores AND
AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos = @IdAppModulos --And
ISNULL(AppObjetos.NoDisponible, 0)= 0
GROUP BY AppPermisosEmpresas.IdAppObjetos,
AppPermisosEmpresas.IdAppContenedores, AppPermisosEmpresas.IdAppModulos,
AppPermisosEmpresas.Enabled, AppPermisosEmpresas.Visible,
IsNull(AppPermisosEmpresas.NoDisponible,0)
UNION
SELECT dbo.AppObjetos.Objeto AS Objeto, dbo.AppObjetos.Contenedor AS
Contenedor, dbo.AppObjetos.IdAppModulos AS Modulo,
ISNULL(dbo.AppObjetos.DefVisible, 0) AS Visible,
ISNULL(dbo.AppObjetos.DefEnabled, 0) AS Enabled,
ISNULL(dbo.AppObjetos.NoDisponible, 0)
AS NoDisponible
FROM dbo.AppObjetos LEFT OUTER JOIN
dbo.AppPermisosEmpresas ON dbo.AppObjetos.IdAppModulos
= dbo.AppPermisosEmpresas.IdAppModulos
WHERE (dbo.AppPermisosEmpresas.IdEmpresas = @IdEmpresas) AND
(dbo.AppPermisosEmpresas.Login = @Login) AND
(ISNULL(dbo.AppObjetos.EsControlVB, 1) = 1) AND
(dbo.AppPermisosEmpresas.Visible = 1) AND
(dbo.AppObjetos.IdAppModulos = @IdAppModulos)
And (dbo.AppObjetos.Contenedor = @IdAppContenedores)
AND (dbo.AppObjetos.Objeto NOT IN
(SELECT AppPermisosEmpresas.IdAppObjetos
FROM AppPermisosEmpresas INNER JOIN
AppObjetos ON AppPermisosEmpresas.IdAppModulos =
AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores =
AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos =
AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1) = 1 AND
AppPermisosEmpresas.Login = @Login AND
AppPermisosEmpresas.IdAppContenedores =
@IdAppContenedores AND AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos =
@IdAppModulos
GROUP BY AppPermisosEmpresas.IdAppObjetos))

UNION
SELECT AppObjetos.Objeto AS Objeto, AppObjetos.Contenedor AS Contenedor,
AppObjetos.IdAppModulos AS Modulo, 0 as Visible, 0 AS Enabled,
IsNull(AppObjetos.NoDisponible,0)
AS NoDisponible From AppObjetos
Where AppObjetos.IdAppModulos = @IdAppModulos And
ISNULL(AppObjetos.EsControlVB,1) = 1
And AppObjetos.Contenedor = @IdAppContenedores And AppObjetos.Objeto Not
In (
SELECT AppPermisosEmpresas.IdAppObjetos AS Objeto
FROM AppPermisosEmpresas LEFT OUTER JOIN AppObjetos ON
AppPermisosEmpresas.IdAppModulos=AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedoresAppObjetos.Contenedor AND AppPermisosEmpresas.IdAppObjetos=AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1)=1 AND AppPermisosEmpresas.Login =
@Login AND
AppPermisosEmpresas.IdAppContenedores = @IdAppContenedores AND
AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos = @IdAppModulos --And
ISNULL(AppObjetos.NoDisponible, 0)= 0
GROUP BY AppPermisosEmpresas.IdAppObjetos,
AppPermisosEmpresas.IdAppContenedores, AppPermisosEmpresas.IdAppModulos,
AppPermisosEmpresas.Enabled, AppPermisosEmpresas.Visible,
IsNull(AppPermisosEmpresas.NoDisponible,0)
UNION
SELECT dbo.AppObjetos.Objeto AS Objeto
FROM dbo.AppObjetos LEFT OUTER JOIN
dbo.AppPermisosEmpresas ON dbo.AppObjetos.IdAppModulos
= dbo.AppPermisosEmpresas.IdAppModulos
WHERE (dbo.AppPermisosEmpresas.IdEmpresas = @IdEmpresas) AND
(dbo.AppPermisosEmpresas.Login = @Login) AND
(ISNULL(dbo.AppObjetos.EsControlVB, 1) = 1) AND
(dbo.AppPermisosEmpresas.Visible = 1) AND
(dbo.AppObjetos.IdAppModulos = @IdAppModulos)
AND (dbo.AppObjetos.Objeto NOT IN
(SELECT AppPermisosEmpresas.IdAppObjetos
FROM AppPermisosEmpresas LEFT OUTER JOIN
AppObjetos ON
AppPermisosEmpresas.IdAppModulos = AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores =
AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos =
AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1) = 1 AND
AppPermisosEmpresas.Login = @Login AND
AppPermisosEmpresas.IdAppContenedores =
@IdAppContenedores AND AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos =
@IdAppModulos
GROUP BY AppPermisosEmpresas.IdAppObjetos))
)
GO

Las tablas son:

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[AppObjetos]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[AppObjetos]
GO

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[AppPermisosEmpresas]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
drop table [dbo].[AppPermisosEmpresas]
GO

CREATE TABLE [dbo].[AppObjetos] (
[IdAppModulos] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Contenedor] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Objeto] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Descripcion] [varchar] (200) COLLATE Modern_Spanish_CI_AS NULL ,
[DefVisible] [bit] NULL ,
[DefEnabled] [bit] NULL ,
[FechaMod] [datetime] NULL ,
[Objeto_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[Contenedor_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[IdAppModulos_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[EsControlVB] [bit] NULL ,
[NoDisponible] [bit] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AppPermisosEmpresas] (
[IdEmpresas] [decimal](9, 0) NOT NULL ,
[IdAppModulos] [varchar] (5) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdAppContenedores] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdAppObjetos] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Login] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Visible] [bit] NOT NULL ,
[Enabled] [bit] NOT NULL ,
[Plantilla] [bit] NOT NULL ,
[NoDisponible] [bit] NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppObjetos] WITH NOCHECK ADD
CONSTRAINT [PKAppObjetos] PRIMARY KEY CLUSTERED
(
[IdAppModulos],
[Contenedor],
[Objeto]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppPermisosEmpresas] WITH NOCHECK ADD
PRIMARY KEY CLUSTERED
(
[IdEmpresas],
[IdAppModulos],
[IdAppContenedores],
[IdAppObjetos],
[Login]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppObjetos] ADD
CONSTRAINT [DF_AppObjetos_EsControlVB] DEFAULT (1) FOR [EsControlVB]
GO

CREATE INDEX [IdAppModulos] ON [dbo].[AppObjetos]([IdAppModulos]) WITH
FILLFACTOR = 90 ON [PRIMARY]
GO

CREATE INDEX [IdObjetos] ON [dbo].[AppObjetos]([Contenedor]) WITH
FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppPermisosEmpresas] ADD
CONSTRAINT [DF___TMP_DBTo__IdEmp__0B69FEE7] DEFAULT (0) FOR [IdEmpresas],
CONSTRAINT [DF___TMP_DBTo__IdApp__0C5E2320] DEFAULT ('') FOR [IdAppModulos],
CONSTRAINT [DF___TMP_DBTo__IdApp__0D524759] DEFAULT ('') FOR
[IdAppContenedores],
CONSTRAINT [DF___TMP_DBTo__IdApp__0E466B92] DEFAULT ('') FOR [IdAppObjetos],
CONSTRAINT [DF___TMP_DBTo__Login__0F3A8FCB] DEFAULT ('') FOR [Login],
CONSTRAINT [DF___TMP_DBTo__Visib__102EB404] DEFAULT (0) FOR [Visible],
CONSTRAINT [DF___TMP_DBTo__Enabl__1122D83D] DEFAULT (0) FOR [Enabled],
CONSTRAINT [DF___TMP_DBTo__Plant__1216FC76] DEFAULT (0) FOR [Plantilla]
GO

AppPermisosEmpresas tiene 507498 registros
AppObjetos tiene 1124 registros

El problema está en que si ejecutas esta query con el SP3a del SQL los
resultados que muestra el analizador del SQL son estos:

RPC COMPLETED
CPU : 79
READS : 2592
WRITES : 0
DURATION: 78

y despues de instalar el SP4 , la misma consulta devuelve estos resultados

RPC COMPLETED
CPU : 796
READS : 47167
WRITES : 0
DURATION : 1890

Como podeis comprobar el incremento de los tiempos y de las lecturas son
notables. Repito, el servidor es el mismo, la base de datos la misma, el
usuario el mismo, SOLO CAMBIA EL SERVICE PACK. Las pruebas se hicieron en los
servidores que se detallo al principio del mensaje y en los tres servidores
ocurre exactamente lo mismo. Por supuesto, las consultas las he ejecutado
varias veces y siempre con resultados muy parejos...

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
12/09/2005 - 16:43 | Informe spam
Actualizastes las estadisticas?
Puedes postear el plan de ejecucion?


AMB

"fgoico" wrote:

Estimados señores,

Hemos detectado algunos problemas en nuestros servidores de desarrollo
despues instalar el Service Pack 4 del MSSQL. Concretamente, hemos detectado
un notable deterioro en el rendimiento del servidor, concretamente en el
consumo de CPU y acceso a disco cuando se ejecutan algunas querys. Os voy a
poner un ejemplo, no tengo muy claro cual es la mejor manera de mostrar esto,
pero espero que lo que os adjunto a continuacion os sirva de algo, y sino
pregúntarme lo que querais.

SERVIDOR1:
2 CPU PIV XEON 3,2GHZ 2MBL2
4GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2000 SERVER CON SP4 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

SERVIDOR2:
2 CPU PIV XEON 3,2GHZ 2MBL2
4GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2003 SERVER STD CON SP2 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

SERVIDOR3:
2 CPU PIV XEON 2,8GHZ 2MBL2
6GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2003 SERVER ENTERPRISE CON SP2 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

Bien, una de las querys en las que hemos detectado este problema es:

declare @IdEmpresas as decimal
declare @Login as varchar(30)
declare @IdAppModulos as varchar(5)
declare @IdAppContenedores as varchar(50)

set @IdEmpresas = 1
set @Login = 'betas'
set @IdAppModulos = 'EM'
set @IdAppContenedores = 'frmEmpleados'

SELECT AppPermisosEmpresas.IdAppObjetos AS Objeto,
AppPermisosEmpresas.IdAppContenedores AS Contenedor,
AppPermisosEmpresas.IdAppModulos AS Modulo,
IsNull(AppPermisosEmpresas.Visible,0) as Visible,
IsNull(AppPermisosEmpresas.Enabled,0) AS
Enabled,IsNull(AppPermisosEmpresas.NoDisponible,0) AS NoDisponible
FROM AppPermisosEmpresas INNER JOIN AppObjetos ON
AppPermisosEmpresas.IdAppModulos=AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores> AppObjetos.Contenedor AND AppPermisosEmpresas.IdAppObjetos=AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1)=1 AND AppPermisosEmpresas.Login =
@Login AND
AppPermisosEmpresas.IdAppContenedores = @IdAppContenedores AND
AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos = @IdAppModulos --And
ISNULL(AppObjetos.NoDisponible, 0)= 0
GROUP BY AppPermisosEmpresas.IdAppObjetos,
AppPermisosEmpresas.IdAppContenedores, AppPermisosEmpresas.IdAppModulos,
AppPermisosEmpresas.Enabled, AppPermisosEmpresas.Visible,
IsNull(AppPermisosEmpresas.NoDisponible,0)
UNION
SELECT dbo.AppObjetos.Objeto AS Objeto, dbo.AppObjetos.Contenedor AS
Contenedor, dbo.AppObjetos.IdAppModulos AS Modulo,
ISNULL(dbo.AppObjetos.DefVisible, 0) AS Visible,
ISNULL(dbo.AppObjetos.DefEnabled, 0) AS Enabled,
ISNULL(dbo.AppObjetos.NoDisponible, 0)
AS NoDisponible
FROM dbo.AppObjetos LEFT OUTER JOIN
dbo.AppPermisosEmpresas ON dbo.AppObjetos.IdAppModulos
= dbo.AppPermisosEmpresas.IdAppModulos
WHERE (dbo.AppPermisosEmpresas.IdEmpresas = @IdEmpresas) AND
(dbo.AppPermisosEmpresas.Login = @Login) AND
(ISNULL(dbo.AppObjetos.EsControlVB, 1) = 1) AND
(dbo.AppPermisosEmpresas.Visible = 1) AND
(dbo.AppObjetos.IdAppModulos = @IdAppModulos)
And (dbo.AppObjetos.Contenedor = @IdAppContenedores)
AND (dbo.AppObjetos.Objeto NOT IN
(SELECT AppPermisosEmpresas.IdAppObjetos
FROM AppPermisosEmpresas INNER JOIN
AppObjetos ON AppPermisosEmpresas.IdAppModulos =
AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores =
AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos =
AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1) = 1 AND
AppPermisosEmpresas.Login = @Login AND
AppPermisosEmpresas.IdAppContenedores =
@IdAppContenedores AND AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos =
@IdAppModulos
GROUP BY AppPermisosEmpresas.IdAppObjetos))

UNION
SELECT AppObjetos.Objeto AS Objeto, AppObjetos.Contenedor AS Contenedor,
AppObjetos.IdAppModulos AS Modulo, 0 as Visible, 0 AS Enabled,
IsNull(AppObjetos.NoDisponible,0)
AS NoDisponible From AppObjetos
Where AppObjetos.IdAppModulos = @IdAppModulos And
ISNULL(AppObjetos.EsControlVB,1) = 1
And AppObjetos.Contenedor = @IdAppContenedores And AppObjetos.Objeto Not
In (
SELECT AppPermisosEmpresas.IdAppObjetos AS Objeto
FROM AppPermisosEmpresas LEFT OUTER JOIN AppObjetos ON
AppPermisosEmpresas.IdAppModulos=AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores> AppObjetos.Contenedor AND AppPermisosEmpresas.IdAppObjetos=AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1)=1 AND AppPermisosEmpresas.Login =
@Login AND
AppPermisosEmpresas.IdAppContenedores = @IdAppContenedores AND
AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos = @IdAppModulos --And
ISNULL(AppObjetos.NoDisponible, 0)= 0
GROUP BY AppPermisosEmpresas.IdAppObjetos,
AppPermisosEmpresas.IdAppContenedores, AppPermisosEmpresas.IdAppModulos,
AppPermisosEmpresas.Enabled, AppPermisosEmpresas.Visible,
IsNull(AppPermisosEmpresas.NoDisponible,0)
UNION
SELECT dbo.AppObjetos.Objeto AS Objeto
FROM dbo.AppObjetos LEFT OUTER JOIN
dbo.AppPermisosEmpresas ON dbo.AppObjetos.IdAppModulos
= dbo.AppPermisosEmpresas.IdAppModulos
WHERE (dbo.AppPermisosEmpresas.IdEmpresas = @IdEmpresas) AND
(dbo.AppPermisosEmpresas.Login = @Login) AND
(ISNULL(dbo.AppObjetos.EsControlVB, 1) = 1) AND
(dbo.AppPermisosEmpresas.Visible = 1) AND
(dbo.AppObjetos.IdAppModulos = @IdAppModulos)
AND (dbo.AppObjetos.Objeto NOT IN
(SELECT AppPermisosEmpresas.IdAppObjetos
FROM AppPermisosEmpresas LEFT OUTER JOIN
AppObjetos ON
AppPermisosEmpresas.IdAppModulos = AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores =
AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos =
AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1) = 1 AND
AppPermisosEmpresas.Login = @Login AND
AppPermisosEmpresas.IdAppContenedores =
@IdAppContenedores AND AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos =
@IdAppModulos
GROUP BY AppPermisosEmpresas.IdAppObjetos))
)
GO

Las tablas son:

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[AppObjetos]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[AppObjetos]
GO

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[AppPermisosEmpresas]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
drop table [dbo].[AppPermisosEmpresas]
GO

CREATE TABLE [dbo].[AppObjetos] (
[IdAppModulos] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Contenedor] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Objeto] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Descripcion] [varchar] (200) COLLATE Modern_Spanish_CI_AS NULL ,
[DefVisible] [bit] NULL ,
[DefEnabled] [bit] NULL ,
[FechaMod] [datetime] NULL ,
[Objeto_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[Contenedor_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[IdAppModulos_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[EsControlVB] [bit] NULL ,
[NoDisponible] [bit] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AppPermisosEmpresas] (
[IdEmpresas] [decimal](9, 0) NOT NULL ,
[IdAppModulos] [varchar] (5) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdAppContenedores] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdAppObjetos] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Login] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Visible] [bit] NOT NULL ,
[Enabled] [bit] NOT NULL ,
[Plantilla] [bit] NOT NULL ,
[NoDisponible] [bit] NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppObjetos] WITH NOCHECK ADD
CONSTRAINT [PKAppObjetos] PRIMARY KEY CLUSTERED
(
[IdAppModulos],
[Contenedor],
[Objeto]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppPermisosEmpresas] WITH NOCHECK ADD
PRIMARY KEY CLUSTERED
(
[IdEmpresas],
[IdAppModulos],
[IdAppContenedores],
[IdAppObjetos],
[Login]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppObjetos] ADD
CONSTRAINT [DF_AppObjetos_EsControlVB] DEFAULT (1) FOR [EsControlVB]
GO

CREATE INDEX [IdAppModulos] ON [dbo].[AppObjetos]([IdAppModulos]) WITH
FILLFACTOR = 90 ON [PRIMARY]
GO

CREATE INDEX [IdObjetos] ON [dbo].[AppObjetos]([Contenedor]) WITH
FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppPermisosEmpresas] ADD
CONSTRAINT [DF___TMP_DBTo__IdEmp__0B69FEE7] DEFAULT (0) FOR [IdEmpresas],
CONSTRAINT [DF___TMP_DBTo__IdApp__0C5E2320] DEFAULT ('') FOR [IdAppModulos],
CONSTRAINT [DF___TMP_DBTo__IdApp__0D524759] DEFAULT ('') FOR
[IdAppContenedores],
CONSTRAINT [DF___TMP_DBTo__IdApp__0E466B92] DEFAULT ('') FOR [IdAppObjetos],
CONSTRAINT [DF___TMP_DBTo__Login__0F3A8FCB] DEFAULT ('') FOR [Login],
CONSTRAINT [DF___TMP_DBTo__Visib__102EB404] DEFAULT (0) FOR [Visible],
CONSTRAINT [DF___TMP_DBTo__Enabl__1122D83D] DEFAULT (0) FOR [Enabled],
CONSTRAINT [DF___TMP_DBTo__Plant__1216FC76] DEFAULT (0) FOR [Plantilla]
GO

AppPermisosEmpresas tiene 507498 registros
AppObjetos tiene 1124 registros

El problema está en que si ejecutas esta query con el SP3a del SQL los
resultados que muestra el analizador del SQL son estos:

RPC COMPLETED
CPU : 79
READS : 2592
WRITES : 0
DURATION: 78

y despues de instalar el SP4 , la misma consulta devuelve estos resultados

RPC COMPLETED
CPU : 796
READS : 47167
WRITES : 0
DURATION : 1890

Como podeis comprobar el incremento de los tiempos y de las lecturas son
notables. Repito, el servidor es el mismo, la base de datos la misma, el
usuario el mismo, SOLO CAMBIA EL SERVICE PACK. Las pruebas se hicieron en los
servidores que se detallo al principio del mensaje y en los tres servidores
ocurre exactamente lo mismo. Por supuesto, las consultas las he ejecutado
varias veces y siempre con resultados muy parejos...
Respuesta Responder a este mensaje
#2 Carlo Sorrel
12/09/2005 - 21:51 | Informe spam
Estimado, debo confesar que lo que comentas puede ser efectivo, ya que he
pasado a producción el Service pack me ha degradado el rendimiento de uno de
mis server en forma catastrófica, tanto así que tuve que volver atras, con
lo cual se me soluciono el problema. Ahora lo extraño es que hasta el
momento sólo fue en uno de mis Server, no en todos (tengo 6), lo que tambien
e notado es que se aumentan ostensiblemente los bloqueos.., te pasa algo
similar..???
Saludos.

Atte.,
Carlo Sorrel

"fgoico" escribió en el mensaje
news:
Estimados señores,

Hemos detectado algunos problemas en nuestros servidores de desarrollo
despues instalar el Service Pack 4 del MSSQL. Concretamente, hemos
detectado
un notable deterioro en el rendimiento del servidor, concretamente en el
consumo de CPU y acceso a disco cuando se ejecutan algunas querys. Os voy
a
poner un ejemplo, no tengo muy claro cual es la mejor manera de mostrar
esto,
pero espero que lo que os adjunto a continuacion os sirva de algo, y sino
pregúntarme lo que querais.

SERVIDOR1:
2 CPU PIV XEON 3,2GHZ 2MBL2
4GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2000 SERVER CON SP4 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

SERVIDOR2:
2 CPU PIV XEON 3,2GHZ 2MBL2
4GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2003 SERVER STD CON SP2 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

SERVIDOR3:
2 CPU PIV XEON 2,8GHZ 2MBL2
6GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2003 SERVER ENTERPRISE CON SP2 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

Bien, una de las querys en las que hemos detectado este problema es:

declare @IdEmpresas as decimal
declare @Login as varchar(30)
declare @IdAppModulos as varchar(5)
declare @IdAppContenedores as varchar(50)

set @IdEmpresas = 1
set @Login = 'betas'
set @IdAppModulos = 'EM'
set @IdAppContenedores = 'frmEmpleados'

SELECT AppPermisosEmpresas.IdAppObjetos AS Objeto,
AppPermisosEmpresas.IdAppContenedores AS Contenedor,
AppPermisosEmpresas.IdAppModulos AS Modulo,
IsNull(AppPermisosEmpresas.Visible,0) as Visible,
IsNull(AppPermisosEmpresas.Enabled,0) AS
Enabled,IsNull(AppPermisosEmpresas.NoDisponible,0) AS NoDisponible
FROM AppPermisosEmpresas INNER JOIN AppObjetos ON
AppPermisosEmpresas.IdAppModulos=AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores> AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos=AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1)=1 AND AppPermisosEmpresas.Login > @Login AND
AppPermisosEmpresas.IdAppContenedores = @IdAppContenedores AND
AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos = @IdAppModulos --And
ISNULL(AppObjetos.NoDisponible, 0)= 0
GROUP BY AppPermisosEmpresas.IdAppObjetos,
AppPermisosEmpresas.IdAppContenedores, AppPermisosEmpresas.IdAppModulos,
AppPermisosEmpresas.Enabled, AppPermisosEmpresas.Visible,
IsNull(AppPermisosEmpresas.NoDisponible,0)
UNION
SELECT dbo.AppObjetos.Objeto AS Objeto, dbo.AppObjetos.Contenedor AS
Contenedor, dbo.AppObjetos.IdAppModulos AS Modulo,
ISNULL(dbo.AppObjetos.DefVisible, 0) AS Visible,
ISNULL(dbo.AppObjetos.DefEnabled, 0) AS Enabled,
ISNULL(dbo.AppObjetos.NoDisponible, 0)
AS NoDisponible
FROM dbo.AppObjetos LEFT OUTER JOIN
dbo.AppPermisosEmpresas ON
dbo.AppObjetos.IdAppModulos
= dbo.AppPermisosEmpresas.IdAppModulos
WHERE (dbo.AppPermisosEmpresas.IdEmpresas = @IdEmpresas) AND
(dbo.AppPermisosEmpresas.Login = @Login) AND
(ISNULL(dbo.AppObjetos.EsControlVB, 1) = 1) AND
(dbo.AppPermisosEmpresas.Visible = 1) AND
(dbo.AppObjetos.IdAppModulos = @IdAppModulos)
And (dbo.AppObjetos.Contenedor = @IdAppContenedores)
AND (dbo.AppObjetos.Objeto NOT IN
(SELECT AppPermisosEmpresas.IdAppObjetos
FROM AppPermisosEmpresas INNER JOIN
AppObjetos ON AppPermisosEmpresas.IdAppModulos > AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores > AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos > AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1) = 1 AND
AppPermisosEmpresas.Login = @Login AND
AppPermisosEmpresas.IdAppContenedores > @IdAppContenedores AND AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos > @IdAppModulos
GROUP BY AppPermisosEmpresas.IdAppObjetos))

UNION
SELECT AppObjetos.Objeto AS Objeto, AppObjetos.Contenedor AS Contenedor,
AppObjetos.IdAppModulos AS Modulo, 0 as Visible, 0 AS Enabled,
IsNull(AppObjetos.NoDisponible,0)
AS NoDisponible From AppObjetos
Where AppObjetos.IdAppModulos = @IdAppModulos And
ISNULL(AppObjetos.EsControlVB,1) = 1
And AppObjetos.Contenedor = @IdAppContenedores And AppObjetos.Objeto Not
In (
SELECT AppPermisosEmpresas.IdAppObjetos AS Objeto
FROM AppPermisosEmpresas LEFT OUTER JOIN AppObjetos ON
AppPermisosEmpresas.IdAppModulos=AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores> AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos=AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1)=1 AND AppPermisosEmpresas.Login > @Login AND
AppPermisosEmpresas.IdAppContenedores = @IdAppContenedores AND
AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos = @IdAppModulos --And
ISNULL(AppObjetos.NoDisponible, 0)= 0
GROUP BY AppPermisosEmpresas.IdAppObjetos,
AppPermisosEmpresas.IdAppContenedores, AppPermisosEmpresas.IdAppModulos,
AppPermisosEmpresas.Enabled, AppPermisosEmpresas.Visible,
IsNull(AppPermisosEmpresas.NoDisponible,0)
UNION
SELECT dbo.AppObjetos.Objeto AS Objeto
FROM dbo.AppObjetos LEFT OUTER JOIN
dbo.AppPermisosEmpresas ON
dbo.AppObjetos.IdAppModulos
= dbo.AppPermisosEmpresas.IdAppModulos
WHERE (dbo.AppPermisosEmpresas.IdEmpresas = @IdEmpresas) AND
(dbo.AppPermisosEmpresas.Login = @Login) AND
(ISNULL(dbo.AppObjetos.EsControlVB, 1) = 1) AND
(dbo.AppPermisosEmpresas.Visible = 1) AND
(dbo.AppObjetos.IdAppModulos = @IdAppModulos)
AND (dbo.AppObjetos.Objeto NOT IN
(SELECT AppPermisosEmpresas.IdAppObjetos
FROM AppPermisosEmpresas LEFT OUTER JOIN
AppObjetos ON
AppPermisosEmpresas.IdAppModulos = AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores > AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos > AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1) = 1 AND
AppPermisosEmpresas.Login = @Login AND
AppPermisosEmpresas.IdAppContenedores > @IdAppContenedores AND AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos > @IdAppModulos
GROUP BY AppPermisosEmpresas.IdAppObjetos))
)
GO

Las tablas son:

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[AppObjetos]') and OBJECTPROPERTY(id, N'IsUserTable') =
1)
drop table [dbo].[AppObjetos]
GO

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[AppPermisosEmpresas]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
drop table [dbo].[AppPermisosEmpresas]
GO

CREATE TABLE [dbo].[AppObjetos] (
[IdAppModulos] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Contenedor] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Objeto] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Descripcion] [varchar] (200) COLLATE Modern_Spanish_CI_AS NULL ,
[DefVisible] [bit] NULL ,
[DefEnabled] [bit] NULL ,
[FechaMod] [datetime] NULL ,
[Objeto_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[Contenedor_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[IdAppModulos_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[EsControlVB] [bit] NULL ,
[NoDisponible] [bit] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AppPermisosEmpresas] (
[IdEmpresas] [decimal](9, 0) NOT NULL ,
[IdAppModulos] [varchar] (5) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdAppContenedores] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdAppObjetos] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Login] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Visible] [bit] NOT NULL ,
[Enabled] [bit] NOT NULL ,
[Plantilla] [bit] NOT NULL ,
[NoDisponible] [bit] NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppObjetos] WITH NOCHECK ADD
CONSTRAINT [PKAppObjetos] PRIMARY KEY CLUSTERED
(
[IdAppModulos],
[Contenedor],
[Objeto]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppPermisosEmpresas] WITH NOCHECK ADD
PRIMARY KEY CLUSTERED
(
[IdEmpresas],
[IdAppModulos],
[IdAppContenedores],
[IdAppObjetos],
[Login]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppObjetos] ADD
CONSTRAINT [DF_AppObjetos_EsControlVB] DEFAULT (1) FOR [EsControlVB]
GO

CREATE INDEX [IdAppModulos] ON [dbo].[AppObjetos]([IdAppModulos]) WITH
FILLFACTOR = 90 ON [PRIMARY]
GO

CREATE INDEX [IdObjetos] ON [dbo].[AppObjetos]([Contenedor]) WITH
FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppPermisosEmpresas] ADD
CONSTRAINT [DF___TMP_DBTo__IdEmp__0B69FEE7] DEFAULT (0) FOR [IdEmpresas],
CONSTRAINT [DF___TMP_DBTo__IdApp__0C5E2320] DEFAULT ('') FOR
[IdAppModulos],
CONSTRAINT [DF___TMP_DBTo__IdApp__0D524759] DEFAULT ('') FOR
[IdAppContenedores],
CONSTRAINT [DF___TMP_DBTo__IdApp__0E466B92] DEFAULT ('') FOR
[IdAppObjetos],
CONSTRAINT [DF___TMP_DBTo__Login__0F3A8FCB] DEFAULT ('') FOR [Login],
CONSTRAINT [DF___TMP_DBTo__Visib__102EB404] DEFAULT (0) FOR [Visible],
CONSTRAINT [DF___TMP_DBTo__Enabl__1122D83D] DEFAULT (0) FOR [Enabled],
CONSTRAINT [DF___TMP_DBTo__Plant__1216FC76] DEFAULT (0) FOR [Plantilla]
GO

AppPermisosEmpresas tiene 507498 registros
AppObjetos tiene 1124 registros

El problema está en que si ejecutas esta query con el SP3a del SQL los
resultados que muestra el analizador del SQL son estos:

RPC COMPLETED
CPU : 79
READS : 2592
WRITES : 0
DURATION: 78

y despues de instalar el SP4 , la misma consulta devuelve estos resultados

RPC COMPLETED
CPU : 796
READS : 47167
WRITES : 0
DURATION : 1890

Como podeis comprobar el incremento de los tiempos y de las lecturas son
notables. Repito, el servidor es el mismo, la base de datos la misma, el
usuario el mismo, SOLO CAMBIA EL SERVICE PACK. Las pruebas se hicieron en
los
servidores que se detallo al principio del mensaje y en los tres
servidores
ocurre exactamente lo mismo. Por supuesto, las consultas las he ejecutado
varias veces y siempre con resultados muy parejos...
Respuesta Responder a este mensaje
#3 Carlo Sorrel
12/09/2005 - 22:03 | Informe spam
Sigueindo con el tema, he buscado en internet sobre el tema, y mira el link
que te adjunto, puede que te sirva de algo...

http://support.microsoft.com/kb/897284/en-us

Saludos.

Atte.,
Carlo Sorrel

"fgoico" escribió en el mensaje
news:
Estimados señores,

Hemos detectado algunos problemas en nuestros servidores de desarrollo
despues instalar el Service Pack 4 del MSSQL. Concretamente, hemos
detectado
un notable deterioro en el rendimiento del servidor, concretamente en el
consumo de CPU y acceso a disco cuando se ejecutan algunas querys. Os voy
a
poner un ejemplo, no tengo muy claro cual es la mejor manera de mostrar
esto,
pero espero que lo que os adjunto a continuacion os sirva de algo, y sino
pregúntarme lo que querais.

SERVIDOR1:
2 CPU PIV XEON 3,2GHZ 2MBL2
4GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2000 SERVER CON SP4 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

SERVIDOR2:
2 CPU PIV XEON 3,2GHZ 2MBL2
4GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2003 SERVER STD CON SP2 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

SERVIDOR3:
2 CPU PIV XEON 2,8GHZ 2MBL2
6GB RAM
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 1 (dos discos de 72GB SCSI U320 de 15K rpm)
un raid 10 (cuatro discos de 72GB SCSI U320 de 15K rpm)
WINDOWS 2003 SERVER ENTERPRISE CON SP2 Y ULTIMAS ACTUALIZACIONES
MICROSOFT SQL SERVER 2000 STANDARD

Bien, una de las querys en las que hemos detectado este problema es:

declare @IdEmpresas as decimal
declare @Login as varchar(30)
declare @IdAppModulos as varchar(5)
declare @IdAppContenedores as varchar(50)

set @IdEmpresas = 1
set @Login = 'betas'
set @IdAppModulos = 'EM'
set @IdAppContenedores = 'frmEmpleados'

SELECT AppPermisosEmpresas.IdAppObjetos AS Objeto,
AppPermisosEmpresas.IdAppContenedores AS Contenedor,
AppPermisosEmpresas.IdAppModulos AS Modulo,
IsNull(AppPermisosEmpresas.Visible,0) as Visible,
IsNull(AppPermisosEmpresas.Enabled,0) AS
Enabled,IsNull(AppPermisosEmpresas.NoDisponible,0) AS NoDisponible
FROM AppPermisosEmpresas INNER JOIN AppObjetos ON
AppPermisosEmpresas.IdAppModulos=AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores> AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos=AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1)=1 AND AppPermisosEmpresas.Login > @Login AND
AppPermisosEmpresas.IdAppContenedores = @IdAppContenedores AND
AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos = @IdAppModulos --And
ISNULL(AppObjetos.NoDisponible, 0)= 0
GROUP BY AppPermisosEmpresas.IdAppObjetos,
AppPermisosEmpresas.IdAppContenedores, AppPermisosEmpresas.IdAppModulos,
AppPermisosEmpresas.Enabled, AppPermisosEmpresas.Visible,
IsNull(AppPermisosEmpresas.NoDisponible,0)
UNION
SELECT dbo.AppObjetos.Objeto AS Objeto, dbo.AppObjetos.Contenedor AS
Contenedor, dbo.AppObjetos.IdAppModulos AS Modulo,
ISNULL(dbo.AppObjetos.DefVisible, 0) AS Visible,
ISNULL(dbo.AppObjetos.DefEnabled, 0) AS Enabled,
ISNULL(dbo.AppObjetos.NoDisponible, 0)
AS NoDisponible
FROM dbo.AppObjetos LEFT OUTER JOIN
dbo.AppPermisosEmpresas ON
dbo.AppObjetos.IdAppModulos
= dbo.AppPermisosEmpresas.IdAppModulos
WHERE (dbo.AppPermisosEmpresas.IdEmpresas = @IdEmpresas) AND
(dbo.AppPermisosEmpresas.Login = @Login) AND
(ISNULL(dbo.AppObjetos.EsControlVB, 1) = 1) AND
(dbo.AppPermisosEmpresas.Visible = 1) AND
(dbo.AppObjetos.IdAppModulos = @IdAppModulos)
And (dbo.AppObjetos.Contenedor = @IdAppContenedores)
AND (dbo.AppObjetos.Objeto NOT IN
(SELECT AppPermisosEmpresas.IdAppObjetos
FROM AppPermisosEmpresas INNER JOIN
AppObjetos ON AppPermisosEmpresas.IdAppModulos > AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores > AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos > AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1) = 1 AND
AppPermisosEmpresas.Login = @Login AND
AppPermisosEmpresas.IdAppContenedores > @IdAppContenedores AND AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos > @IdAppModulos
GROUP BY AppPermisosEmpresas.IdAppObjetos))

UNION
SELECT AppObjetos.Objeto AS Objeto, AppObjetos.Contenedor AS Contenedor,
AppObjetos.IdAppModulos AS Modulo, 0 as Visible, 0 AS Enabled,
IsNull(AppObjetos.NoDisponible,0)
AS NoDisponible From AppObjetos
Where AppObjetos.IdAppModulos = @IdAppModulos And
ISNULL(AppObjetos.EsControlVB,1) = 1
And AppObjetos.Contenedor = @IdAppContenedores And AppObjetos.Objeto Not
In (
SELECT AppPermisosEmpresas.IdAppObjetos AS Objeto
FROM AppPermisosEmpresas LEFT OUTER JOIN AppObjetos ON
AppPermisosEmpresas.IdAppModulos=AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores> AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos=AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1)=1 AND AppPermisosEmpresas.Login > @Login AND
AppPermisosEmpresas.IdAppContenedores = @IdAppContenedores AND
AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos = @IdAppModulos --And
ISNULL(AppObjetos.NoDisponible, 0)= 0
GROUP BY AppPermisosEmpresas.IdAppObjetos,
AppPermisosEmpresas.IdAppContenedores, AppPermisosEmpresas.IdAppModulos,
AppPermisosEmpresas.Enabled, AppPermisosEmpresas.Visible,
IsNull(AppPermisosEmpresas.NoDisponible,0)
UNION
SELECT dbo.AppObjetos.Objeto AS Objeto
FROM dbo.AppObjetos LEFT OUTER JOIN
dbo.AppPermisosEmpresas ON
dbo.AppObjetos.IdAppModulos
= dbo.AppPermisosEmpresas.IdAppModulos
WHERE (dbo.AppPermisosEmpresas.IdEmpresas = @IdEmpresas) AND
(dbo.AppPermisosEmpresas.Login = @Login) AND
(ISNULL(dbo.AppObjetos.EsControlVB, 1) = 1) AND
(dbo.AppPermisosEmpresas.Visible = 1) AND
(dbo.AppObjetos.IdAppModulos = @IdAppModulos)
AND (dbo.AppObjetos.Objeto NOT IN
(SELECT AppPermisosEmpresas.IdAppObjetos
FROM AppPermisosEmpresas LEFT OUTER JOIN
AppObjetos ON
AppPermisosEmpresas.IdAppModulos = AppObjetos.IdAppModulos AND
AppPermisosEmpresas.IdAppContenedores > AppObjetos.Contenedor AND
AppPermisosEmpresas.IdAppObjetos > AppObjetos.Objeto
WHERE ISNULL(AppObjetos.EsControlVB, 1) = 1 AND
AppPermisosEmpresas.Login = @Login AND
AppPermisosEmpresas.IdAppContenedores > @IdAppContenedores AND AppPermisosEmpresas.IdEmpresas = @IdEmpresas AND
AppPermisosEmpresas.IdAppModulos > @IdAppModulos
GROUP BY AppPermisosEmpresas.IdAppObjetos))
)
GO

Las tablas son:

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[AppObjetos]') and OBJECTPROPERTY(id, N'IsUserTable') =
1)
drop table [dbo].[AppObjetos]
GO

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[AppPermisosEmpresas]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
drop table [dbo].[AppPermisosEmpresas]
GO

CREATE TABLE [dbo].[AppObjetos] (
[IdAppModulos] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Contenedor] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Objeto] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Descripcion] [varchar] (200) COLLATE Modern_Spanish_CI_AS NULL ,
[DefVisible] [bit] NULL ,
[DefEnabled] [bit] NULL ,
[FechaMod] [datetime] NULL ,
[Objeto_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[Contenedor_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[IdAppModulos_Padre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[EsControlVB] [bit] NULL ,
[NoDisponible] [bit] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[AppPermisosEmpresas] (
[IdEmpresas] [decimal](9, 0) NOT NULL ,
[IdAppModulos] [varchar] (5) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdAppContenedores] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[IdAppObjetos] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Login] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Visible] [bit] NOT NULL ,
[Enabled] [bit] NOT NULL ,
[Plantilla] [bit] NOT NULL ,
[NoDisponible] [bit] NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppObjetos] WITH NOCHECK ADD
CONSTRAINT [PKAppObjetos] PRIMARY KEY CLUSTERED
(
[IdAppModulos],
[Contenedor],
[Objeto]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppPermisosEmpresas] WITH NOCHECK ADD
PRIMARY KEY CLUSTERED
(
[IdEmpresas],
[IdAppModulos],
[IdAppContenedores],
[IdAppObjetos],
[Login]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppObjetos] ADD
CONSTRAINT [DF_AppObjetos_EsControlVB] DEFAULT (1) FOR [EsControlVB]
GO

CREATE INDEX [IdAppModulos] ON [dbo].[AppObjetos]([IdAppModulos]) WITH
FILLFACTOR = 90 ON [PRIMARY]
GO

CREATE INDEX [IdObjetos] ON [dbo].[AppObjetos]([Contenedor]) WITH
FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[AppPermisosEmpresas] ADD
CONSTRAINT [DF___TMP_DBTo__IdEmp__0B69FEE7] DEFAULT (0) FOR [IdEmpresas],
CONSTRAINT [DF___TMP_DBTo__IdApp__0C5E2320] DEFAULT ('') FOR
[IdAppModulos],
CONSTRAINT [DF___TMP_DBTo__IdApp__0D524759] DEFAULT ('') FOR
[IdAppContenedores],
CONSTRAINT [DF___TMP_DBTo__IdApp__0E466B92] DEFAULT ('') FOR
[IdAppObjetos],
CONSTRAINT [DF___TMP_DBTo__Login__0F3A8FCB] DEFAULT ('') FOR [Login],
CONSTRAINT [DF___TMP_DBTo__Visib__102EB404] DEFAULT (0) FOR [Visible],
CONSTRAINT [DF___TMP_DBTo__Enabl__1122D83D] DEFAULT (0) FOR [Enabled],
CONSTRAINT [DF___TMP_DBTo__Plant__1216FC76] DEFAULT (0) FOR [Plantilla]
GO

AppPermisosEmpresas tiene 507498 registros
AppObjetos tiene 1124 registros

El problema está en que si ejecutas esta query con el SP3a del SQL los
resultados que muestra el analizador del SQL son estos:

RPC COMPLETED
CPU : 79
READS : 2592
WRITES : 0
DURATION: 78

y despues de instalar el SP4 , la misma consulta devuelve estos resultados

RPC COMPLETED
CPU : 796
READS : 47167
WRITES : 0
DURATION : 1890

Como podeis comprobar el incremento de los tiempos y de las lecturas son
notables. Repito, el servidor es el mismo, la base de datos la misma, el
usuario el mismo, SOLO CAMBIA EL SERVICE PACK. Las pruebas se hicieron en
los
servidores que se detallo al principio del mensaje y en los tres
servidores
ocurre exactamente lo mismo. Por supuesto, las consultas las he ejecutado
varias veces y siempre con resultados muy parejos...
Respuesta Responder a este mensaje
#4 Alejandro Mesa
13/09/2005 - 15:25 | Informe spam
Fernando,

Verdad que ponerme a interpretar ambos planes me tomaria demasiado tiempo.
Lo primero que te recomiendo es que instales el service pack 4 del sistema
operativo. Lo segundo es decirte que esos servidores estan sobre configurados
para la version de sql server que usas, lo digo porque todos tienen minimo 4
gbytes de ram y la version standard de sql server solo puede usar hasta
2gbytes.

Algo llama mi atencion y es que en el segundo plan, sql server escogio usar
paralelismo, osea repartir la carga del query entre los procesadores, pero
para mi sorpresa, operaciones de "index seek" que se realizaron en el primer
plan, ahora sql server las hace "index scan".

***** Primer plan

|--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
SEEK:([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos] AND
[AppPermisosEmpresas].[IdAppContenedores]=[@IdAppContenedores] AND
[AppPermisosEmpresas].[IdAppObjetos]=[AppObjetos].[Objeto] AND
[AppPermisosEmpresas].[Login]=[@Login]) ORDERED FORWARD)

***** Segundo plan

|--Clustered Index
Scan(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
WHERE:((([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos]) AND
[AppPermisosEmpresas].[IdAppContenedores]=[@IdAppContenedores]) AND
[AppPermisosEmpresas].[Login]=[@Login]))

Ya esto va mas alla de mis conocimientos. Pudieramos hacer una prueba
deshabilitando el paralelismo, y si esto no ayuda creo que vas a tener que
llamar a Microsoft.

Veamos que pasa si sobre escribimos la opcion de configuracion "max degree
of parallelism", medianto el uso de de la opcion "MAXDOP". Adiciona la
siguiente linea al final del codigo que posteastes en tu primer mensaje.

option (MAXDOP 1)


Chequea a ver cuanto cambio el plan de ejecucion. Dejanos saber el resultado.


AMB

"fernando goicoechea" wrote:

Alejando, te adjunto la informacion que me pediste
SP3
version del SQL:
Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05
Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows
NT 5.2 (Build 3790: Service Pack 1)

Plan de ejecucion:
Execution Tree
Sort(DISTINCT ORDER BY:([Union1044] ASC, [Union1045] ASC, [Union1046] ASC,
[Union1047] ASC, [Union1048] ASC, [Union1049] ASC))
|--Concatenation
|--Compute
Scalar(DEFINE:([Expr1005]=Convert([AppPermisosEmpresas].[IdAppModulos]),
[Expr1006]=Convert([AppPermisosEmpresas].[Visible]),
[Expr1007]=Convert([AppPermisosEmpresas].[Enabled])))
| |--Compute
Scalar(DEFINE:([Expr1004]=isnull([AppPermisosEmpresas].[NoDisponible], 0)))
| |--Nested Loops(Inner Join, OUTER
REFERENCES:([AppObjetos].[Objeto]))
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos] AND
[AppObjetos].[Contenedor]=[@IdAppContenedores]),
WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1) ORDERED FORWARD)
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
SEEK:([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos] AND
[AppPermisosEmpresas].[IdAppContenedores]=[@IdAppContenedores] AND
[AppPermisosEmpresas].[IdAppObjetos]=[AppObjetos].[Objeto] AND
[AppPermisosEmpresas].[Login]=[@Login]) ORDERED FORWARD)
|--Compute
Scalar(DEFINE:([Expr1016]=Convert(isnull([AppObjetos].[DefVisible], 0)),
[Expr1017]=Convert(isnull([AppObjetos].[DefEnabled], 0)),
[Expr1018]=isnull([AppObjetos].[NoDisponible], 0)))
| |--Nested Loops(Inner Join, OUTER
REFERENCES:([AppObjetos].[IdAppModulos]))
| |--Nested Loops(Left Anti Semi Join, OUTER
REFERENCES:([AppObjetos].[Objeto]))
| | |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos] AND
[AppObjetos].[Contenedor]=[@IdAppContenedores]),
WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1) ORDERED FORWARD)
| | |--Nested Loops(Inner Join)
| | |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos] AND
[AppObjetos].[Contenedor]=[@IdAppContenedores] AND
[AppObjetos].[Objeto]=[AppObjetos].[Objeto]),
WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1) ORDERED FORWARD)
| | |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
SEEK:([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos] AND
[AppPermisosEmpresas].[IdAppContenedores]=[@IdAppContenedores] AND
[AppPermisosEmpresas].[IdAppObjetos]=[AppObjetos].[Objeto] AND
[AppPermisosEmpresas].[Login]=[@Login]) ORDERED FORWARD)
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
SEEK:([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[AppObjetos].[IdAppModulos]),
WHERE:([AppPermisosEmpresas].[Login]=[@Login] AND
Convert([AppPermisosEmpresas].[Visible])=1) ORDERED FORWARD)
|--Compute
Scalar(DEFINE:([Expr1043]=isnull([AppObjetos].[NoDisponible], 0)))
|--Nested Loops(Left Anti Semi Join,
WHERE:([AppObjetos].[Objeto]=[Union1040]))
|--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos] AND
[AppObjetos].[Contenedor]=[@IdAppContenedores]),
WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1) ORDERED FORWARD)
|--Table Spool
|--Concatenation
|--Sort(DISTINCT ORDER
BY:([AppPermisosEmpresas].[IdAppObjetos] ASC,
[AppPermisosEmpresas].[Enabled] ASC, [AppPermisosEmpresas].[Visible] ASC,
[Expr1029] ASC))
| |--Compute
Scalar(DEFINE:([Expr1029]=isnull([AppPermisosEmpresas].[NoDisponible], 0)))
|
|--Filter(WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1))
| |--Nested Loops(Left Outer Join,
OUTER REFERENCES:([AppPermisosEmpresas].[IdAppObjetos],
[AppPermisosEmpresas].[IdAppContenedores],
[AppPermisosEmpresas].[IdAppModulos]))
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
SEEK:([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos] AND
[AppPermisosEmpresas].[IdAppContenedores]=[@IdAppContenedores]),
WHERE:([AppPermisosEmpresas].[Login]=[@Login]) ORDERED FORWARD)
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[AppPermisosEmpresas].[IdAppModulos] AND
[AppObjetos].[Contenedor]=[AppPermisosEmpresas].[IdAppContenedores] AND
[AppObjetos].[Objeto]=[AppPermisosEmpresas].[IdAppObjetos]) ORDERED FORWARD)
|--Nested Loops(Inner Join, OUTER
REFERENCES:([AppObjetos].[IdAppModulos]))
|--Nested Loops(Left Anti Semi Join, OUTER
REFERENCES:([AppObjetos].[Objeto]))
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos]),
WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1) ORDERED FORWARD)
| |--Row Count Spool
| |--Top(1)
|
|--Filter(WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1))
| |--Nested Loops(Left
Outer Join, OUTER REFERENCES:([AppPermisosEmpresas].[IdAppModulos],
[AppPermisosEmpresas].[IdAppContenedores],
[AppPermisosEmpresas].[IdAppObjetos]))
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
SEEK:([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos] AND
[AppPermisosEmpresas].[IdAppContenedores]=[@IdAppContenedores] AND
[AppPermisosEmpresas].[IdAppObjetos]=[AppObjetos].[Objeto] AND
[AppPermisosEmpresas].[Login]=[@Login]) ORDERED FORWARD)
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[AppPermisosEmpresas].[IdAppModulos] AND
[AppObjetos].[Contenedor]=[AppPermisosEmpresas].[IdAppContenedores] AND
[AppObjetos].[Objeto]=[AppPermisosEmpresas].[IdAppObjetos]) ORDERED FORWARD)
|--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
SEEK:([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[AppObjetos].[IdAppModulos]),
WHERE:([AppPermisosEmpresas].[Login]=[@Login] AND
Convert([AppPermisosEmpresas].[Visible])=1) ORDERED FORWARD)

Resultados de la traza
rownumber eventclass ntusername ClientProcessID ApplicationName LoginName
SPID Duration StartTime Reads Writes CPU
69 41 Administrador 820 Analizador de consultas SQL
ALMERIALVA\Administrador 53 156 13/09/2005 12:42:55 3312 0 62
70 12 Administrador 820 Analizador de consultas SQL
ALMERIALVA\Administrador 53 170 13/09/2005 12:42:55 3312 0 62


SP4
version
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows
NT 5.2 (Build 3790: Service Pack 1)

plan de ejecucion
Execution Tree
Parallelism(Gather Streams)
|--Hash Match(Union)
|--Hash Match(Union)
| |--Parallelism(Repartition Streams, PARTITION
COLUMNS:([AppPermisosEmpresas].[IdAppObjetos],
[AppPermisosEmpresas].[IdAppContenedores], [Expr1005], [Expr1006],
[Expr1007], [Expr1004]))
| | |--Compute
Scalar(DEFINE:([Expr1005]=Convert([AppPermisosEmpresas].[IdAppModulos]),
[Expr1006]=Convert([AppPermisosEmpresas].[Visible]),
[Expr1007]=Convert([AppPermisosEmpresas].[Enabled])))
| | |--Compute
Scalar(DEFINE:([Expr1004]=isnull([AppPermisosEmpresas].[NoDisponible], 0)))
| |
|--Filter(WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1))
| | |--Bookmark Lookup(BOOKMARK:([Bmk1002]),
OBJECT:([SERAUTO].[dbo].[AppObjetos]))
| | |--Nested Loops(Inner Join, OUTER
REFERENCES:([AppPermisosEmpresas].[IdAppObjetos]))
| | |--Clustered Index
Scan(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
WHERE:((([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos]) AND
[AppPermisosEmpresas].[IdAppContenedores]=[@IdAppContenedores]) AND
[AppPermisosEmpresas].[Login]=[@Login]))
| | |--Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[IdAppModulos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos] AND
[AppObjetos].[Contenedor]=[@IdAppContenedores] AND
[AppObjetos].[Objeto]=[AppPermisosEmpresas].[IdAppObjetos]) ORDERED FORWARD)
| |--Parallelism(Repartition Streams, PARTITION
COLUMNS:([AppObjetos].[Objeto], [AppObjetos].[Contenedor],
[AppObjetos].[IdAppModulos], [Expr1016], [Expr1017], [Expr1018]))
| |--Sort(DISTINCT ORDER BY:([AppObjetos].[Objeto] ASC,
[Expr1016] ASC, [Expr1017] ASC, [Expr1018] ASC))
| |--Parallelism(Repartition Streams, PARTITION
COLUMNS:([AppObjetos].[Objeto], [Expr1016], [Expr1017], [Expr1018]))
| |--Compute
Scalar(DEFINE:([Expr1016]=Convert(isnull([AppObjetos].[DefVisible], 0)),
[Expr1017]=Convert(isnull([AppObjetos].[DefEnabled], 0)),
[Expr1018]=isnull([AppObjetos].[NoDisponible], 0)))
| |--Merge Join(Right Anti Semi Join,
MERGE:([AppPermisosEmpresas].[IdAppObjetos])=([AppObjetos].[Objeto]),
RESIDUAL:([AppObjetos].[Objeto]=[AppPermisosEmpresas].[IdAppObjetos]))
| |--Stream Aggregate(GROUP
BY:([AppPermisosEmpresas].[IdAppObjetos]))
| | |--Parallelism(Repartition
Streams, PARTITION COLUMNS:([AppPermisosEmpresas].[IdAppObjetos]), ORDER
BY:([AppPermisosEmpresas].[IdAppObjetos] ASC))
| | |--Stream Aggregate(GROUP
BY:([AppPermisosEmpresas].[IdAppObjetos]))
| |
|--Filter(WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1))
| | |--Bookmark
Lookup(BOOKMARK:([Bmk1010]), OBJECT:([SERAUTO].[dbo].[AppObjetos]))
| | |--Nested
Loops(Inner Join, OUTER REFERENCES:([AppPermisosEmpresas].[IdAppObjetos]))
| |
|--Clustered Index
Scan(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
WHERE:((([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos]) AND
[AppPermisosEmpresas].[IdAppContenedores]=[@IdAppContenedores]) AND
[AppPermisosEmpresas].[Login]=[@Login]) ORDERED FORWARD)
| | |--Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[IdAppModulos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos] AND
[AppObjetos].[Contenedor]=[@IdAppContenedores] AND
[AppObjetos].[Objeto]=[AppPermisosEmpresas].[IdAppObjetos]) ORDERED FORWARD)
| |--Parallelism(Distribute Streams,
PARTITION COLUMNS:([AppObjetos].[Objeto]))
| |--Nested Loops(Inner Join)
| |--Top(1)
| | |--Parallelism(Gather
Streams)
| | |--Clustered Index
Scan(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
WHERE:((([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[Login]=[@Login]) AND
Convert([AppPermisosEmpresas].[Visible])=1) AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos]))
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos] AND
[AppObjetos].[Contenedor]=[@IdAppContenedores]),
WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1) ORDERED FORWARD)
|--Parallelism(Repartition Streams, PARTITION
COLUMNS:([AppObjetos].[Objeto], [AppObjetos].[Contenedor],
[AppObjetos].[IdAppModulos], 0, 0, [Expr1043]))
|--Compute
Scalar(DEFINE:([Expr1043]=isnull([AppObjetos].[NoDisponible], 0)))
|--Merge Join(Left Anti Semi Join,
MERGE:([AppObjetos].[Objeto])=([Union1040]),
RESIDUAL:([AppObjetos].[Objeto]=[Union1040]))
|--Parallelism(Repartition Streams, PARTITION
COLUMNS:([AppObjetos].[Objeto]), ORDER BY:([AppObjetos].[Objeto] ASC))
| |--Parallelism(Distribute Streams)
| |--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos] AND
[AppObjetos].[Contenedor]=[@IdAppContenedores]),
WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1) ORDERED FORWARD)
|--Parallelism(Repartition Streams, PARTITION
COLUMNS:([Union1040]), ORDER BY:([Union1040] ASC))
|--Stream Aggregate(GROUP BY:([Union1040]))
|--Sort(ORDER BY:([Union1040] ASC))
|--Concatenation
|--Sort(DISTINCT ORDER
BY:([AppPermisosEmpresas].[IdAppObjetos] ASC,
[AppPermisosEmpresas].[Enabled] ASC, [AppPermisosEmpresas].[Visible] ASC,
[Expr1029] ASC))
| |--Parallelism(Repartition
Streams, PARTITION COLUMNS:([AppPermisosEmpresas].[IdAppObjetos],
[AppPermisosEmpresas].[Enabled], [AppPermisosEmpresas].[Visible],
[Expr1029]))
| |--Compute
Scalar(DEFINE:([Expr1029]=isnull([AppPermisosEmpresas].[NoDisponible], 0)))
|
|--Filter(WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1))
| |--Nested
Loops(Left Outer Join,
WHERE:([AppPermisosEmpresas].[IdAppObjetos]=[AppObjetos].[Objeto]))
|
|--Clustered Index
Scan(OBJECT:([SERAUTO].[dbo].[AppPermisosEmpresas].[PK_AppPermisosEmpresas]),
WHERE:((([AppPermisosEmpresas].[IdEmpresas]=[@IdEmpresas] AND
[AppPermisosEmpresas].[Login]=[@Login]) AND
[AppPermisosEmpresas].[IdAppContenedores]=[@IdAppContenedores]) AND
[AppPermisosEmpresas].[IdAppModulos]=[@IdAppModulos]))
|
|--Clustered Index
Seek(OBJECT:([SERAUTO].[dbo].[AppObjetos].[PK_AppObjetos]),
SEEK:([AppObjetos].[IdAppModulos]=[@IdAppModulos] AND
[AppObjetos].[Contenedor]=[@IdAppContenedores]) ORDERED FORWARD)
|--Hash Match(Right Anti Semi
Join, HASH:([AppPermisosEmpresas].[IdAppObjetos])=([AppObjetos].[Objeto]),
RESIDUAL:([AppObjetos].[Objeto]=[AppPermisosEmpresas].[IdAppObjetos]))
|--Parallelism(Broadcast)
|
|--Filter(WHERE:(Convert(isnull([AppObjetos].[EsControlVB], 1))=1))
|
|--Parallelism(Gather Streams)
| |--Nested
Loops(Left Outer Join,
WHERE:([AppPermisosEmpresas].[IdAppObjetos]=[AppObjetos].[Objeto]))
|
|--Clustered Index
Respuesta Responder a este mensaje
#5 fernando goicoechea
13/09/2005 - 16:07 | Informe spam
Carlo,

La verdad es que por muchas vueltas que le doy no consigo entender el
porque, según el vínculo
que me adjuntaste puede ser un problema de hardware pero me saltan algunas
preguntas: ¿por que? ¿en los tres servidores?
(son de diferente marca, bueno dos son de la misma marca pero otro modelo)
¿porque este problema se produce con el SP4?
Tampoco entiendo el cambio en el plan de ejecución (sigue la conversacion
que tengo con Alejandro Massa), supongo
que deberia ser mas efectivo con el SP4, pero no lo es Lo que tengo muy
claro es que no lo voy a poner en producción hasta
que alguien me aclare esto.

un saludo,




"Carlo Sorrel" escribió en el mensaje
news:
Estimado, debo confesar que lo que comentas puede ser efectivo, ya que he
pasado a producción el Service pack me ha degradado el rendimiento de uno
de mis server en forma catastrófica, tanto así que tuve que volver atras,
con lo cual se me soluciono el problema. Ahora lo extraño es que hasta el
momento sólo fue en uno de mis Server, no en todos (tengo 6), lo que
tambien e notado es que se aumentan ostensiblemente los bloqueos.., te
pasa algo similar..???
Saludos.

Atte.,
Carlo Sorrel

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida