Можно ли повысить устойчивость к сбоям в SQL Server?

20

У нас есть ПК с SQL Server (2008 SP4 и 2016 SP1), которые регулярно теряют энергию. Очевидно, что это иногда приводит к (индексации) повреждению базы данных SQL Server, которую мы должны восстановить после этого.

Мне известно, что SQL Server не предназначен для таких сценариев, и правильное решение состоит в том, чтобы устранить причину потери питания (подробнее об этом ниже, если вам интересно). Тем не менее, есть ли какие-либо параметры настройки в SQL Server, которые я могу установить, чтобы снизить риск повреждения базы данных при потере питания ?


Справочная информация: «ПК» - это планшет Windows, установленный на погрузчике. Когда пользователь выключает вилочный погрузчик, планшет теряет питание. Мы пытались научить пользователей правильно выключать Windows перед выключением вилочного погрузчика, но не смогли (вероятно, потому, что простое отключение «работает» большую часть времени). В настоящее время мы также изучаем другие варианты, такие как добавление ИБП, который сигнализирует планшету о необходимости отключения питания.

Heinzi
источник

Ответы:

28

Мне известно, что SQL Server не предназначен для таких сценариев, и правильное решение состоит в том, чтобы устранить причину потери питания […]

На самом деле он предназначен для борьбы с потерей мощности, поэтому существуют такие вещи, как запись в журнал (WAL) и аварийное восстановление при запуске (или как вы хотите это называть). Один из способов сделать это - не кэшировать записи, что, по-видимому, и заключается в том, что делает планшет, и, следовательно, к повреждению.

Тем не менее, есть ли какие-либо параметры настройки в SQL Server, которые я могу установить, чтобы снизить риск повреждения базы данных при потере питания?

Нет, SQL Server делает то, что должен. Вы должны искать либо за пределами SQL Server (настройки Windows для кэширования диска [который SQL хочет отключить, но мы не можем заставить вас), обновления аппаратного / микропрограммного обеспечения и т. Д.), Либо, как сказал Эрик, купить внешний источник питания для относительно дешевый, который может решить симптомы (реальная проблема, вероятно, заключается в кэшировании или записи с резервным питанием от батареи, которая на самом деле не поддерживается).

Шон говорит Удалить Сару Чиппс
источник
2
Полезная статья: support.microsoft.com/en-us/help/234656/…
Дэвид Браун - Microsoft
1
У меня есть довольно хорошее предположение, какой параметр является виновником, если это проблема ОС . (хотя это, вероятно, одна из старых встроенных ОС, если я догадываюсь, никогда не проверял, были ли у них такие настройки). И тогда, по крайней мере, большинство потребительских жестких дисков бессовестно лгут о том, что завершили запись по «причинам оптимизации производительности», так что на это практически нет надежды.
Во
26

Если у планшета работающий аккумулятор , вы можете настроить Windows на отключение при низком заряде аккумулятора .

Если у планшета не работает батарея , подумайте о замене батареи. (У меня были такие ноутбуки - вы удивитесь, насколько недорогие сменные батареи могут быть на eBay. Они не работают так же хорошо, как OEM, но в этой ситуации все лучше, чем ничего.)

Если у планшета вообще нет возможностей батареи , рассмотрите возможность добавления небольшого источника бесперебойного питания (ИБП) с выходами USB, который может связываться с Windows, чтобы сообщить ему, когда он работает от батареи. (Например, у меня есть собственный рабочий стол, настроенный на отключение при низком заряде батареи ИБП - таким образом, он отключается при отключении питания, даже если меня нет дома.)

Если ни один из этих вариантов не подходит, вам не повезло. Это старый технический документ, но основы ввода-вывода SQL Server 2000 от Microsoft в основном объясняют, что вам нужна подсистема ввода-вывода, которая может корректно обрабатывать перебои с питанием.

Существуют варианты, которые можно использовать для увеличения риска, например таблицы с отложенной долговечностью или только для памяти (недолговечные), но по умолчанию SQL Server уже делает все возможное, чтобы максимизировать надежность при каждой записи в журнал транзакций. Если даже записи в журнале транзакций не могут быть гарантированы из-за случайных отключений питания, потратьте 100 долларов на батарею ИБП.

Брент Озар
источник
6

Предполагая, что у вас локальная БД на вилочном погрузчике, а не на сервере из-за нестабильных беспроводных соединений? Очевидно, что получение SQL от вилочного погрузчика было бы предпочтительным решением.

В любом случае, как предположил Брент, выключите планшет самостоятельно после x минут работы от батареи или каких-либо аналогичных критериев.

В противном случае небольшой ИБП, который может инициировать нормальное отключение, вероятно, будет лучшим выбором в этом случае. Полагаться на пользователей в таких вещах - значит просить неудачу.

Марбри Хардин
источник
1
«Предполагая, что у вас есть локальная БД на вилочном погрузчике, а не сервер из-за нестабильных беспроводных соединений?» Да, это именно так. Приложение поддерживает синхронизацию локальных и серверных баз данных, что позволяет вилочным погрузчикам покидать зону, покрытую WLAN, и по-прежнему использовать приложение.
Хайнци
2

Базовая ОС должна гарантировать либо успешную запись, либо возвращается ошибка. ОС, в свою очередь, полагается на драйверы, которые, в свою очередь, полагаются на встроенное ПО, которое зависит от аппаратного обеспечения. Если либо драйверы, либо встроенное ПО или аппаратное обеспечение лежат, Windows или сервер sql ничего не могут с этим поделать.

Вот почему вам нужно проверить с производителем драйвера / прошивки / оборудования.

Кроме того, порядок записи должен быть гарантирован для всех слоев, поэтому его также необходимо проверить.

Даже кэш-память с батарейным питанием может выйти из строя, например, во время нью-йоркских штормов некоторые центры обработки данных были недоступны в течение нескольких дней, и батареи могли бы разрядиться, что может привести к потере записи

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

Чтобы расширить другие ответы:

Во-первых, попробуйте получить SQL от погрузчика, если это вообще возможно. Думайте, что восстановление после потери питания - это плохо, попробуйте сделать это после того, как ноутбук перевалил на 7000 фунтов. С часами складской активности на этом, не поддержанном ...

Во-вторых, в любом случае должен быть предусмотрен механизм, позволяющий ноутбуку автоматически отключаться через x раз при питании от батареи.

В-третьих, будет ли вариант подключения ноутбука к непереключенному источнику питания на погрузчике? Обязательно соблюдайте правила техники безопасности (для окружающей среды может потребоваться отключение всего с помощью ключа для вилочного погрузчика) и как долго вилочный погрузчик находится между использованиями (особенно в выходные и праздничные дни), чтобы избежать разрядки аккумулятора машины.

GB540
источник