sql >> Base de Datos >  >> RDS >> Sqlserver

Base de datos SQL de Windows Azure:la columna de incremento automático de identidad omite valores

Es posible que no tenga suerte aquí si necesita eliminar estas brechas.

Me encontré con este problema yo mismo mientras estaba desarrollando/probando una nueva aplicación. Estoy intuyendo lo que está sucediendo aquí en sql azure según lo que he leído sobre sql server 2012. No he podido encontrar ninguna documentación sobre esto para sql azure.

Por lo que he leído, esta es una característica que aparece como un error en mi opinión. En el servidor Sql 2012, Microsoft agregó la capacidad de crear secuencias. Las secuencias registran qué valores se han utilizado en bloques de 1000. Entonces, digamos que su secuencia estaba progresando... 1, 2, 3, 4, 5... y luego su servidor sql se reinicia. Bueno, la secuencia ya ha guardado el hecho de que el bloque 1-1000 ya se usó, por lo que lo lleva a los siguientes 1000.... entonces su próximo valor es 1001, 1002, 1003, 1004.... Esto mejora el rendimiento de se inserta cuando se usan secuencias, pero puede resultar en espacios inusuales. Hay una solución a esto para su secuencia. Al especificar su secuencia, agregue el parámetro "NOCACHE" para que no guarde bloques de 1000 a la vez. Consulte aquí para obtener más documentación.

Donde esto se convierte en un problema es que las columnas de Identidad parecen haber sido cambiadas para usar este mismo paradigma. Entonces, cuando su servidor, o en este caso su instancia de sql azure, se reinicia, puede obtener grandes espacios (miles) en sus columnas de identidad porque está almacenando en caché bloques grandes como "usados". Hay una solución para esto para el servidor sql 2012. Puede especificar un indicador de inicio t272 para revertir su identidad y usar el antiguo paradigma r2 del servidor sql 2008. El problema es que desconozco (puede que no sea posible) cómo especificar esto en sql Azure. No se puede encontrar la documentación. Vea este hilo para obtener más detalles sobre el servidor sql 2012.

Consulte la documentación de identidad aquí en el msdn. Concretamente el apartado "Valores consecutivos tras reinicio del servidor u otros fallos". Esto es lo que dice:

Entonces, si necesita tener valores consecutivos, puede intentar especificar una secuencia con nocache en lugar de confiar en su columna de identidad. No lo he probado yo mismo, pero parece que tendrá problemas para que esto funcione con el marco de la entidad.

Lo siento si esto no ayuda mucho, pero al menos es algo de información sobre lo que estás experimentando.