Consulta lenta

03/08/2007 - 22:12 por Adriana R | Informe spam
Hola
Tengo un servidor en produción en SQL Server 2000, con el último service
pack. Mi problema es que cuando ejecuto un procedimiento con un valor
especifico este tarda mas de 1 minuto, mientras que con cualquier otra
consulta se ejecuta en menos de 2 seg. El procedimiento hace selects a
varias tablas y regresa varios record set.
Ya reindexamos y se sigue presentando. No importa la hora en que se ejcute
siempre tarda lo mismo. Ya revise los registros por si tenian algo raro y no
encontre nada.
Al otro día la consulta se normaliza pero me presenta otro valor con el
problema. Tendrán alguna idea.

Preguntas similare

Leer las respuestas

#6 Juan Carlos Mendoza
04/08/2007 - 20:29 | Informe spam
Fe de Erratas

En la declaracion de variable
@numsalida smallint
agregar y dejar asi:

@numsalida smallint

Aplicar en:
ID_DM_Reporte_Bloque1
ID_DM_Reporte_Bloque2
ID_DM_Reporte_Bloque3

si no, no te va a devolver el valora calculado.

Como dirian los Les Luthiers "...un error de linotipia..."

Saludos,

Juan Carlos Mendoza
Respuesta Responder a este mensaje
#7 Juan Carlos Mendoza
04/08/2007 - 20:34 | Informe spam
Lo que estas logrando es aliviar un poco la carga en memoria, que es
lo que te podria estar pasando, ya que todo se va para la Tempdb...

Saludos,

Juan Carlos Mendoza
Respuesta Responder a este mensaje
#8 Marcos Mellibovsky
05/08/2007 - 22:20 | Informe spam
Otra cosa que te puede servir es pedir en analizador de consultar el plan
con dato s que ande lento y con datos que ande bien y ver donde estan las
diferencias y porque


Saludos
Marcos Mellibovsky
MCT MCTS MCSD.NET MCDBA MCSE...
Córdoba Argentina

"Juan Carlos Mendoza" wrote in message
news:
Lo que estas logrando es aliviar un poco la carga en memoria, que es
lo que te podria estar pasando, ya que todo se va para la Tempdb...

Saludos,

Juan Carlos Mendoza

Respuesta Responder a este mensaje
#9 Alejandro Mesa
07/08/2007 - 02:00 | Informe spam
Hola Adriana,

1 - No es necesario contar, las filas que machan cierto criterio, para
comprobar existencia. Preferible que uses el operador EXISTS, el cual aborta
la busqueda tan pronto como encuentre la primera ocurrencia.

Por ejemplo:

WHERE( select count (*) from vwCheqDM v inner join documentos d on
v.documentoid = d.documentoid
inner join Lotes l on l.Loteid = d.Loteid inner join vwsuc s on
s.SucursalID = l.SucursalID
where s.PlazaSuc = @sPlazaSuc and FechaProceso =@sFechaProceso and
l.TipoLoteID =@iTipoLoteID and CSdm is null )=0



puede expresarse como:

WHERE exists (
select
*
from
vwCheqDM v
inner join
documentos d
on v.documentoid = d.documentoid
inner join
Lotes l
on l.Loteid = d.Loteid
inner join
vwsuc s
on s.SucursalID = l.SucursalID
where
s.PlazaSuc = @sPlazaSuc
and FechaProceso = @sFechaProceso
and l.TipoLoteID = @iTipoLoteID
and CSdm is null
)


2 - Respecto a tu pregunta, puede ser que tu sp este sufriendo lo que
conocemos como "olfateo de parametros".

Cuando la distribucion de valores de las columnas que conforman un indice,
principalmente la columna mas a la izquierda en la clave, no es proporcional,
osea que existe una diferencia grande para ciertos valores (mass filas para
unos valores que para otros), entonces el plan de ejecucion escogido por el
optimizador de queries no es optimo para cualquier muestra de ese conjunto.
Por ejemplo, supongamos que tenemos mas compras hechas a la compañia
Microsoft que a cualquier otra, osea, que si contamos cuantas compras hemos
hecho por cada compañia, Microsoft sera la que mas tiene, digamos que 5000 de
las 12000 compras que hemos hecho son de Microsoft y que el resto de
compañias tienen un promedio de entre 70 a 100 compras.

Cuando ejecutamos un sp y no existe un plan de ejecucion en el cache, el
optimizador de queries usa el valor de los parametros que participan en las
expresiones de filtro para indagar en las estadisticas de distribucion de las
columnas que conforman la clave de los indices de las tablas que participan
en la sentencia, para estimar el plan de ejecucion. Si el valor que se pasa
es un valor tipico, como el codigo de una de las empresas a las que hemos
hecho compras, entonces el plan de ejecucion no sera optimo para un valor no
tipico, como en este caso "Microsoft", por lo que cuando se ejecute el sp
nuevamente y el valor que se pase sea el codigo de Microsoft, entonces SS
usara un plan que no es optimo para ese valor. Lo mismo pasara si al ejecutar
el sp, sin haber plan alguno en el cache, se pasa un valor no tipico, como en
este caso Microsoft, entonces el plan que se escoja no sera optimo para
cuando pasemos un valor tipico.

Si sabemos que nuestra tabla tiene valores no tipicos, entonces podemos
evitar este comportamiento si usamos una de estas tecnicas:

- Creamos el sp con la opcion "with recompile", lo cual le indica a SS que
no ponga plan alguno en el cache y qyue produzca uno nuevo cada vez que se
ejecute el sp.

- Usar variables intermedias que recivan el valor de los parametros y usar
estas variables en la expresion de filtro. De esta forma SS usara los valores
de "All Density" de las estadisticas de distribucion, que aunque no son tan
exactas como los valores del histograma, sera el mismo para cualquier valor
que se pase.

- En SS 2005 podemosa usar la opcion (option (recompile)) a nivel de
sentencia, lo cual indicara a SS que recompile la sentencia "select" y escoja
un nuevo plan. Tambien se puede hacer uso de las guias de plan.


Estadísticas de distribución en SQL Server 2000 (I)
http://www.helpdna.net/colab02.htm

Estadísticas de distribución en SQL Server 2000 (II)
http://www.portalsql.com/estadistic...articulo35

SQL Server y la Autoparametrización
http://www.portalsql.com/sqlautopar...articulo33


AMB


"Adriana R" wrote:

eS UN PROCEDIMIENTO
CREATE PROCEDURE ID_DM_Reporte
@sFechaProceso char(8),--aaaammdd
@sPlazaSuc char(6),
@iTipoLoteID tinyint
AS
select s.PlazaSuc,Descripcion= 'Sobrantes (Free)',count(*) as Doc
from vwCheqDM v inner join documentos d on v.documentoid = d.documentoid
inner join Lotes l on l.Loteid = d.Loteid
inner join vwsuc s on s.SucursalID = l.SucursalID
where CSdm is null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
@sFechaProceso and l.TipoLoteID =@iTipoLoteID
group by s.PlazaSuc
Union all
select @sPlazaSuc, Descripcion='Sobrantes (Free)',0 as Doc
WHERE( select count (*) from vwCheqDM v inner join documentos d on
v.documentoid = d.documentoid
inner join Lotes l on l.Loteid = d.Loteid inner join vwsuc s on
s.SucursalID = l.SucursalID
where s.PlazaSuc = @sPlazaSuc and FechaProceso =@sFechaProceso and
l.TipoLoteID =@iTipoLoteID and CSdm is null )=0
Union all
select PlazaSuc, Descripcion='Faltantes (Missing)',count(*) as Doc
from vwCheqDMTI v
where CS is null and PlazaSuc = @sPlazaSuc and FechaContabledm=
@sFechaProceso and
Status = '01' and TipoLoteID =@iTipoLoteID
group by PlazaSuc
Union all
select @sPlazaSuc, Descripcion='Faltantes (Missing)',0 as Doc
WHERE( select count (*) from vwcheqdm where PlazaSuc = @sPlazaSuc and
FechaContableDM= @sFechaProceso and
Status = '01' and TipoLoteID =@iTipoLoteID and cs is null)=0
UNION ALL
select PlazaSuc, Descripcion='Reversos',count(*) as Doc
from vwCheqDM v
where PlazaSuc = @sPlazaSuc and FechaContabledm= @sFechaProceso and
Status = '02' and TipoLoteID =@iTipoLoteID
group by PlazaSuc
Union all
select @sPlazaSuc, Descripcion='Reversos',0 as Doc
WHERE( select count (*) from vwcheqdm where PlazaSuc = @sPlazaSuc and
FechaContableDM= @sFechaProceso and
Status = '02' and TipoLoteID =@iTipoLoteID)=0
Union all
select s.PlazaSuc,Descripcion= 'Correctos Ok',count(*) as Doc
from vwCheqDMTI v inner join documentos d on v.documentoid = d.documentoid
inner join Lotes l on l.Loteid = d.Loteid and v.TipoLoteID=l.TipoLoteID
and FechaProceso=FechaContabledm
inner join vwsuc s on s.SucursalID = l.SucursalID
where CSdm is not null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
@sFechaProceso and l.TipoLoteID =@iTipoLoteID and status='01'
group by s.PlazaSuc
select s.PlazaSuc,l.Loteid, count(*) as Doc
from vwCheqDM v inner join documentos d on v.documentoid = d.documentoid
inner join Lotes l on l.Loteid = d.Loteid
inner join vwsuc s on s.SucursalID = l.SucursalID
where CSdm is null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
@sFechaProceso and l.TipoLoteID =@iTipoLoteID
group by s.PlazaSuc, l.loteid

select s.PlazaSuc,l.Loteid, CS, Transito , NoCta, Nocheque,Importe
,l.Monedaid
from vwCheqDM v inner join documentos d on v.documentoid = d.documentoid
inner join Lotes l on l.Loteid = d.Loteid
inner join vwsuc s on s.SucursalID = l.SucursalID
where CSdm is null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
@sFechaProceso and l.TipoLoteID =@iTipoLoteID
order by l.loteid
select PlazaSuc, Terminal,count(*) as doc
from vwCheqDM v
where CS is null and PlazaSuc = @sPlazaSuc and FechaContabledm=
@sFechaProceso and
Status = '01' and TipoLoteID =@iTipoLoteID
group by PlazaSuc, Terminal
select PlazaSuc, Terminal,CS=csdm, Transito=Transitodm , NoCta=NoCtadm,
Nocheque =Nochequedm,Importe=Importedm ,Moneda,Status
from vwCheqDMTI v
where CS is null and PlazaSuc = @sPlazaSuc and FechaContabledm=
@sFechaProceso and
Status = '01' and TipoLoteID =@iTipoLoteID
order by Terminal
select PlazaSuc, Terminal,count(*)
from vwCheqDM v
where PlazaSuc = @sPlazaSuc and FechaContabledm= @sFechaProceso and
Status = '02' and TipoLoteID =@iTipoLoteID
group by PlazaSuc, Terminal
select PlazaSuc, Terminal,CS=csdm, Transito=Transitodm , NoCta=NoCtadm,
Nocheque =Nochequedm,Importe=Importedm ,Moneda,Status
from vwCheqDM v
where PlazaSuc = @sPlazaSuc and FechaContabledm= @sFechaProceso and
Status = '02' and TipoLoteID =@iTipoLoteID
order by Terminal
select s.PlazaSuc,l.Loteid, CS, Transito , NoCta, Nocheque,Importe
,l.Monedaid,v.Terminal,status
from vwCheqDMTI v inner join documentos d on v.documentoid = d.documentoid
inner join Lotes l on l.Loteid = d.Loteid and v.TipoLoteID=l.TipoLoteID and
FechaProceso=FechaContabledm
inner join vwsuc s on s.SucursalID = l.SucursalID
where CSdm is not null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
@sFechaProceso and l.TipoLoteID =@iTipoLoteID and status='01'
order by l.loteid
GO


"Marcos Mellibovsky" wrote:

> Hola Adriana,
> podes pasar la consulta?
>
> Saludos
> Marcos Mellibovsky
> MCT MCTS MCSD.NET MCDBA MCSE...
> Córdoba Argentina
>
> "Adriana R" wrote in message
> news:
> > Hola
> > Tengo un servidor en produción en SQL Server 2000, con el último service
> > pack. Mi problema es que cuando ejecuto un procedimiento con un valor
> > especifico este tarda mas de 1 minuto, mientras que con cualquier otra
> > consulta se ejecuta en menos de 2 seg. El procedimiento hace selects a
> > varias tablas y regresa varios record set.
> > Ya reindexamos y se sigue presentando. No importa la hora en que se ejcute
> > siempre tarda lo mismo. Ya revise los registros por si tenian algo raro y
> > no
> > encontre nada.
> > Al otro día la consulta se normaliza pero me presenta otro valor con el
> > problema. Tendrán alguna idea.
> >
> >
>
>
>
Respuesta Responder a este mensaje
#10 Alejandro Mesa
07/08/2007 - 15:02 | Informe spam
Correccion,

puede expresarse como:

WHERE not exists (
select
*
from
vwCheqDM v
inner join
documentos d
on v.documentoid = d.documentoid
inner join
Lotes l
on l.Loteid = d.Loteid
inner join
vwsuc s
on s.SucursalID = l.SucursalID
where
s.PlazaSuc = @sPlazaSuc
and FechaProceso = @sFechaProceso
and l.TipoLoteID = @iTipoLoteID
and CSdm is null
)


AMB

"Alejandro Mesa" wrote:

Hola Adriana,

1 - No es necesario contar, las filas que machan cierto criterio, para
comprobar existencia. Preferible que uses el operador EXISTS, el cual aborta
la busqueda tan pronto como encuentre la primera ocurrencia.

Por ejemplo:

> WHERE( select count (*) from vwCheqDM v inner join documentos d on
> v.documentoid = d.documentoid
> inner join Lotes l on l.Loteid = d.Loteid inner join vwsuc s on
> s.SucursalID = l.SucursalID
> where s.PlazaSuc = @sPlazaSuc and FechaProceso =@sFechaProceso and
> l.TipoLoteID =@iTipoLoteID and CSdm is null )=0

puede expresarse como:

WHERE exists (
select
*
from
vwCheqDM v
inner join
documentos d
on v.documentoid = d.documentoid
inner join
Lotes l
on l.Loteid = d.Loteid
inner join
vwsuc s
on s.SucursalID = l.SucursalID
where
s.PlazaSuc = @sPlazaSuc
and FechaProceso = @sFechaProceso
and l.TipoLoteID = @iTipoLoteID
and CSdm is null
)


2 - Respecto a tu pregunta, puede ser que tu sp este sufriendo lo que
conocemos como "olfateo de parametros".

Cuando la distribucion de valores de las columnas que conforman un indice,
principalmente la columna mas a la izquierda en la clave, no es proporcional,
osea que existe una diferencia grande para ciertos valores (mass filas para
unos valores que para otros), entonces el plan de ejecucion escogido por el
optimizador de queries no es optimo para cualquier muestra de ese conjunto.
Por ejemplo, supongamos que tenemos mas compras hechas a la compañia
Microsoft que a cualquier otra, osea, que si contamos cuantas compras hemos
hecho por cada compañia, Microsoft sera la que mas tiene, digamos que 5000 de
las 12000 compras que hemos hecho son de Microsoft y que el resto de
compañias tienen un promedio de entre 70 a 100 compras.

Cuando ejecutamos un sp y no existe un plan de ejecucion en el cache, el
optimizador de queries usa el valor de los parametros que participan en las
expresiones de filtro para indagar en las estadisticas de distribucion de las
columnas que conforman la clave de los indices de las tablas que participan
en la sentencia, para estimar el plan de ejecucion. Si el valor que se pasa
es un valor tipico, como el codigo de una de las empresas a las que hemos
hecho compras, entonces el plan de ejecucion no sera optimo para un valor no
tipico, como en este caso "Microsoft", por lo que cuando se ejecute el sp
nuevamente y el valor que se pase sea el codigo de Microsoft, entonces SS
usara un plan que no es optimo para ese valor. Lo mismo pasara si al ejecutar
el sp, sin haber plan alguno en el cache, se pasa un valor no tipico, como en
este caso Microsoft, entonces el plan que se escoja no sera optimo para
cuando pasemos un valor tipico.

Si sabemos que nuestra tabla tiene valores no tipicos, entonces podemos
evitar este comportamiento si usamos una de estas tecnicas:

- Creamos el sp con la opcion "with recompile", lo cual le indica a SS que
no ponga plan alguno en el cache y qyue produzca uno nuevo cada vez que se
ejecute el sp.

- Usar variables intermedias que recivan el valor de los parametros y usar
estas variables en la expresion de filtro. De esta forma SS usara los valores
de "All Density" de las estadisticas de distribucion, que aunque no son tan
exactas como los valores del histograma, sera el mismo para cualquier valor
que se pase.

- En SS 2005 podemosa usar la opcion (option (recompile)) a nivel de
sentencia, lo cual indicara a SS que recompile la sentencia "select" y escoja
un nuevo plan. Tambien se puede hacer uso de las guias de plan.


Estadísticas de distribución en SQL Server 2000 (I)
http://www.helpdna.net/colab02.htm

Estadísticas de distribución en SQL Server 2000 (II)
http://www.portalsql.com/estadistic...articulo35

SQL Server y la Autoparametrización
http://www.portalsql.com/sqlautopar...articulo33


AMB


"Adriana R" wrote:

> eS UN PROCEDIMIENTO
> CREATE PROCEDURE ID_DM_Reporte
> @sFechaProceso char(8),--aaaammdd
> @sPlazaSuc char(6),
> @iTipoLoteID tinyint
> AS
> select s.PlazaSuc,Descripcion= 'Sobrantes (Free)',count(*) as Doc
> from vwCheqDM v inner join documentos d on v.documentoid = d.documentoid
> inner join Lotes l on l.Loteid = d.Loteid
> inner join vwsuc s on s.SucursalID = l.SucursalID
> where CSdm is null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
> @sFechaProceso and l.TipoLoteID =@iTipoLoteID
> group by s.PlazaSuc
> Union all
> select @sPlazaSuc, Descripcion='Sobrantes (Free)',0 as Doc
> WHERE( select count (*) from vwCheqDM v inner join documentos d on
> v.documentoid = d.documentoid
> inner join Lotes l on l.Loteid = d.Loteid inner join vwsuc s on
> s.SucursalID = l.SucursalID
> where s.PlazaSuc = @sPlazaSuc and FechaProceso =@sFechaProceso and
> l.TipoLoteID =@iTipoLoteID and CSdm is null )=0
> Union all
> select PlazaSuc, Descripcion='Faltantes (Missing)',count(*) as Doc
> from vwCheqDMTI v
> where CS is null and PlazaSuc = @sPlazaSuc and FechaContabledm=
> @sFechaProceso and
> Status = '01' and TipoLoteID =@iTipoLoteID
> group by PlazaSuc
> Union all
> select @sPlazaSuc, Descripcion='Faltantes (Missing)',0 as Doc
> WHERE( select count (*) from vwcheqdm where PlazaSuc = @sPlazaSuc and
> FechaContableDM= @sFechaProceso and
> Status = '01' and TipoLoteID =@iTipoLoteID and cs is null)=0
> UNION ALL
> select PlazaSuc, Descripcion='Reversos',count(*) as Doc
> from vwCheqDM v
> where PlazaSuc = @sPlazaSuc and FechaContabledm= @sFechaProceso and
> Status = '02' and TipoLoteID =@iTipoLoteID
> group by PlazaSuc
> Union all
> select @sPlazaSuc, Descripcion='Reversos',0 as Doc
> WHERE( select count (*) from vwcheqdm where PlazaSuc = @sPlazaSuc and
> FechaContableDM= @sFechaProceso and
> Status = '02' and TipoLoteID =@iTipoLoteID)=0
> Union all
> select s.PlazaSuc,Descripcion= 'Correctos Ok',count(*) as Doc
> from vwCheqDMTI v inner join documentos d on v.documentoid = d.documentoid
> inner join Lotes l on l.Loteid = d.Loteid and v.TipoLoteID=l.TipoLoteID
> and FechaProceso=FechaContabledm
> inner join vwsuc s on s.SucursalID = l.SucursalID
> where CSdm is not null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
> @sFechaProceso and l.TipoLoteID =@iTipoLoteID and status='01'
> group by s.PlazaSuc
> select s.PlazaSuc,l.Loteid, count(*) as Doc
> from vwCheqDM v inner join documentos d on v.documentoid = d.documentoid
> inner join Lotes l on l.Loteid = d.Loteid
> inner join vwsuc s on s.SucursalID = l.SucursalID
> where CSdm is null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
> @sFechaProceso and l.TipoLoteID =@iTipoLoteID
> group by s.PlazaSuc, l.loteid
>
> select s.PlazaSuc,l.Loteid, CS, Transito , NoCta, Nocheque,Importe
> ,l.Monedaid
> from vwCheqDM v inner join documentos d on v.documentoid = d.documentoid
> inner join Lotes l on l.Loteid = d.Loteid
> inner join vwsuc s on s.SucursalID = l.SucursalID
> where CSdm is null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
> @sFechaProceso and l.TipoLoteID =@iTipoLoteID
> order by l.loteid
> select PlazaSuc, Terminal,count(*) as doc
> from vwCheqDM v
> where CS is null and PlazaSuc = @sPlazaSuc and FechaContabledm=
> @sFechaProceso and
> Status = '01' and TipoLoteID =@iTipoLoteID
> group by PlazaSuc, Terminal
> select PlazaSuc, Terminal,CS=csdm, Transito=Transitodm , NoCta=NoCtadm,
> Nocheque =Nochequedm,Importe=Importedm ,Moneda,Status
> from vwCheqDMTI v
> where CS is null and PlazaSuc = @sPlazaSuc and FechaContabledm=
> @sFechaProceso and
> Status = '01' and TipoLoteID =@iTipoLoteID
> order by Terminal
> select PlazaSuc, Terminal,count(*)
> from vwCheqDM v
> where PlazaSuc = @sPlazaSuc and FechaContabledm= @sFechaProceso and
> Status = '02' and TipoLoteID =@iTipoLoteID
> group by PlazaSuc, Terminal
> select PlazaSuc, Terminal,CS=csdm, Transito=Transitodm , NoCta=NoCtadm,
> Nocheque =Nochequedm,Importe=Importedm ,Moneda,Status
> from vwCheqDM v
> where PlazaSuc = @sPlazaSuc and FechaContabledm= @sFechaProceso and
> Status = '02' and TipoLoteID =@iTipoLoteID
> order by Terminal
> select s.PlazaSuc,l.Loteid, CS, Transito , NoCta, Nocheque,Importe
> ,l.Monedaid,v.Terminal,status
> from vwCheqDMTI v inner join documentos d on v.documentoid = d.documentoid
> inner join Lotes l on l.Loteid = d.Loteid and v.TipoLoteID=l.TipoLoteID and
> FechaProceso=FechaContabledm
> inner join vwsuc s on s.SucursalID = l.SucursalID
> where CSdm is not null and s.PlazaSuc = @sPlazaSuc and FechaProceso=
> @sFechaProceso and l.TipoLoteID =@iTipoLoteID and status='01'
> order by l.loteid
> GO
>
>
> "Marcos Mellibovsky" wrote:
>
> > Hola Adriana,
> > podes pasar la consulta?
> >
> > Saludos
> > Marcos Mellibovsky
> > MCT MCTS MCSD.NET MCDBA MCSE...
> > Córdoba Argentina
> >
> > "Adriana R" wrote in message
> > news:
> > > Hola
> > > Tengo un servidor en produción en SQL Server 2000, con el último service
> > > pack. Mi problema es que cuando ejecuto un procedimiento con un valor
> > > especifico este tarda mas de 1 minuto, mientras que con cualquier otra
> > > consulta se ejecuta en menos de 2 seg. El procedimiento hace selects a
> > > varias tablas y regresa varios record set.
> > > Ya reindexamos y se sigue presentando. No importa la hora en que se ejcute
> > > siempre tarda lo mismo. Ya revise los registros por si tenian algo raro y
> > > no
> > > encontre nada.
> > > Al otro día la consulta se normaliza pero me presenta otro valor con el
> > > problema. Tendrán alguna idea.
> > >
> > >
> >
> >
> >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida