Write-ahead log
const wal = require('internal').wal
This module provides functionality for administering the write-ahead logs. Most of these functions only return sensible values when invoked with the mmfiles engine being active.
Configuration
retrieves the configuration of the write-ahead log
internal.wal.properties()
Retrieves the configuration of the write-ahead log. The result is a JSON array with the following attributes:
- allowOversizeEntries: whether or not operations that are bigger than a single logfile can be executed and stored
- logfileSize: the size of each write-ahead logfile
- historicLogfiles: the maximum number of historic logfiles to keep
- reserveLogfiles: the maximum number of reserve logfiles that ArangoDB allocates in the background
- syncInterval: the interval for automatic synchronization of not-yet synchronized write-ahead log data (in milliseconds)
- throttleWait: the maximum wait time that operations will wait before they get aborted if case of write-throttling (in milliseconds)
- throttleWhenPending: the number of unprocessed garbage-collection operations that, when reached, will activate write-throttling. A value of 0 means that write-throttling will not be triggered.
Examples
arangosh> require("internal").wal.properties();
{
"allowOversizeEntries" : true,
"logfileSize" : 33554432,
"historicLogfiles" : 10,
"reserveLogfiles" : 3,
"syncInterval" : 100,
"throttleWait" : 15000,
"throttleWhenPending" : 0
}
arangosh> require("internal").wal.properties();
configures the write-ahead log
internal.wal.properties(properties)
Configures the behavior of the write-ahead log. properties must be a JSON JSON object with the following attributes:
- allowOversizeEntries: whether or not operations that are bigger than a single logfile can be executed and stored
- logfileSize: the size of each write-ahead logfile
- historicLogfiles: the maximum number of historic logfiles to keep
- reserveLogfiles: the maximum number of reserve logfiles that ArangoDB allocates in the background
- throttleWait: the maximum wait time that operations will wait before they get aborted if case of write-throttling (in milliseconds)
- throttleWhenPending: the number of unprocessed garbage-collection operations that, when reached, will activate write-throttling. A value of 0 means that write-throttling will not be triggered.
Specifying any of the above attributes is optional. Not specified attributes will be ignored and the configuration for them will not be modified.
Examples
arangosh> require("internal").wal.properties({
........> allowOverSizeEntries: true,
........> logfileSize: 32 * 1024 * 1024 });
{
"allowOversizeEntries" : true,
"logfileSize" : 33554432,
"historicLogfiles" : 10,
"reserveLogfiles" : 3,
"syncInterval" : 100,
"throttleWait" : 15000,
"throttleWhenPending" : 0
}
arangosh> require("internal").wal.properties({
........> allowOverSizeEntries: true,
........> logfileSize: 32 * 1024 * 1024 });
Flushing
flushes the currently open WAL logfile
internal.wal.flush(waitForSync, waitForCollector)
Flushes the write-ahead log. By flushing the currently active write-ahead logfile, the data in it can be transferred to collection journals and datafiles. This is useful to ensure that all data for a collection is present in the collection journals and datafiles, for example, when dumping the data of a collection.
The waitForSync option determines whether or not the operation should block until the not-yet synchronized data in the write-ahead log was synchronized to disk.
The waitForCollector operation can be used to specify that the operation should block until the data in the flushed log has been collected by the write-ahead log garbage collector. Note that setting this option to true might block for a long time if there are long-running transactions and the write-ahead log garbage collector cannot finish garbage collection.
Examples
arangosh> require("internal").wal.flush();