¿Cuándo se introdujo Torn Page Detection and Checksum en SQL Server y cuáles son los comportamientos de actualización?


15

Hay dos opciones diferentes en SQL Server moderno para la verificación de página; siendo detección de página rota y suma de verificación . Ninguno es, por supuesto, una opción.

Creo que Checksum se introdujo en SQL Server 2005 y que actualizar o restaurar una base de datos de una versión anterior mantendría su método de verificación de página anterior. es decir, no hubo actualización implícita.

El problema involucrado es que tenemos una base de datos de producción que entró en producción usando SQL Server 2000 y desde entonces se mudó a un servidor SQL Server 2008 R2. La verificación de página está establecida en Ninguno cuando esperaba que fuera Detección de página rota . Volviendo a esta cantidad de tiempo, parece que pensamos que la base de datos se desarrolló originalmente en SQL Server 7.0 y luego migró a SQL Server 2000 y esto puede explicar el resultado observado.

Me preguntaba cuándo Torn Page Detection and Checksum se convirtió en una característica de SQL Server, y cómo se comportaron cuando migraron o actualizaron a versiones más nuevas.

Editar: Resumiendo algunas de las respuestas:

Hay un poco de discrepancia en algunas de las fechas en que Torn Page Detection entró en SQL Server.
Enlace 1: http://support.microsoft.com/kb/230785
Enlace 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx

El primer enlace indica SQL 7.0 y el segundo SQL2000. Tiendo a confiar en la sugerencia de SQL7.0 y ese enlace dos estaba confundido porque estaba desactivado por defecto en SQL7.0 y activado por defecto en SQL2000.


2
se introdujo cuando se confirmó el código.
swasheck

¿Por qué eso importa? ¿Cuál es el problema que se resuelve aquí?
Marian

@swasheck - lo siento, no entiendo tu comentario.
Paul

1
@Paul votó para reabrir
swasheck

1
@Paul He agregado información de la página dbcc para verificar si hay páginas desgarradas o bits de suma de verificación en mi respuesta.
Kin Shah

Respuestas:


15

En SQL Server 2000, si desea identificar páginas corruptas, la opción de base de datos TORN_PAGE_DETECTION debe establecerse en TRUE.

Pero en SQL 2005 y versiones posteriores, una nueva configuración PAGE_VERIFY reemplazó la antigua TORN_PAGE_DETECTION que permite elegir entre dos tipos diferentes de verificación de página: TORN_PAGE_DETECTION y CHECKSUM.

Ahora viene la pregunta de cuál configurar: TORN_PAGE_DETECTION o CHECKSUM.

TORN_PAGE_DETECTION: escribe un bit por cada 512 bytes en una página, lo que le permite detectar cuándo una página no se escribió correctamente en el disco. El problema es que no le dirá si los datos almacenados en esos 512 bytes son realmente correctos o no debido al hecho de que un par de bytes pueden haberse escrito incorrectamente.

CHECKSUM: calculará una suma de verificación de la página tanto cuando se escribe una página como cuando se lee una página, suponiendo que tenga una suma de verificación.

El SQL Server calcula la suma de comprobación en función del patrón de bits en la página, la almacena en el encabezado de la página y luego emite una E / S para escribir la página. Cuando el SQL Server lee la página, vuelve a calcular la suma de verificación utilizando la misma lógica y luego la compara con el valor disponible en el encabezado de la página. Si el valor de la suma de comprobación coincide, se supone que la página no se corrompió durante el ciclo de escritura-lectura.

Dado que el costo de calcular la suma de verificación se incurre en cada página de lectura y escritura, puede aumentar la sobrecarga de la CPU y posiblemente afectar el rendimiento de su carga de trabajo. Otra cosa a tener en cuenta es que la suma de comprobación no es exclusiva para un patrón de bits específico en la página. Dos páginas posiblemente se pueden asignar al mismo valor de suma de verificación. Por lo tanto, existe la posibilidad remota de que la corrupción de la página no se detecte.

Referencia: suma de comprobación en SQL2005

Para responder específicamente a sus preguntas:

Creo que Checksum se introdujo en SQL2005 y que actualizar o restaurar una base de datos desde una versión anterior mantendría su método de verificación de página anterior. es decir, no hubo actualización implícita.

Sí, CHECKSUM se introdujo en SQL Server 2005 y es el PREDETERMINADO . Cuando actualice de 2000 a 2005, debe cambiar explícitamente la opción de base de datos Verificación de página para usar CHECKSUM.

Si restaura la base de datos ya creada en sql 2005 a otro servidor que ejecuta sql 2005, no tiene que configurarla. Persistirá a lo que haya configurado la opción de verificación de página.

No he tenido éxito en la investigación cuando llegó la Detección de página rota

De: http://support.microsoft.com/kb/230785

Versiones de SQL Server anteriores a 7.0

Las versiones de SQL Server anteriores a la 7.0 no proporcionaban paridad de registro ni facilidades de detección de bits rotos. De hecho, esas versiones pueden escribir la misma página de registro varias veces hasta que los registros de registro llenen la página de registro de 2 KB. Esto puede exponer transacciones que se han confirmado con éxito. Si la página de registro se reescribe durante una falla, un sector con la transacción confirmada puede no reescribirse correctamente.

Por lo tanto, TORN_PAGE_DETECTION ha existido desde SQL Server 7.0. Incluso entonces, el valor predeterminado era que no estaba habilitado (mismo enlace) .

Nota La detección de página rota no está habilitada de forma predeterminada en SQL Server 7.0. Consulte sp_dboption para saber cómo habilitar la detección en su sistema.

Por lo tanto, si la base de datos se desarrolló contra una instancia 7.0 y se actualizó posteriormente, se habría actualizado con la opción PAGE VERIFY existente de NONE (como señaló @ThomasStringer en su respuesta).


Editar: 24/09/2013 Para mejorar la respuesta:

Refiriéndome a mis notas internas de SQL Server de SQLSkills, descubrí que usando un volcado de página, puede verificar si la detección de bits rotos - TORN_PAGE_DETECTION o CHECKSUM estaba habilitada o no:

use database_name -- change here for your database !!
checkpoint
go 
dbcc traceon (3604)   -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604)  -- turn off the trace flag
go

m_tornBits : contiene la suma de comprobación de la página o los bits que fueron desplazados por los bits de protección de página desgarrada, dependiendo de qué forma de protección de página esté activada para la base de datos.

Nota : No tengo ninguna versión anterior de servidor sql ejecutándose. A continuación se confirma desde el servidor SQL 2000 y superior . Si tienes un 7.0 o 6.5 corriendo, puedes confirmarlo también :-)

ingrese la descripción de la imagen aquí


@ Kin sí, sé que también existía en SQL2000, me gustaría saber cuándo se introdujo por primera vez. con la frase "pasar a versiones anteriores" supongamos que TPD se introdujo en SQL2000 y luego pasar de SQL7 a SQL2000 sería pasar de una versión a otra antes de SQL2005. Estoy interesado en saber si TPD se activó durante tales migraciones. Espero que no, pero no he podido verificarlo.
Paul

@paul Los eliminé porque sentí que mi edición abarcaba los comentarios
swasheck

@ Kin Probé su código DBCC en SQL2008R2 y obtuve un valor de m_tornbits de 1711843878 ... ¿es una medida en lugar de un booleano, diría usted?
Paul

@Paul significa que la página de suma de comprobación o torm está ENCENDIDA. En un 2005 en adelante, debe elegir Solo CHECKSUM. ¿Te preguntas si tienes 7.0 para probar?
Kin Shah

6

Echa un vistazo a la referencia de BOL :

Cuando una base de datos de usuario o sistema se actualiza a SQL Server 2005 o una versión posterior, el valor PAGE_VERIFY (NINGUNO o TORN_PAGE_DETECTION) se conserva. Recomendamos que use CHECKSUM

Esto dicta que antes de SQL Server 2005 TORN_PAGE_DETECTIONexistía la opción para , pero no CHECKSUM.

Y para responder a su segundo punto:

... y que actualizar o restaurar una base de datos desde una versión anterior mantendría su método de verificación de página anterior.

Si, eso es correcto. Debería establecer explícitamente la base de datos para utilizar el CHECKSUMmétodo de verificación de página.


Gracias por la referencia @Thomas, pero eso no responde cuando TORT PAGE DETECTION estuvo disponible por primera vez en SQL Server.
Paul

2
@Paul Esto responde que la detección de páginas desgarradas existía antes de SQL Server 2005. ¿Está buscando qué versión de SQL Server entró en juego esa verificación de página? Además de una lección de historia, no estoy seguro de lo que buscas ganar allí. ¿Qué problema estás tratando de resolver exactamente?
Thomas Stringer

Estaba buscando saber cuándo surgió y cómo se comportó durante las migraciones. Espero entender cómo algunas de nuestras bases de datos muy antiguas han llegado a tener la configuración que tienen en algunos de nuestros servidores modernos (ish, SQL2008R2).
Paul

Si sus bases de datos tienen TORN_PAGE_DETECTION, entonces eso seguramente podría resultar en una actualización de pre-SQL Server 2005 y esa opción de verificación de página ha persistido.
Thomas Stringer

no tienen TPD habilitado, esa fue la parte desconcertante. Otras respuestas han proporcionado la solución al problema ahora (SQL7.0 tenía TPD, pero no estaba habilitado por defecto y esta era la versión desarrollada originalmente)
Paul

3

Hay dos opciones diferentes en SQL Server moderno para verificar la página

Hay tres como usted dijo: TORN_PAGE_DETECTION, CHECKSUM y NONE.

Creo que CHECKSUM se introdujo en SQL Server 2005

Como se cita en este artículo de MSDN titulado "Administración del búfer": la detección de páginas rasgadas se introdujo en SQL Server 2000. La suma de verificación se introdujo en SQL Server 2005.

Una sinopsis de otras cosas señaladas en este artículo es que el mecanismo de verificación de página se especifica en el momento de creación de la base de datos. Por lo tanto, depende de quién y cómo crearon la base de datos en cuanto a lo que está configurado, también podría controlarse según la base de datos modelo configurada. También es interesante tener en cuenta que si cambia la configuración, no tiene efecto en toda la base de datos, solo cuando la página se escribe a continuación. De acuerdo con Paul Randal, esto solo se hace cuando la página se lee en la memoria, se cambia y luego se vuelve a escribir en el disco; Esa información está aquí .

Tengo una base de datos de producción que entró en producción con SQL Server 2000, aunque puede haber sido desarrollada contra SQL Server 7.0, y desde entonces se ha trasladado a un servidor SQL Server 2008 R2. La verificación de página está establecida en NINGUNO aunque esperaba que fuera DETECCIÓN DE PÁGINA ROTA.

Cualquier persona que tenga permisos para la instancia de la base de datos puede modificar ese valor. Podría haber persistido a través de actualizaciones como se indica en MSDN aquí :

Cuando una base de datos de usuario o sistema se actualiza a SQL Server 2005 o una versión posterior, el valor PAGE_VERIFY (NINGUNO o TORN_PAGE_DETECTION) se conserva

También podría haberse modificado más adelante porque alguien entendió mal la configuración y estaba disparando en la oscuridad para tratar de resolver un problema.

Me preguntaba cuándo DETECCIÓN DE PÁGINA TORN se convirtió en una función de verificación de página

SQL Server 2000 como se indicó anteriormente.

cómo se comporta cuando se migra o actualiza a ediciones más recientes.

La configuración anterior se conserva durante la actualización como se indicó anteriormente.

Ahora me gustaría señalar el hecho de que otros enlaces proporcionados por la gente indican que SQL Server 7.0 es cuando la detección de páginas desgarradas estaba disponible. Lo cual, como se indica en esos artículos, es cierto, sin embargo, se ha comprobado muchas veces que la documentación de Microsoft no debe considerarse verdadera en todas las circunstancias. Hay muchos donde están equivocados. Entonces, dicho esto, ¿cómo puedes determinar qué respuesta es aceptable? Todos proporcionamos documentación de Microsoft para respaldar nuestra respuesta.

Además, tenga en cuenta que la detección de páginas desgarradas está en la lista de depreciación a partir de SQL Server 2012, entonces, ¿cuál es la preocupación sobre cómo se estableció en sus bases de datos para empezar? Si lo vi configurado en otra cosa que no sea CHECKSUM, lo cambio inmediatamente y paso a otra tarea más importante. No me preocupa cómo se estableció una mala configuración, es más importante corregirla y luego asegurarme de que aquellos que tienen permisos para cambiarla estén informados de por qué ese elemento de configuración no debe cambiarse a otra cosa. Solo mis $ 0.02


Creo que 2000 fue cuando TPD se puso en ON por defecto. Al igual que con muchas otras características nuevas de SQL Server, lo desactivarán / desactivarán de forma predeterminada y obligarán a los DBA a activarlo. En cualquier caso, +1 de mi parte para la advertencia de desaprobación.
swasheck

Es un buen punto, tienes un buen enlace que parece respaldar lo que dices. Pero siento que el enlace que otra persona proporcionó ( support.microsoft.com/kb/230785 ) lo reemplaza. Es más probable que piense que la sección de administración del búfer se equivocó a medias que el otro enlace lo entendió mal. Si eso tiene sentido, ¡no estoy completamente seguro de que me estoy expresando muy bien!
Paul

Es una de esas cosas como las licencias, nada de lo que MS pone sobre eso tampoco está muy claro ...

0

Como dijeron @Thomas Stringer y @Kin, se introdujo en SQL Server 2005 y creo que funciona en todas las ediciones de SQL Server. Para TempDB, aunque CHECKSUM se introdujo en SQL Server 2008

http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/23/checksum-and-tempdb.aspx


Gracias @DaniSQL, sin embargo, nadie ha respondido la pregunta completa todavía. es decir, cuándo se introdujo la DETECCIÓN DE PÁGINA DE TORNOS y cómo se comportó durante las actualizaciones / migraciones.
Paul

Dejaré eso para que los historiadores lo descubran :-) En cuanto a la actualización / migraciones, nada sucederá a menos que cambie manualmente la opción de verificación de página a CHECKSUM en cada base de datos. Incluso entonces las páginas ya existentes no tendrán suma de verificación. blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/29/…
DaniSQL

gracias @DaniSQL, así es como entiendo las migraciones a SQL2005 y superiores para trabajar. Solo quería asegurarme de que las versiones anteriores también mantuvieran este comportamiento
Paul
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.