Es posible..

22/03/2006 - 22:46 por Francisco | Informe spam
Hola amigos, es posible en un SELECT indicarle al motor de la base de datos
que utilice un INDICE en particular ?. En una charla escuche que cuando los
datos en una tabla son voluminosos el sql al tratar de ubicar el indice
adecuado se demora, cosa que se puede solucionar y agilizar indicandole que
utilice un indice en particular...si esto es posible...les agradeceria un
ejemplo del mismo...y algun post para informarme mas sobre esto..porque de
verdad en los libros no lo encuentro

Ahora otro punto...tengo una aplicacion corriendo con SQL 2000 con una aprox
de 50 usuarios...pero hay momentos en que, por motivos que no logro
dar...ninguno puede hacer consultas, es como si alguna tabla se quedara
bloqueada (begin transact) y pues mientras no salga de esa transaccion,
ningun otro usuario puede acceder a esa tabla..alguna herramienta que me
permita monitorear estos sucesos y detectar el motivo del mismogracias
por sus sugerencias

Preguntas similare

Leer las respuestas

#1 Guillermo Roldán
22/03/2006 - 23:16 | Informe spam
Hola Francisco,

Sobre lo primero, revisa la cláusula FROM de la sentencia SELECT en los
libros en pantalla. Verás, que puedes utilizar sugerencias WITH, como por
ejemplo sería:
... FROM miTabla WITH(INDEX(IX_Cliente)) ...

Sobre lo segundo, prueba con la herramienta Profiler o Analizador, depende
de si tienes instalado SQL en inglés o castellano. Con esto, podrás hacer
trazas, que creo es lo que estás buscando.

Saludos,
Guillermo

"Francisco" escribió en el mensaje
news:
Hola amigos, es posible en un SELECT indicarle al motor de la base de
datos
que utilice un INDICE en particular ?. En una charla escuche que cuando
los
datos en una tabla son voluminosos el sql al tratar de ubicar el indice
adecuado se demora, cosa que se puede solucionar y agilizar indicandole
que
utilice un indice en particular...si esto es posible...les agradeceria un
ejemplo del mismo...y algun post para informarme mas sobre esto..porque de
verdad en los libros no lo encuentro

Ahora otro punto...tengo una aplicacion corriendo con SQL 2000 con una
aprox
de 50 usuarios...pero hay momentos en que, por motivos que no logro
dar...ninguno puede hacer consultas, es como si alguna tabla se quedara
bloqueada (begin transact) y pues mientras no salga de esa transaccion,
ningun otro usuario puede acceder a esa tabla..alguna herramienta que
me
permita monitorear estos sucesos y detectar el motivo del mismogracias
por sus sugerencias


Respuesta Responder a este mensaje
#2 Francisco
22/03/2006 - 23:31 | Informe spam
Gracias compañero por la respuesta, efectivamente ya voy encontrando mas
informacion por la primera interrogante, seguire investigando

Sobre el segundo, si he probado con el Analizador de trazas, pero no es lo
que busco. La idea es identificar el HOST y los objetos que aparentemente
estan bloqueados y datos que me orienten a identificar los motivos del
bloqueo..como el tiempo que esta bloqueado, instruccion causante del bloqueo
..o algo por ahiLo que quiero es informacion para descartar si el
aplicativo o el hadware el problema por el cual en ciertos momentos del dia,
algunas tablas se ponen inaccesibles.

Gracias por la respuesta amigosaludos


"Guillermo Roldán" wrote in message
news:#
Hola Francisco,

Sobre lo primero, revisa la cláusula FROM de la sentencia SELECT en los
libros en pantalla. Verás, que puedes utilizar sugerencias WITH, como por
ejemplo sería:
... FROM miTabla WITH(INDEX(IX_Cliente)) ...

Sobre lo segundo, prueba con la herramienta Profiler o Analizador, depende
de si tienes instalado SQL en inglés o castellano. Con esto, podrás hacer
trazas, que creo es lo que estás buscando.

Saludos,
Guillermo

"Francisco" escribió en el mensaje
news:
> Hola amigos, es posible en un SELECT indicarle al motor de la base de
> datos
> que utilice un INDICE en particular ?. En una charla escuche que cuando
> los
> datos en una tabla son voluminosos el sql al tratar de ubicar el indice
> adecuado se demora, cosa que se puede solucionar y agilizar indicandole
> que
> utilice un indice en particular...si esto es posible...les agradeceria


un
> ejemplo del mismo...y algun post para informarme mas sobre esto..porque


de
> verdad en los libros no lo encuentro
>
> Ahora otro punto...tengo una aplicacion corriendo con SQL 2000 con una
> aprox
> de 50 usuarios...pero hay momentos en que, por motivos que no logro
> dar...ninguno puede hacer consultas, es como si alguna tabla se quedara
> bloqueada (begin transact) y pues mientras no salga de esa transaccion,
> ningun otro usuario puede acceder a esa tabla..alguna herramienta


que
> me
> permita monitorear estos sucesos y detectar el motivo del


mismogracias
> por sus sugerencias
>
>


Respuesta Responder a este mensaje
#3 Guillermo Roldán
23/03/2006 - 19:21 | Informe spam
Ademas de la herramienta Analizador, para lanzar trazas y obtener datos
(puedes obtener tiempos, bloqueos, host de origen, etc.), puedes utilizar el
Monitor de Rendimiento de Windows, donde tienes a tu disposición diferentes
"contadores" de red, de disco, de CPU, del propio SQL Server, etc, con lo
cual podrás medir otros elementos como las escrituras, lecturas, fallos de
páginas, procesos en cola de la CPU, consumo de la red, etc. Cruzando esta
información entre sí, y junto con la información de las trazas de la
herramienta Analizador, creo que pueda ser la forma de analisis de
rendimiento que estás buscando.

Saludos,
Guillermo Roldán

"Francisco" escribió en el mensaje
news:%
Gracias compañero por la respuesta, efectivamente ya voy encontrando mas
informacion por la primera interrogante, seguire investigando

Sobre el segundo, si he probado con el Analizador de trazas, pero no es lo
que busco. La idea es identificar el HOST y los objetos que aparentemente
estan bloqueados y datos que me orienten a identificar los motivos del
bloqueo..como el tiempo que esta bloqueado, instruccion causante del
bloqueo
..o algo por ahiLo que quiero es informacion para descartar si el
aplicativo o el hadware el problema por el cual en ciertos momentos del
dia,
algunas tablas se ponen inaccesibles.

Gracias por la respuesta amigosaludos


"Guillermo Roldán" wrote in message
news:#
Hola Francisco,

Sobre lo primero, revisa la cláusula FROM de la sentencia SELECT en los
libros en pantalla. Verás, que puedes utilizar sugerencias WITH, como por
ejemplo sería:
... FROM miTabla WITH(INDEX(IX_Cliente)) ...

Sobre lo segundo, prueba con la herramienta Profiler o Analizador,
depende
de si tienes instalado SQL en inglés o castellano. Con esto, podrás hacer
trazas, que creo es lo que estás buscando.

Saludos,
Guillermo

"Francisco" escribió en el mensaje
news:
> Hola amigos, es posible en un SELECT indicarle al motor de la base de
> datos
> que utilice un INDICE en particular ?. En una charla escuche que cuando
> los
> datos en una tabla son voluminosos el sql al tratar de ubicar el indice
> adecuado se demora, cosa que se puede solucionar y agilizar indicandole
> que
> utilice un indice en particular...si esto es posible...les agradeceria


un
> ejemplo del mismo...y algun post para informarme mas sobre esto..porque


de
> verdad en los libros no lo encuentro
>
> Ahora otro punto...tengo una aplicacion corriendo con SQL 2000 con una
> aprox
> de 50 usuarios...pero hay momentos en que, por motivos que no logro
> dar...ninguno puede hacer consultas, es como si alguna tabla se quedara
> bloqueada (begin transact) y pues mientras no salga de esa transaccion,
> ningun otro usuario puede acceder a esa tabla..alguna herramienta


que
> me
> permita monitorear estos sucesos y detectar el motivo del


mismogracias
> por sus sugerencias
>
>






Respuesta Responder a este mensaje
#4 Penta
23/03/2006 - 20:34 | Informe spam
Hola.
Si se queda bloqueada la BD ejecuta esto con SA

set transaction isolation level read uncommitted
set nocount on
declare @blocker_spid int, @blockee_spid int, @blockee_blocker int
declare @blockee_waitime int
IF EXISTS
(SELECT * FROM master.dbo.sysprocesses WHERE spid IN (SELECT
blocked FROM master.dbo.sysprocesses))
BEGIN
DECLARE blocker_cursor CURSOR FOR
SELECT spid FROM master.dbo.sysprocesses WHERE spid IN (SELECT blocked
FROM master.dbo.sysprocesses) AND blocked=0
DECLARE blockee_cursor CURSOR FOR
SELECT spid, blocked, waittime FROM master.dbo.sysprocesses WHERE
blocked > 0
OPEN blocker_cursor
FETCH NEXT FROM blocker_cursor INTO @blocker_spid
WHILE (@@FETCH_STATUS =0 )
BEGIN
Select 'Spid Bloqueador: ',@blocker_spid
exec sp_who @blocker_spid
exec sp_executesql N'dbcc inputbuffer(@Param)',N'@Param int',
@blocker_spid
OPEN blockee_cursor
FETCH NEXT FROM blockee_cursor INTO @blockee_spid,
@blockee_blocker, @blockee_waitime
WHILE (@@fetch_status = 0)
BEGIN
blocked = @blocker_spid
IF (@blockee_blocker=@blocker_spid)
BEGIN
SELECT 'Blockee: Waittime:', @blockee_spid, @blockee_waitime
exec sp_executesql N'dbcc inputbuffer(@Param)',N'@Param int',
@blockee_spid
END
FETCH NEXT FROM blockee_cursor INTO @blockee_spid,
@blockee_blocker, @blockee_waitime

END
CLOSE blockee_cursor
FETCH NEXT FROM blocker_cursor INTO @blocker_spid
END
CLOSE blocker_cursor
DEALLOCATE blockee_cursor
DEALLOCATE blocker_cursor
END
ELSE
SELECT 'No hay procesos bloqueados!' as Resultado
go


Salu2.
Penta.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida