Журнал транзакций
Изменения в Lucene сохраняются на диск только во время фиксации Lucene, что является относительно дорогостоящей операцией, и поэтому не может выполняться после каждой операции индексирования или удаления. Изменения, произошедшие после одной фиксации и до другой, будут удалены из индекса Lucene в случае выхода из строя процесса или аппаратного сбоя.
Фиксации Lucene слишком дорогостоящие для выполнения при каждом отдельном изменении, поэтому каждая копия фрагмента также записывает операции в свой журнал транзакций, известный как журнал транзакций (translog). Все операции индексирования и удаления записываются в журнал транзакций после обработки внутренним индексом Lucene, но до подтверждения. В случае сбоя, последние операции, которые были подтверждены, но еще не включены в последнюю фиксацию Lucene, вместо этого восстанавливаются из журнала транзакций во время восстановления фрагмента.
Elasticsearch очистка — это процесс выполнения фиксации Lucene и запуска новой генерации журнала транзакций. Очистки выполняются автоматически в фоновом режиме, чтобы убедиться, что журнал транзакций не становится слишком большим, что сделало бы перепроигрывание его операций слишком длительным во время восстановления. Размер журнала транзакций никогда не превысит 1% размера диска.
Настройки журнала транзакций
Данные в журнале транзакций сохраняются на диск только тогда, когда журнал транзакций fsync и подтвержден. В случае аппаратного сбоя, сбоя операционной системы или сбоя JVM или сбоя фрагмента, любые данные, записанные с момента предыдущего подтверждения журнала транзакций, будут потеряны.
По умолчанию, index.translog.durability устанавливается в значение request, что означает, что Elasticsearch будет сообщать клиенту только об успехе запроса на индексирование, удаление, обновление или пакетный запрос после успешного fsync и подтверждения журнала транзакций на первичном и на каждом назначенном реплике. Если index.translog.durability установлен в значение async, тогда Elasticsearch fsync и подтверждает журнал транзакций только каждые index.translog.sync_interval, что означает, что любые операции, выполненные незадолго до сбоя, могут быть потеряны при восстановлении узла.
Следующие динамически обновляемые параметры на уровне индекса контролируют поведение журнала транзакций:
-
index.translog.sync_interval - Как часто журнал транзакций
fsyncна диск и подтверждается, независимо от операций записи. По умолчанию устанавливается в значение5s. Значения меньше100msзапрещены. -
index.translog.durability -
Необходимо ли
fsyncи подтверждать журнал транзакций после каждой операции индексирования, удаления, обновления или пакетного запроса. Эта настройка принимает следующие параметры:-
request - (по умолчанию)
fsyncи подтверждать после каждого запроса. В случае аппаратного сбоя все подтвержденные записи уже были сохранены на диск. -
async -
fsyncи подтверждать в фоновом режиме каждыеsync_interval. В случае сбоя все подтвержденные записи с момента последнего автоматического подтверждения будут отброшены.
-
-
index.translog.flush_threshold_size - Журнал транзакций хранит все операции, которые еще не сохранены в Lucene (т.е. не являются частью точки фиксации Lucene). Хотя к этим операциям можно получить доступ для чтения, их необходимо будет перепроиграть, если фрагмент был остановлен и должен был быть восстановлен. Этот параметр контролирует максимальный общий размер этих операций, чтобы предотвратить слишком длительные процессы восстановления. После достижения максимального размера произойдет очистка, создавая новую точку фиксации Lucene. По умолчанию устанавливается в значение
10 GB.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/index-modules-translog.html