×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

3.13.1. Надежность

Надежность — важное свойство любой серьезной системы баз данных, и Digital Q.DataBase делает все возможное, чтобы гарантировать надежную работу. Одним из аспектов надежной работы является то, что все данные, зафиксированные завершенной транзакцией, должны храниться в энергонезависимой области, защищенной от потери питания, сбоя операционной системы и сбоя оборудования (за исключением сбоя самой энергонезависимой области, конечно). Успешная запись данных на постоянное хранилище компьютера (жесткий диск или аналог) обычно соответствует этому требованию. Фактически, даже если компьютер фатально поврежден, если диски уцелели, их можно перенести на другой компьютер с аналогичным оборудованием, и все зафиксированные транзакции останутся нетронутыми.

Хотя периодический принудительный сброс данных на пластины диска может показаться простой операцией, это не так. Поскольку диски работают значительно медленнее, чем основная память и процессоры, между основной памятью компьютера и пластинами диска существует несколько уровней кэширования. Во-первых, это буферный кэш операционной системы, который кэширует часто запрашиваемые дисковые блоки и объединяет операции записи на диск. К счастью, все операционные системы предоставляют приложениям способ принудительного сброса записей из буферного кэша на диск, и Digital Q.DataBase использует эти функции. (См. параметр wal_sync_method, чтобы настроить, как это делается.)

Далее может находиться кэш в контроллере дискового накопителя; это особенно распространено на картах RAID-контроллеров. Некоторые из этих кэшей являются сквозными (write-through), что означает, что записи отправляются на накопитель сразу после их поступления. Другие являются с обратной записью (write-back), что означает, что данные отправляются на накопитель спустя некоторое время. Такие кэши могут представлять угрозу для надежности, так как память в кэше дискового контроллера является энергозависимой и потеряет свое содержимое при сбое питания. Лучшие карты контроллеров имеют блоки резервного питания от батарей (BBU), что означает, что на карте есть батарея, которая поддерживает питание кэша в случае потери питания системы. После восстановления питания данные будут записаны на диски.

И, наконец, большинство дисковых накопителей имеют собственные кэши. Некоторые работают по принципу сквозной записи, некоторые — с обратной записью, и в отношении кэшей дисков с обратной записью существуют те же опасения по поводу потери данных, что и для кэшей дисковых контроллеров. IDE и SATA накопители потребительского класса особенно склонны к использованию кэшей с обратной записью, которые не переживут сбой питания. Многие твердотельные накопители (SSD) также имеют энергозависимые кэши с обратной записью.

Эти кэши обычно можно отключить; однако способ сделать это варьируется в зависимости от операционной системы и типа накопителя:

  • В Linux IDE и SATA накопители можно проверить с помощью hdparm -I; кэширование записи включено, если рядом с Write cache стоит символ *. Для отключения кэширования записи можно использовать hdparm -W 0. Накопители SCSI можно проверить с помощью sdparm. Используйте sdparm --get=WCE, чтобы проверить, включен ли кэш записи, и sdparm --clear=WCE, чтобы отключить его.

  • В FreeBSD накопители IDE можно проверить с помощью camcontrol identify и отключить кэширование записи с помощью hw.ata.wc=0 в файле /boot/loader.conf; накопители SCSI можно проверить с помощью camcontrol identify, а кэш записи как проверить, так и изменить с помощью sdparm, если это возможно.

  • В Solaris кэш записи на диск управляется командой format -e. (Файловая система Solaris ZFS безопасна при включенном кэше записи диска, поскольку она сама выдает команды сброса дискового кэша.)

  • В Windows, если wal_sync_method имеет значение open_datasync (по умолчанию), кэширование записи можно отключить, сняв флажок Мой компьютер\Открыть\дисковый накопитель\Свойства\Оборудование\Свойства\Политика\Разрешить кэширование записи на диск. В качестве альтернативы установите wal_sync_method в значение fdatasync (только для NTFS) или fsync, которые предотвращают кэширование записи.

  • В macOS кэширование записи можно предотвратить, установив wal_sync_method в значение fsync_writethrough.

Современные накопители SATA (соответствующие ATAPI-6 или выше) поддерживают команду сброса кэша накопителя (FLUSH CACHE EXT), в то время как накопители SCSI давно поддерживают аналогичную команду SYNCHRONIZE CACHE. Эти команды недоступны напрямую для Digital Q.DataBase, но некоторые файловые системы (например, ZFS, ext4) могут использовать их для сброса данных на пластины на накопителях с включенной обратной записью. К сожалению, такие файловые системы ведут себя неоптимально в сочетании с дисковыми контроллерами с блоком резервного питания (BBU). В таких конфигурациях команда синхронизации принудительно сбрасывает все данные из кэша контроллера на диски, сводя на нет большую часть преимуществ BBU. Вы можете запустить программу pg_test_fsync, чтобы проверить, затрагивает ли это вас. Если да, то преимущества производительности BBU можно вернуть, отключив барьеры записи (write barriers) в файловой системе или перенастроив дисковый контроллер, если это возможно. Если барьеры записи отключены, убедитесь, что батарея исправна; неисправная батарея потенциально может привести к потере данных. Будем надеяться, что разработчики файловых систем и дисковых контроллеров со временем устранят это неоптимальное поведение.

Когда операционная система отправляет запрос на запись оборудованию хранения, она мало что может сделать, чтобы убедиться, что данные попали в по-настоящему энергонезависимую область хранения. Скорее, это ответственность администратора — убедиться, что все компоненты хранения гарантируют целостность как данных, так и метаданных файловой системы. Избегайте дисковых контроллеров, имеющих кэши записи без резервного питания от батарей. На уровне накопителя отключайте кэширование с обратной записью, если накопитель не может гарантировать запись данных перед выключением. Если вы используете SSD, имейте в виду, что многие из них не соблюдают команды сброса кэша по умолчанию. Вы можете проверить надежность поведения подсистемы ввода-вывода с помощью diskchecker.pl.

Еще один риск потери данных связан с операциями записи на пластины диска сами по себе. Пластины диска разделены на сектора, обычно по 512 байт каждый. Каждая физическая операция чтения или записи обрабатывает целый сектор. Когда запрос на запись поступает на накопитель, он может быть кратен 512 байтам (Digital Q.DataBase обычно записывает по 8192 байта, или 16 секторов за раз), и процесс записи может прерваться из-за потери питания в любой момент, что означает, что часть 512-байтовых секторов была записана, а часть — нет. Чтобы защититься от таких сбоев, Digital Q.DataBase периодически записывает полные образы страниц в постоянное хранилище журнала предварительной записи перед модификацией самой страницы на диске. Благодаря этому во время восстановления после сбоя Digital Q.DataBase может восстановить частично записанные страницы из журнала предварительной записи. Если у вас есть программное обеспечение файловой системы, которое предотвращает частичную запись страниц (например, ZFS), вы можете отключить это создание образов страниц, отключив параметр full_page_writes. Дисковые контроллеры с блоком резервного питания (BBU) не предотвращают частичную запись страниц, если только они не гарантируют, что данные записываются в BBU полными (8 КБ) страницами.

Digital Q.DataBase также защищает от некоторых видов повреждения данных на устройствах хранения, которые могут возникнуть из-за аппаратных ошибок или износа носителя со временем, таких как чтение/запись «мусорных» данных.

  • Каждая отдельная запись в файле журнала предварительной записи защищена контрольной суммой CRC-32C (32-битной), которая позволяет нам определить, правильно ли содержимое записи. Значение CRC устанавливается при записи каждой записи журнала и проверяется во время восстановления после сбоя, восстановления из архива и репликации.

  • Страницы данных в настоящее время не защищены контрольными суммами по умолчанию, хотя полные образы страниц, записанные в журнале предварительной записи, будут защищены; см. initdb для подробностей о включении контрольных сумм данных.

  • Внутренние структуры данных, такие как pg_xact, pg_subtrans, pg_multixact, pg_serial, pg_notify, pg_stat, pg_snapshots, напрямую не защищены контрольными суммами, и их страницы не защищаются записью полных страниц. Однако там, где такие структуры данных являются постоянными, записываются записи в журнал предварительной записи, которые позволяют точно восстановить последние изменения при восстановлении после сбоя, и эти записи журнала защищены, как описано выше.

  • Отдельные файлы состояния в pg_twophase защищены CRC-32C.

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

Digital Q.DataBase не защищает от исправимых ошибок памяти, и предполагается, что вы будете работать с оперативной памятью, использующей стандартные промышленные коды исправления ошибок (ECC) или более совершенную защиту.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению