SQL Server - PERFORMANCE SQL SERVER 2008

   
Vista:

PERFORMANCE SQL SERVER 2008

Publicado por Henry (9 intervenciones) el 03/10/2015 01:47:54
Buenas noches.
Tengo desarrollado un sistema de gestion que trabaja con 2 BD principalmente: A (5GB) y B (3GB), ambos en la misa instancia del servidor.
El problema que estoy teniendo en estas ultimas semanas y que ya es casi de todos los dias, es que para ciertos procesos que guardan informacion (por medio de procedimeitnos almacenados llamados desde el sistema) que primero validadn ciertos requisitos y luego inserta o actualiza registros, demora bastante el procesamiento y sale : "error por tiempo de espera caducado". Al revisar el monitor del sql tanto memoria ram como procesador estan normales, es decir no congestionados.
Que puede estar fallando? demasiados registros en las tablas?
el codigo lo he revisado y si esta optimizado. CUando reinicio el servicio sql y vuelven a ejecutar los mismos procedimeintos lo hace rapido sin demora, pasa un tiempo de nuevo desde que se reinicio el servicio y nuevamnete empeizna a salir esos mensajes de tiempo de espera caducado, y afecta tambien a las consultas que tienen que ver con las mismas tablas involucradsas u otras tablas.

Que peude estar pasando?

BD es un soloarchivo mdf y ldf, en 2 discos raid (como uno solo), pero 2 particiones uno para el mdf y el otro àra el ldf.

Agradecere su ayuda al respecto.
Muchas Gracias.

Henry
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

PERFORMANCE SQL SERVER 2008

Publicado por Isaias (3186 intervenciones) el 05/10/2015 17:50:40
El tiempo de respuesta de una consulta puede ser mejorada si:

- Existe un PLAN DE MANTENIMIENTO
- Si existen INDICES, bien diseñados
- Si la consulta esta correctamente definida
- Si no se utilizan cursores

En fin, este y otros parametros pueden definir tu tiempo de respuesta.

¿Tienes al menos lo que se menciona?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PERFORMANCE SQL SERVER 2008

Publicado por Henry (9 intervenciones) el 05/10/2015 19:26:22
Buenos dias.
SI estan creados los indices, plan de mantenimeinto diario y semanal (las estadisiticas y checkeo de erroes son semanal), la consultas pienso que si estan bien hechas, cursores no utilizo.
Al sistema acceden como 100 usuarios en linea, localmente como remotamente (no uso terminal services), acceden por medio de VPN todas las bases.
EN las noches cuando ya hay menos usarios trabajando no hay problema con las transacciones funcionan normal, no hay tiempo de espera caducado. Por ello pienso que en horas del dia como que se congestiona y por ello la demora.
Te adjunto pantllas del monitor del sql donde no aprecio que el procesador se sature.

O separar la BD en varios archivos de datos podria ayudar? pero como podria separar el archivo mdf que tengo actualmente en varios archivos sin perder mi informacion, como dividirla? u otra recomendacion que revisar?

Gracias.
Henry
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

PERFORMANCE SQL SERVER 2008

Publicado por Isaias (3186 intervenciones) el 05/10/2015 19:30:45
¿Que version-edicion de SQL Server manejas?, ¿Cuantos procesadores tiene tu servidor?, ¿Cuanta memoria?, La base TEMPDB, ¿Tiene 1 o mas archivos MDF?, ¿Haces limpieza de log de tu base?, ¿Cuanto miden tus archivos MDF y LDF?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PERFORMANCE SQL SERVER 2008

Publicado por Henry (9 intervenciones) el 05/10/2015 20:21:33
mdf tiene 4GB y 2gb y ldf 1GB y 20MB.porq son dos base de datos.
sql server 2008 enterprise
1 procesasor, serviudor HP Proliant ML370 G6, INTEL XEON E5649 2.53 GHZ 14GB RAM
2 DISCOS SAS 300GB 10K (EN RAID),1 particion para el SO, 1 particion para la data y laotra para el log.
base de datos tempdb es un solo archivo mdf tambien unico.

Henry
pd: viste el archivo adjunto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

PERFORMANCE SQL SERVER 2008

Publicado por Isaias (3186 intervenciones) el 05/10/2015 20:27:42
Si ya vi tu archivo adjunto y veo que tienes muchos procesos en SUSPENDED, que posiblemente sea una señal de INTERBLOQUEOS o fallas de red.

Deja 12 GB para SQL Server y 2 GB para el sistema operativo.

Tu base es muy pequeña, no deberías tener problemas de procesamiento, mas sin embargo, si puede haber interbloqueos y cuando re-inicias, pues es claro que se "matan" esos interbloqueos y empieza a funcionar bien.

¿Cómo detectar los interbloqueos?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- IIslas 201100407
-- Identifica en una base de datos, los INTERBLOQUEOS por codigo mal desarrollado.
-- Se entrega bajo la premisa "Asi como esta", sin responsabilidad del autor.
 
USE <YourDatabase>;
GO
 
SELECT t1.resource_type AS [lock type],DB_NAME(resource_database_id) AS [database],
t1.resource_associated_entity_id AS [blk object],t1.request_mode AS [lock req],  --- lock requested
t1.request_session_id AS [waiter sid], t2.wait_duration_ms AS [wait time],       -- spid of waiter
(SELECT [text] FROM sys.dm_exec_requests AS r                                    -- get sql for waiter
CROSS APPLY sys.dm_exec_sql_text(r.[sql_handle])
WHERE r.session_id = t1.request_session_id) AS [waiter_batch],
(SELECT SUBSTRING(qt.[text],r.statement_start_offset/2,
    (CASE WHEN r.statement_end_offset = -1
    THEN LEN(CONVERT(nvarchar(max), qt.[text])) * 2
    ELSE r.statement_end_offset END - r.statement_start_offset)/2)
FROM sys.dm_exec_requests AS r WITH (NOLOCK)
CROSS APPLY sys.dm_exec_sql_text(r.[sql_handle]) AS qt
WHERE r.session_id = t1.request_session_id) AS [waiter_stmt],    -- statement blocked
t2.blocking_session_id AS [blocker sid],                         -- spid of blocker
(SELECT [text] FROM sys.sysprocesses AS p                        -- get sql for blocker
CROSS APPLY sys.dm_exec_sql_text(p.[sql_handle])
WHERE p.spid = t2.blocking_session_id) AS [blocker_stmt]
FROM sys.dm_tran_locks AS t1 WITH (NOLOCK)
INNER JOIN sys.dm_os_waiting_tasks AS t2 WITH (NOLOCK)
ON t1.lock_owner_address = t2.resource_address OPTION (RECOMPILE);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PERFORMANCE SQL SERVER 2008

Publicado por Henry (9 intervenciones) el 05/10/2015 20:43:54
si a veces sale interbloqueos, pero al consultarlo con dbcc opentran (mi bd) me da incluso una trsaccion en espera como si demorara bastante en completarse, pero a pesar que lo mato con Kill , vuelven a intentar hacer la operacion y nuevamnete se queda en espera desamasiado tiempo y sale al usario el mensaje de tiempo de epera caducado.
Y como bien dices cuando reinicio el servicio, nuevamnete intentan y ahi lo hace rapido, pero pasa un tiempo y nuevamnet empeiza a fallar por la demora y estoy en ese plan.

y muchas veces tambien ya no se ven trnsacciones activas con dbcc opentran, pero sin embargo hay demoras.

COn el codigo que me enviaste puede detectar esos interbloqueos? los deberia correr cuando esta el problema de la demora para detectar donde ocurren no?
entonces no ameritaria separar el arhivo mdf en varios?
Gracias.

Henry
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

PERFORMANCE SQL SERVER 2008

Publicado por Isaias (3186 intervenciones) el 05/10/2015 22:29:43
Si, con el query que te di puedes detectar los interbloqueos, que son los que te están generando los problemas.

DEBES CORREGIR el código T-SQL que genera el interbloqueo, de lo contrario, nunca resolverás tu problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PERFORMANCE SQL SERVER 2008

Publicado por Henry (9 intervenciones) el 05/10/2015 23:00:54
He detectado que hay problema en un SP de registro (que es uno con los que tengo problema) y otro de paginacion (codigo parecido a como se ve en varios artivulos sobre ello en sql server).
Pero si ambos consultan tabal conmpartidas, y tienen bastabte informacion, como poder hacer que uno no bloquee a la otra?

Por ejm: tengo tablas facturas y guias, donde una factura se relaciona con varias guias. Un procedimeinto registra facturas y los amarra con guias, y el otro procedimiento conuslta paginado las facturas mostrando tambien las guias que se relacionan con cada factura.
Entre ellos se bloquean cuando hay alguna transaccion entiendo, pero no deberia causarme tanta demora.

o deberia aplcar otro tipo de bloqueo distinto al por defecto del sql (por tabla). deberia cambiar a bloqueo por fila?

COnoces algun tipo de paginacion en sql server distinto al que se arma dinamicamente obteniendo primero el numero total de filas y luego pasando cada pagina a consultar como variable? (porque ahi igual me recorre todos los registros para obtener el total)
COn este codigo voy hacer seguimiento en estas 2 horas que tengo a todos los usuarios trabajando en el sistema y ver que puede detectar y corregir.
Gracias por el apoyo, i

Henry
PD: tienes skype, de ser posible, donde pueda contactarte?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

PERFORMANCE SQL SERVER 2008

Publicado por Isaias (3186 intervenciones) el 06/10/2015 00:15:19
Hay que cuidar la concurrencia, incluso un simple SELECT te puede generar bloqueos, para saber un poco mas de como controlar la concurrencia.

http://www.programandoamedianoche.com/2009/04/transacciones-y-modos-de-aislamiento-en-sql-server-y-adonet/

Un bloqueo, es como una bola de nieve, entre mas pase el tiempo, mas nieve se acumula y se vuelve incontrolable
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PERFORMANCE SQL SERVER 2008

Publicado por Henry (9 intervenciones) el 06/10/2015 17:13:02
Tambien puede influir en la demora el tipo de procesador? si se colocara uno de mejor performance, es decir un servidor mas actual en lugar del actual modelo que tengo, podría mejorar estas consultas o procesos que ahora me están causando demora? porque revisando veo que hay momentos que hay picos de procesamiento del procesador como puede ver en la imagen que le adjunte anteriormente.


Henry
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

PERFORMANCE SQL SERVER 2008

Publicado por Isaias (3186 intervenciones) el 06/10/2015 21:09:21
Henry

Me puedes buscar en el SKYPE como Isaias Islas en Mexico, ¿donde radicas?

La problematica que tienes son INTERBLOQUEOS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PERFORMANCE SQL SERVER 2008

Publicado por Henry (9 intervenciones) el 07/10/2015 02:32:36
EN Peru, estuve revisando y hay hasta consultas simples de una sola tabla que he visto que se queda ahi consultando. Esto me parece raro, porque esto nunca sucedia. No sera que pudiese existir sectores malos del disco que ocasiona esto, o que la BD se pueda estar daññando? he verificado las BDs con DBCC y el disco duro, eventos del windows, pero todo se ve normal sin problemas.

Veo varios de Mexico con el mismo nombre: puedes agregarme : henry.santiagov
A que hora te puedo contactar?
GRacias.

Henry
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

PERFORMANCE SQL SERVER 2008

Publicado por Isaias (3186 intervenciones) el 07/10/2015 17:50:04
Ya te agregue al skype

Debes analizar ese query con tu servicio de Tuning Advisor

Revisar los índices de las tablas en cuestión

Desarrollar un PLAN DE MANTENIMIENTO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar