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 !!!