¿Se puede mejorar la resistencia al bloqueo de SQL Server?


20

Tenemos PC con SQL Server (2008 SP4 y 2016 SP1) que regularmente pierden energía. Obviamente, esto a veces conduce a la corrupción (índice) de la base de datos de SQL Server, que debemos restaurar después.

Soy consciente de que SQL Server no está diseñado para tales escenarios y la solución correcta es solucionar la causa de la pérdida de energía (más sobre eso a continuación, si tiene curiosidad). Sin embargo, ¿hay alguna opción de ajuste en SQL Server que pueda configurar para reducir el riesgo de corrupción de la base de datos en caso de pérdida de energía ?


Antecedentes: la "PC" es una tableta de Windows montada en una carretilla elevadora. Cuando el usuario apaga la carretilla elevadora, la tableta pierde potencia. Hemos tratado de enseñar a los usuarios a cerrar Windows correctamente antes de apagar la carretilla elevadora, pero fallamos (probablemente porque simplemente apagarla "funciona" la mayor parte del tiempo). Actualmente también estamos investigando otras opciones, como agregar un UPS que le indica a la tableta que se apague en caso de pérdida de energía.

Respuestas:


28

Soy consciente de que SQL Server no está diseñado para tales escenarios y la solución correcta es solucionar la causa de la pérdida de energía [...]

En realidad, está diseñado para lidiar con la pérdida de energía, es por eso que hay cosas como el registro anticipado de escritura (WAL) y la recuperación de fallas al inicio (o como quiera llamarlo). Una de las formas en que se hace esto es eligiendo no escribir en caché lo que parece es lo que está haciendo la tableta, de ahí la corrupción.

Sin embargo, ¿hay alguna opción de ajuste en SQL Server que pueda configurar para reducir el riesgo de corrupción de la base de datos en caso de pérdida de energía?

No, SQL Server está haciendo lo que debería. Debería buscar fuera de SQL Server (configuración de Windows para el almacenamiento en caché de la unidad [que SQL quiere desactivar pero no podemos forzarlo], actualizaciones de hardware / firmware, etc.) o como Eric ha dicho, compre una fuente de alimentación externa por relativamente barato, lo que podría resolver los síntomas (el problema real es probablemente algún tipo de almacenamiento en caché o escritura respaldada por batería que en realidad no está respaldada).



1
Tengo una buena idea de qué configuración es la culpable si se trata de un problema del sistema operativo . (aunque es probable que este sea uno de los viejos sistemas operativos integrados si tuviera que adivinar, nunca comprobé si tenían esa configuración también). Y luego, al menos, la mayoría de los discos duros de calidad para el consumidor mienten descaradamente de haber completado la escritura por "razones de optimización del rendimiento", por lo que básicamente no hay esperanza para ellos.
Voo

26

Si la tableta tiene una batería que funciona , puede configurar Windows para que se apague cuando la batería tenga poca carga .

Si la tableta tiene una batería que no funciona , considere reemplazar la batería. (He tenido computadoras portátiles como esa; se sorprendería de lo económicas que pueden ser las baterías de repuesto en eBay. No funcionan tan bien como los OEM, pero bueno, cualquier cosa es mejor que nada en esta situación).

Si la tableta no tiene capacidad de batería , considere agregar una pequeña fuente de alimentación ininterrumpida (UPS) con salidas USB que pueda comunicarse con Windows para indicarle cuándo funciona con batería. (Por ejemplo, tengo mi propio escritorio configurado para apagarse cuando el UPS tiene poca energía de la batería, de esa manera se apagará en caso de corte de energía incluso si no estoy en casa).

Si ninguno de esos es una opción, no tienes suerte. Es un documento técnico antiguo, pero los conceptos básicos de E / S de SQL Server 2000 de Microsoft básicamente explican que necesita un subsistema de E / S que pueda manejar los cortes de energía con gracia.

Hay opciones que puede usar para aumentar el riesgo, como la durabilidad retardada o las tablas de solo memoria (no duraderas), pero de manera predeterminada, SQL Server ya está haciendo todo lo posible para maximizar la confiabilidad con cada escritura en el registro de transacciones. Si incluso las escrituras del registro de transacciones no pueden garantizarse debido a cortes de energía al azar, gaste los $ 100 en una batería UPS.


6

¿Suponiendo que tiene una base de datos local en la carretilla elevadora en lugar de un servidor debido a las conexiones inalámbricas irregulares? Obviamente, sacar SQL del montacargas sería la solución preferible.

De todos modos, como sugirió Brent, configure la tableta para que se apague por sí sola después de x minutos con batería o algunos criterios similares.

De lo contrario, un UPS pequeño que pueda iniciar un apagado normal probablemente sea su mejor opción en ese caso. Confiar en los usuarios para cosas como esas es pedir que falle.


1
"¿Suponiendo que tiene una base de datos local en la carretilla elevadora en lugar de un servidor debido a las conexiones inalámbricas irregulares?" Sí, ese es exactamente el caso. La aplicación mantiene las bases de datos locales y la base de datos del servidor sincronizadas, lo que permite que las carretillas elevadoras abandonen el área cubierta por WLAN y sigan utilizando la aplicación.
Heinzi

2

El sistema operativo subyacente debe garantizar una escritura exitosa o un error devuelto. El sistema operativo a su vez se basa en controladores que a su vez dependen del firmware que se basa en el hardware.

Es por eso que debe consultar con el fabricante del controlador / firmware / hardware.

También se debe garantizar el orden de escritura en todas las capas, por lo que también es necesario verificarlo.

Incluso los cachés respaldados por baterías pueden fallar, por ejemplo, durante las tormentas de Nueva York, algunos centros de datos no estuvieron accesibles durante días y las baterías se habrían agotado, lo que podría perder escrituras conmutadas

https://www.postgresql.org/docs/devel/static/wal-reliability.html

https://brad.livejournal.com/2116715.html

http://rhaas.blogspot.com/2010/10/wal-reliability.html?m=1


1

Para ampliar las otras respuestas:

Primero, intente quitar el SQL del montacargas si es posible. Piense que recuperarse de una pérdida de energía es malo, intente hacerlo después de que la computadora portátil sea atropellada por más de 7,000 libras. Con horas de actividad de almacén en él, sin copia de seguridad ...

En segundo lugar, un mecanismo para que la computadora portátil se apague automáticamente después de x tiempo con la batería debe estar implementado de todos modos.

En tercer lugar, ¿sería una opción conectar la computadora portátil a una fuente de alimentación no conmutada en la carretilla elevadora? Asegúrese de tener en cuenta las normas de seguridad (el medio ambiente puede requerir que todo esté apagado con la llave de la carretilla elevadora) y cuánto tiempo se queda la carretilla elevadora entre usos (especialmente los fines de semana y feriados) para evitar agotar la batería de la máquina.

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.