¿como evitar los hot blocks?

04/05/2008 - 18:38 por AntonioFox | Informe spam
¿Que tal?

Estaba traspasando una clasica tabla de contadores (donde llevo contador
de facturas, documentos de venta, pedidos ...) a SQL Server y leo que
esta practica no es recomendada por el problema de los hot blocks

Entonses ¿que me recomienda para no tener el problema de los hot blocks
y como hago para tambien tener mis contadores? No me valen identities ya
que nesecito que me genere numeros realez

Gracias

AntonioFox

Preguntas similare

Leer las respuestas

#11 Maxi
05/05/2008 - 16:57 | Informe spam
Si Gux, eso esta descontado, ayuda bastante :-) pero... hay otros factores a
considerar cuando numeras , no solo la performance que lo podes resolver
como bien comentaste. Pero bueno son solo formas, yo no uso el Max sino que
armo una tabla auxiliar y me gusta tener el control por ese lado, ademas que
si tengo que bloquear solo bloqueo la tabla auxiliar ;-)


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Gux (MVP)" escribió en el mensaje
news:
"Alfredo Novoa" wrote:

wrote:

>Hola Antonio, a mi me parece correcto usar la tabla numeradora y los
>bloqueos, a la larga es lo mas eficiente que podes hacer y seguro. Si
>haces
>un Max sobre la tabla y esta tiene millones de registros no va a ser tan
>rapido como hacer un update sobre la tabla numeradora de unos pocos
>registros.

¿Por que?

Para eso están los índices.



Exacto.

Si hay una consulta que usa funciones agregadas (mi libre traducción de
"aggregate" :-)) considerar el uso de un índice no-clustered. Estos
índices
incluyen una fila con el valor de índice para cálculos agregados, por lo
que
SQL Server no necesita acceder a la tabla real para hacer el cálculo de la
función.


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Alfredo Novoa" wrote:


Hola Maxi,

On Mon, 5 May 2008 10:53:28 -0300, "Maxi"
wrote:

>Hola Antonio, a mi me parece correcto usar la tabla numeradora y los
>bloqueos, a la larga es lo mas eficiente que podes hacer y seguro. Si
>haces
>un Max sobre la tabla y esta tiene millones de registros no va a ser tan
>rapido como hacer un update sobre la tabla numeradora de unos pocos
>registros.

¿Por que?

Para eso están los índices.

>aplicaciones por el costo a nivel performance que tiene eso, ademas de
>que
>estarias haciendo un select y si dos hacen el mismo Max y no consideras
>otras cosas a nivel bloqueo podria darles el mismo numero)

¿Que más habría que considerar?



Saludos

Respuesta Responder a este mensaje
#12 Alfredo Novoa
05/05/2008 - 17:10 | Informe spam
On Mon, 5 May 2008 11:57:41 -0300, "Maxi"
wrote:

Si Gux, eso esta descontado, ayuda bastante :-) pero... hay otros factores a
considerar cuando numeras , no solo la performance que lo podes resolver
como bien comentaste. Pero bueno son solo formas, yo no uso el Max sino que
armo una tabla auxiliar y me gusta tener el control por ese lado, ademas que
si tengo que bloquear solo bloqueo la tabla auxiliar ;-)



Pero usando Max no hay que bloquear nada por que SQL Server bloquea lo
que haya que bloquear el solito.

Por cierto, no nos has dicho nada sobre lo de que los manuales de SQL
Server dicen que las reglas de integridad son lo mismo que las reglas
de negocio.

http://msdn.microsoft.com/en-us/library/aa933058(SQL.80).aspx


Saludos
Alfredo
Respuesta Responder a este mensaje
#13 jcac
05/05/2008 - 17:41 | Informe spam
Hola con todos,
Una de las situaciones que se pueden considerar con un tabla auxiliar es que
te permite reservar numeros si fuese necesario a diferencia de utilizar un
max sobre la tabla.

Saludos

Juan Carlos

"Maxi" escribió en el mensaje
news:
Si Gux, eso esta descontado, ayuda bastante :-) pero... hay otros factores
a considerar cuando numeras , no solo la performance que lo podes resolver
como bien comentaste. Pero bueno son solo formas, yo no uso el Max sino
que armo una tabla auxiliar y me gusta tener el control por ese lado,
ademas que si tengo que bloquear solo bloqueo la tabla auxiliar ;-)


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Gux (MVP)" escribió en el mensaje
news:
"Alfredo Novoa" wrote:

wrote:

>Hola Antonio, a mi me parece correcto usar la tabla numeradora y los
>bloqueos, a la larga es lo mas eficiente que podes hacer y seguro. Si
>haces
>un Max sobre la tabla y esta tiene millones de registros no va a ser
>tan
>rapido como hacer un update sobre la tabla numeradora de unos pocos
>registros.

¿Por que?

Para eso están los índices.



Exacto.

Si hay una consulta que usa funciones agregadas (mi libre traducción de
"aggregate" :-)) considerar el uso de un índice no-clustered. Estos
índices
incluyen una fila con el valor de índice para cálculos agregados, por lo
que
SQL Server no necesita acceder a la tabla real para hacer el cálculo de
la
función.


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Alfredo Novoa" wrote:


Hola Maxi,

On Mon, 5 May 2008 10:53:28 -0300, "Maxi"
wrote:

>Hola Antonio, a mi me parece correcto usar la tabla numeradora y los
>bloqueos, a la larga es lo mas eficiente que podes hacer y seguro. Si
>haces
>un Max sobre la tabla y esta tiene millones de registros no va a ser
>tan
>rapido como hacer un update sobre la tabla numeradora de unos pocos
>registros.

¿Por que?

Para eso están los índices.

>aplicaciones por el costo a nivel performance que tiene eso, ademas de
>que
>estarias haciendo un select y si dos hacen el mismo Max y no consideras
>otras cosas a nivel bloqueo podria darles el mismo numero)

¿Que más habría que considerar?



Saludos







Respuesta Responder a este mensaje
#14 Gux (MVP)
05/05/2008 - 17:44 | Informe spam
Mi comentario era para aportar algo al tema de cómo tener buen rendimiento en
consultas que usan aggregates. No considero el SELECT MAX como la mejor
opción disponible para todos los casos.

En lo que respecta a usar tablas numeradoras, me parece una buena opción
para ciertos escenarios donde el usuario quiere por ejemplo, renumerar un
cierto valor ("quiero que ahora las facturas se numeren a partir de X, lo
quiero lo quiero lo quiero ya" :-)). Eso sí, el bloqueo producido por el
update de la fila en cuestión debe minimizarse participando en una
transacción lo más corta posible.


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Maxi" wrote:

Si Gux, eso esta descontado, ayuda bastante :-) pero... hay otros factores a
considerar cuando numeras , no solo la performance que lo podes resolver
como bien comentaste. Pero bueno son solo formas, yo no uso el Max sino que
armo una tabla auxiliar y me gusta tener el control por ese lado, ademas que
si tengo que bloquear solo bloqueo la tabla auxiliar ;-)


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Gux (MVP)" escribió en el mensaje
news:
> "Alfredo Novoa" wrote:
>
>> wrote:
>>
>> >Hola Antonio, a mi me parece correcto usar la tabla numeradora y los
>> >bloqueos, a la larga es lo mas eficiente que podes hacer y seguro. Si
>> >haces
>> >un Max sobre la tabla y esta tiene millones de registros no va a ser tan
>> >rapido como hacer un update sobre la tabla numeradora de unos pocos
>> >registros.
>>
>> ¿Por que?
>>
>> Para eso están los índices.
>
> Exacto.
>
> Si hay una consulta que usa funciones agregadas (mi libre traducción de
> "aggregate" :-)) considerar el uso de un índice no-clustered. Estos
> índices
> incluyen una fila con el valor de índice para cálculos agregados, por lo
> que
> SQL Server no necesita acceder a la tabla real para hacer el cálculo de la
> función.
>
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/p...o.larriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>
>
>
> "Alfredo Novoa" wrote:
>
>>
>> Hola Maxi,
>>
>> On Mon, 5 May 2008 10:53:28 -0300, "Maxi"
>> wrote:
>>
>> >Hola Antonio, a mi me parece correcto usar la tabla numeradora y los
>> >bloqueos, a la larga es lo mas eficiente que podes hacer y seguro. Si
>> >haces
>> >un Max sobre la tabla y esta tiene millones de registros no va a ser tan
>> >rapido como hacer un update sobre la tabla numeradora de unos pocos
>> >registros.
>>
>> ¿Por que?
>>
>> Para eso están los índices.
>>
>> >aplicaciones por el costo a nivel performance que tiene eso, ademas de
>> >que
>> >estarias haciendo un select y si dos hacen el mismo Max y no consideras
>> >otras cosas a nivel bloqueo podria darles el mismo numero)
>>
>> ¿Que más habría que considerar?
>>
>>
>>
>> Saludos
>>



Respuesta Responder a este mensaje
#15 Maxi
05/05/2008 - 17:47 | Informe spam
Exacto! nada que decir maestro! coincidimos 100% :-)

-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Gux (MVP)" escribió en el mensaje
news:
Mi comentario era para aportar algo al tema de cómo tener buen rendimiento
en
consultas que usan aggregates. No considero el SELECT MAX como la mejor
opción disponible para todos los casos.

En lo que respecta a usar tablas numeradoras, me parece una buena opción
para ciertos escenarios donde el usuario quiere por ejemplo, renumerar un
cierto valor ("quiero que ahora las facturas se numeren a partir de X, lo
quiero lo quiero lo quiero ya" :-)). Eso sí, el bloqueo producido por el
update de la fila en cuestión debe minimizarse participando en una
transacción lo más corta posible.


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Maxi" wrote:

Si Gux, eso esta descontado, ayuda bastante :-) pero... hay otros
factores a
considerar cuando numeras , no solo la performance que lo podes resolver
como bien comentaste. Pero bueno son solo formas, yo no uso el Max sino
que
armo una tabla auxiliar y me gusta tener el control por ese lado, ademas
que
si tengo que bloquear solo bloqueo la tabla auxiliar ;-)


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Gux (MVP)" escribió en el mensaje
news:
> "Alfredo Novoa" wrote:
>
>> wrote:
>>
>> >Hola Antonio, a mi me parece correcto usar la tabla numeradora y los
>> >bloqueos, a la larga es lo mas eficiente que podes hacer y seguro. Si
>> >haces
>> >un Max sobre la tabla y esta tiene millones de registros no va a ser
>> >tan
>> >rapido como hacer un update sobre la tabla numeradora de unos pocos
>> >registros.
>>
>> ¿Por que?
>>
>> Para eso están los índices.
>
> Exacto.
>
> Si hay una consulta que usa funciones agregadas (mi libre traducción de
> "aggregate" :-)) considerar el uso de un índice no-clustered. Estos
> índices
> incluyen una fila con el valor de índice para cálculos agregados, por
> lo
> que
> SQL Server no necesita acceder a la tabla real para hacer el cálculo de
> la
> función.
>
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/p...o.larriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna
> clase.
>
>
>
> "Alfredo Novoa" wrote:
>
>>
>> Hola Maxi,
>>
>> On Mon, 5 May 2008 10:53:28 -0300, "Maxi"
>> wrote:
>>
>> >Hola Antonio, a mi me parece correcto usar la tabla numeradora y los
>> >bloqueos, a la larga es lo mas eficiente que podes hacer y seguro. Si
>> >haces
>> >un Max sobre la tabla y esta tiene millones de registros no va a ser
>> >tan
>> >rapido como hacer un update sobre la tabla numeradora de unos pocos
>> >registros.
>>
>> ¿Por que?
>>
>> Para eso están los índices.
>>
>> >aplicaciones por el costo a nivel performance que tiene eso, ademas
>> >de
>> >que
>> >estarias haciendo un select y si dos hacen el mismo Max y no
>> >consideras
>> >otras cosas a nivel bloqueo podria darles el mismo numero)
>>
>> ¿Que más habría que considerar?
>>
>>
>>
>> Saludos
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida