Problemas con paralelismo en SQL Server 70-2000

Hola como están !, a continuación les voy a presentar dos escenarios en donde tuvimos inconvenientes en las consultas donde el motor de base de datos MS SQL Server, utiliza el esquema de paralelismo en un entorno de 2 o mas procesadores, espero les sirva:

Escenario 1

Windows NT Server 4.0 SP 6a
MS SQL 7.0 SP 3
Esquema de dos o mas procesadores

Error:

2006-05-31 12:40:19.24 kernel SQL Server Assertion: File: , line=1931
Failed Assertion = 'm_activeSdesList.Head () == NULL'.

Nos puede llegar a succeder cuando un query utiliza un plan de ejecucion con paralelismo y necesita escalar en los lock's.

Solución:

1) Evitar el paralelismo en el query o stored procedure que estemos utilizando agregando “MAXDOP=1”.

Ej:
select @PagoCheque = count(*), @IPPagoCheque = isnull(sum(isnull(TablaCheques.Importe,0)),0),
@sCantUsrPresConPagoCheque = count(distinct(ImpTxn.Usuario))
from TablaCheques inner join ImpTxn on ImpTxn.Transaccion = TablaCheques.TnNro, Ptxn
where (ImpTxn.AnuFechaHora = '' Or ImpTxn.AnuFechaHora is null)
and (convert(varchar(8),ImpTxn.RegFechaHora,112) = @Fecha)
and ImpTxn.Transaccion = Ptxn.Transaccion AND
(TablaCheques.PagoForma <> 62 AND TablaCheques.PagoForma <> 63 AND TablaCheques.PagoForma <> 64)
and (Ptxn.ImportePagado > 0.00) and (ImpTxn.TransaccionTp = 3) OPTION (maxdop 1)

2) Evitar el paralelismo a nivel instancia del dbms configurando la opción "max degree of parallelism" con el valor '1' ejecutando SP_CONFIGURE.

USE master
EXEC sp_configure 'show advanced option', '1'
RECONFIGURE WITH OVERRIDE
GO

EXEC sp_configure 'max degree of parallelism', 1
RECONFIGURE WITH OVERRIDE
GO

Links relacionados

http://support.microsoft.com/kb/307541/es

Escenario 2

Windows 2003 server standard edition SP1
SQL Server 2000 sp4
Esquema de dos o mas procesadores

Error:

[Microsoft][ODBC SQL Server Driver][SQL Server]Intra-query parallelism caused your server command (process ID #79) to deadlock.

Sucede cuando un query utiliza un plan de ejecucion con paralelismo y el query deja de responder hasta que se produce un deadlock.

Solución:

1) DBCC TRACEON (683).

2) Evitar el paralelismo solo para el stored procedure pero agregando “MAXDOP=1” por cada query en el procedimiento.

Ej:

DELETE FROM MITabla
WHERE MICampo = Mivalor
OPTION (maxdop 1)

3) Evitar el paralelismo a nivel instancia del dbms, configurando "max degree of parallelism" en 1 utilizando sp_configure.

USE master
EXEC sp_configure 'show advanced option', '1'
RECONFIGURE WITH OVERRIDE
GO

EXEC sp_configure 'max degree of parallelism', 1
RECONFIGURE WITH OVERRIDE
GO

4) Para evitar el deadlock utilice los 'query hint' OPTION (MERGE JOIN, LOOP JOIN).

5) Realizar tunning en el rendimiento general en las bases de datos, utilizando 'update statistics', dbcc reindex, dbcc showcontig.

Links relacionados

http://www.todosql.com/blog/200704/problemas-de-performance-con-utilidad...
http://www.todosql.com/blog/200704/problemas-de-performance-con-utilidad...
http://www.todosql.com/blog/200704/problemas-de-performance-con-utilidad...
http://support.microsoft.com/?scid=kb%3Ben-us%3B837983&x=8&y=13

Nota: Aún no nos ha sucedido en SQL Server 2005 con SP2, lo cual da indicios de que esta versión es confiable en este aspecto.

Abrazo virtual a todos !!!