Skip to content

Local databases on Mac: Postgres, MySQL, Redis and SQLite files

Postgres data folder size on a Mac, and where MySQL, Redis, MongoDB and SQLite keep data: what grows by itself and how each database reclaims space.

Developer storage · Published · 21 min read
A detailed look at the interior of an industrial storage warehouse with metal shelves.
Photo: Adrien Olichon on Pexels

The Postgres data folder's size on a Mac is the size of your databases plus a few files PostgreSQL manages itself. Postgres.app keeps it in ~/Library/Application Support/Postgres, in a folder such as var-17, and Homebrew in /opt/homebrew/var, in one such as postgresql@17.

Get Info in Finder shows its size. Most of it is your data. What grows without you adding anything is PostgreSQL's write-ahead log, its server log, and whole data folders left behind by major upgrades. MySQL, Redis, MongoDB and SQLite have their own: binary logs, append-only files, server logs and -wal files.

None of it is a cache. Remove a database you no longer need with the database's own tools, so its files go cleanly; remove a whole data folder only when you've finished with that server, with the server stopped, and after making a dump if there's anything in it you might want.

This post goes through where each of these databases keeps its files on a Mac, which parts grow by themselves, and how each database's own tools give space back.

Where local databases keep their data on a Mac

Each database server keeps everything in one folder, its data directory. Where that is depends on how you installed it, not on the database.

DatabaseInstalled withData folderLogs
PostgreSQLPostgres.app~/Library/Application Support/Postgres/var-17postgres-server.log in the data folder
PostgreSQLHomebrew/opt/homebrew/var/postgresql@17/opt/homebrew/var/log/postgresql@17.log
MySQL or MariaDBHomebrew/opt/homebrew/var/mysqlA .err file in the data folder
MySQLMySQL's installer/usr/local/mysql/datamysqld.local.err in the data folder
RedisHomebrew/opt/homebrew/var/db/redis/opt/homebrew/var/log/redis.log
MongoDBMongoDB's Homebrew tap/opt/homebrew/var/mongodb/opt/homebrew/var/log/mongodb/mongo.log
SQLiteYour app or projectWherever the app puts its .sqlite or .db fileNone of its own

On an Intel Mac, Homebrew's folders are under /usr/local instead of /opt/homebrew. The version numbers are examples: each major version gets a folder of its own.

How do you check a data folder's size?

Finder shows it, as long as you can open the folder.

  1. In Finder, choose Go › Go to Folder, or press Shift-Command-G.
  2. Type the folder that holds the data, such as /opt/homebrew/var or ~/Library/Application Support/Postgres, and press Return.
  3. Select a data folder and choose File › Get Info. The size appears under General once Finder has counted it.

MySQL's installer runs its server under its own account, so Finder may not be allowed to open /usr/local/mysql/data or count it.

Where do databases show up in Storage settings?

Mostly in System Data. Storage settings, in System Settings › General › Storage, has no category for databases, so data folders in your Library and Homebrew's folders count as System Data, along with everything else it can't name.

Two exceptions: a SQLite file inside one of your projects is counted with your documents, and a database running in Docker lives inside Docker's own disk file, which Storage settings also counts as System Data.

Are any of these folders caches?

No. Almost everything in a data folder is the database: your tables, the logs it needs to recover after a crash, and its settings. The server reads it when it starts, and some of it is written every second it runs. A server's text log, where it's kept there, is the one exception.

That's why a database is never something to clear in bulk. The space comes back either through the database's own tools, or by deciding a whole database, or a whole server, is no longer needed.

A set of five vintage metal file cabinets, aged and worn, displayed in black and white.
A database server keeps everything in one data folder, and only its own tools know which parts can go. Photo: Magda Ehlers on Pexels

Postgres data folder size on a Mac: what's inside

A PostgreSQL data folder, which PostgreSQL's documentation calls the cluster's data directory, has a fixed layout. Knowing what each part holds explains most surprises about its size.

Folder or fileWhat it holds
baseOne folder per database, named by a number rather than the database's name
pg_walThe write-ahead log: recent changes, kept for crash recovery
globalTables shared by the whole server, such as the list of databases
pg_xactRecords of which transactions committed
postmaster.pidA lock file that exists only while the server runs

Most of the size is usually in base. PostgreSQL's documentation explains that each database's folder there is named after its internal ID, so Finder can show you which database is large, but not which one it is by name.

Why is pg_wal so large?

PostgreSQL writes every change to the write-ahead log before it changes the tables, so it can recover after a crash. At each checkpoint, it removes or recycles the log files it no longer needs.

By default it aims to keep the log under 1 GB, its max_wal_size setting, and keeps at least 80 MB ready for reuse. The documentation stresses that 1 GB is never a hard limit. A burst of changes, such as loading a large dump, can push it past that for a while.

When does pg_wal keep growing?

When something tells PostgreSQL to keep old log files. Its documentation names the usual causes:

  • A replication slot nobody reads. A slot made by a replica, or by a tool that streams changes, keeps every log file that reader hasn't received.
  • Archiving that fails. If log archiving is turned on and keeps failing, old files pile up until it works again.
  • A setting that keeps extra log. A size set to keep for replicas is kept on top of everything else.

On a Mac used for development, replication and archiving are usually off, so a slot left by a tool you tried is the one to look for. Remove the slot with PostgreSQL's own tools, and PostgreSQL removes the files at its next checkpoint.

Can you delete files in pg_wal?

No. The write-ahead log is part of the database, not a record of it: PostgreSQL needs those files to recover after a crash, and removes the ones it doesn't need by itself. Deleting them by hand can leave the server unable to start, or the data inconsistent.

The same goes for every other folder in the data folder. If pg_wal is large, find the reason above and fix that.

Why doesn't deleting rows shrink the folder?

Because PostgreSQL keeps the space for reuse. Its documentation says a standard vacuum, which runs automatically, marks the space of deleted rows as free for future rows, but doesn't return it to the Mac, except for empty pages at the very end of a table.

A full vacuum rewrites a table without the dead space and returns it to the Mac. It locks the table while it works and needs room for the new copy until it's done. In pgAdmin, its Maintenance dialog runs a vacuum on a database or table, with a FULL switch for the full kind.

Dropping a database you no longer need

Old test databases and copies of production data are often the bulk of a developer's data folder. Dropping a database removes its folder in base straight away; PostgreSQL's documentation says it can't be undone.

Use a database app such as pgAdmin, Postico or TablePlus to see each database's name and drop the ones you're sure about. Never remove numbered folders in base in Finder: the server still lists those databases, and it can't open them.

Old PostgreSQL versions: the folders upgrades leave behind

A new major version of PostgreSQL can't read an older version's data folder directly, so each major version gets a new folder. The old one stays, with every database in it, until you remove it.

Postgres.app's var folders

Postgres.app's documentation gives its default data folder as ~/Library/Application Support/Postgres, in a folder named var- and the major version. It can run several servers at once, each with its own folder, and lists them in its sidebar.

To move to a new version, its documentation describes copying your data across with PostgreSQL's tools, then, once you've tested that everything works, removing the old data from that folder. Until you do, the old version's folder keeps its full size.

Homebrew's postgresql folders

Homebrew names PostgreSQL's formulae by major version, such as postgresql@16 and postgresql@17, and gives each its own data folder in /opt/homebrew/var. Older installations used a folder called postgres there, which Homebrew's notes for postgresql@14 suggest moving.

Uninstalling a formula with Homebrew removes the server, never its data folder. The post on Homebrew cleanup explains why data in /opt/homebrew/var outlives the software that made it.

How do you tell whether an old data folder still matters?

Look at three things in Finder, in List view with the Date Modified column:

  1. Is there a postmaster.pid file inside? PostgreSQL's documentation says the file exists only while the server runs. If it's there, the server is probably running; stop it before anything else.
  2. When did files in base last change? A folder untouched since you upgraded is likely a leftover.
  3. Did your data make it across? Open the new server in a database app and check the databases you care about are there.

Before you remove a data folder

Stop the server, in Postgres.app or with Homebrew's services. Then, if anything in it might matter, make a dump with PostgreSQL's tools or a database app, and keep the file somewhere other than the folder you're removing.

Then move the whole data folder to the Trash in Finder, never part of it. Keep the Trash until you've confirmed the new server has everything; a data folder in the Trash can still be put back.

SituationWhere the old data isWhat to do
Upgraded Postgres.app to a new major version~/Library/Application Support/Postgres/var-16Check the new server, then move the old folder to the Trash
Moved from postgresql@16 to @17 with Homebrew/opt/homebrew/var/postgresql@16Check, stop the old service, uninstall the old formula, then move the folder
An old Homebrew install before versioned names/opt/homebrew/var/postgresCheck whether anything uses it; dump it if unsure
Stopped using Postgres.app entirely~/Library/Application Support/PostgresIts uninstall steps make removing data optional: dump first
High-angle view of blank index cards arranged neatly on a wooden desk.
Each major version of PostgreSQL gets a data folder of its own, and the old one stays until you remove it. Photo: Pixabay on Pexels

MySQL and MariaDB: binary logs and tablespaces

MySQL keeps every database as a folder inside its data folder, with a file per table. Next to them are files MySQL manages itself, and two of them explain most unexpected growth.

What are the binlog files?

Binary logs, a record of every change, used for replication and for recovering to a point in time. MySQL's manual says binary logging is on by default, and the files sit in the data folder, named binlog with a number that grows each time a new file starts.

A new file starts when the current one reaches 1 GB, and when the server restarts. By default, MySQL removes binary logs once they're 30 days old, but only when it starts or moves to a new log file, so a server that runs for weeks can keep more.

Can you delete binary logs?

MySQL's manual says you can remove the files by hand, but that it's better to use its own purge statement, which also updates the index file that lists them. If MySQL replicates to another server, keep the logs until no replica needs them.

On a Mac used only for development, nothing else usually reads them. MySQL's configuration file can shorten how long they're kept, or turn binary logging off, which its manual documents as a startup option.

Why doesn't dropping a table free space?

It depends where the table lives. MySQL's manual says tables are created in their own files by default, and dropping or truncating one of those returns its space to the Mac straight away.

Tables in the shared system tablespace, the file called ibdata1, are different. Space freed there stays inside the file for MySQL to reuse, and the file doesn't shrink. Old installations, and ones with file-per-table turned off, are where a large ibdata1 comes from.

What is ibtmp1?

MySQL's temporary tablespace, for temporary tables it makes while running queries. It starts at a little over 12 MB and grows as needed. MySQL's manual says it's removed at a normal shutdown and made again at startup, so restarting the server is how you reclaim its space.

MySQL's preference pane

MySQL's installer adds a preference pane of its own, which its manual still describes under System Preferences. It can start and stop the server and uninstall MySQL.

It also has an Initialize Database button, which the manual says recreates the data folder. That replaces every database you have with an empty one. It isn't a way to free space unless that's exactly what you want.

MariaDB and Homebrew

Homebrew's MySQL and MariaDB both use /opt/homebrew/var/mysql. If you've switched from one to the other, the folder may hold data the other made, so check before treating it as either one's leftovers.

Apps that bundle their own MySQL, such as tools for running WordPress sites locally, keep separate data folders with their own settings. Manage those through the app.

Redis and Valkey: the dump file is the data

Redis keeps its data in memory and saves it to disk so it survives a restart. On disk, that's one or two kinds of file in its working folder.

Where does Homebrew's Redis keep its files?

Homebrew's Redis uses /opt/homebrew/var/db/redis as its working folder, writes its log to /opt/homebrew/var/log/redis.log, and reads its settings from /opt/homebrew/etc/redis.conf. Homebrew's Valkey, a fork of Redis, has the same layout under its own name: /opt/homebrew/var/db/valkey and valkey.log.

dump.rdb and the append-only file

By default, Redis saves snapshots of everything to a file called dump.rdb, replacing it each time. Its documentation calls this compact and suited to backups. The size of dump.rdb follows the size of your data.

If the append-only file is turned on, Redis also logs every change. It rewrites that log automatically when it gets too big, keeping only what's needed to rebuild the current data. Since Redis 7, the log is several files in a folder of their own, tracked by a manifest.

Can you delete dump.rdb?

Only if you don't need what's in Redis. With the server stopped, removing the file means Redis starts empty. With the server running, Redis just writes a new one from memory at its next save, so nothing is freed.

On a development Mac, Redis often holds caches, sessions and job queues, which can go. To empty it or remove keys, use Redis's own tools, such as Redis Insight, its desktop app, and the file shrinks at the next save.

Is it safe to copy dump.rdb?

Yes. Redis's documentation says copying the file is safe while the server runs, because Redis writes each new snapshot under a temporary name and swaps it in only when it's complete. That makes it an easy backup before emptying anything.

MongoDB: data files and a log that keeps growing

MongoDB, installed with its own Homebrew tap, keeps data in /opt/homebrew/var/mongodb and writes its log to /opt/homebrew/var/log/mongodb/mongo.log. The tap's settings tell MongoDB to add to that log rather than replace it.

Why doesn't deleting documents shrink MongoDB's files?

MongoDB keeps freed space inside its files for reuse, much like PostgreSQL. Its compact command attempts to release unneeded space to the Mac. The documentation adds that how much it frees depends on where the free blocks are, and that it may need extra disk space to run.

Dropping a collection or a database you no longer need frees its files outright. MongoDB Compass, MongoDB's desktop app, can drop both.

What about the log?

The log grows with every start and every message, and the tap's settings never replace it. Stop the server, move mongo.log to the Trash, and MongoDB starts a new one when it next starts. Do the same with other servers' logs in /opt/homebrew/var/log.

The data folder itself is the database. Leave everything in it, including the files whose names start with WiredTiger, to MongoDB.

SQLite: database files everywhere

SQLite isn't a server: it's a database in a single file, which an app opens directly. That makes SQLite files common on any Mac, and most of them belong to apps.

Where do SQLite files live?

Inside apps' own folders, mostly: ~/Library/Application Support, ~/Library/Containers and similar places, where apps keep their libraries, histories and settings. Those are the apps' data; manage them in the apps.

The ones that are yours are in your projects. Rails apps keep SQLite databases in the project's storage folder by default, Django creates db.sqlite3 at the top of a project, and test suites often leave copies behind.

What are the -wal and -shm files?

A database in SQLite's write-ahead log mode has two companions: a file ending in -wal, holding recent changes, and one ending in -shm, an index to it. SQLite's documentation says both are usually deleted when the last connection to the database closes.

While the database is open, SQLite moves changes from the -wal file into the database at checkpoints, by default once it reaches 1,000 pages. A checkpoint doesn't shrink the -wal file unless a limit is set. If readers keep the database open constantly, checkpoints can't finish and the file can grow without bound.

Can you delete a -wal file?

No. SQLite's documentation says the -wal file is part of the database's state: separated from it, committed changes can be lost or the database corrupted. The only safe way to remove it is to open the database and close it again, which is what an app normally does when it quits.

When you copy or move a SQLite database, move the -wal and -shm files with it, or quit the app first so they're gone.

How do you shrink a SQLite file?

SQLite leaves deleted data's space as free pages inside the file. Its vacuum command rebuilds the database without them, which can make the file much smaller. The documentation warns that it can need free space of up to twice the database's size while it works.

In DB Browser for SQLite, a free app, choose Tools › Compact Database. Work on a database no app has open, and only on your own databases, never an app's.

Close-up of a classic reel-to-reel tape recorder in a vintage recording studio setting.
Write-ahead logs record changes before they reach the tables, and each database trims its own. Photo: Nikita Korchagin on Pexels

Databases in Docker and bundled apps

Many developers run databases in containers instead of installing them. The data is just as real; it's only harder to see.

Where does a database in Docker keep its data?

Usually in a volume, storage Docker keeps separately so it survives when the container is removed. Docker Desktop keeps volumes inside its single disk file, the Docker Desktop disk image (Docker.raw), so they never show up as folders in Finder.

Docker's documentation says plainly that deleting a volume deletes the volume and all its data, and its button for it says Delete forever. Remove volumes in Docker Desktop's Volumes view only when you're sure. The post on Docker Desktop disk space covers what else is inside that file.

Why doesn't Docker's disk file shrink when you delete a database?

Deleting rows inside a containerized database frees space inside the database, which keeps it for reuse, just as it would on your Mac. So Docker's disk file has nothing to give back. Dropping the database, or removing its volume, is what frees space Docker can return.

Apps that run a database for you

Some apps bundle a database server: local WordPress tools, Mac apps for running PHP and Laravel sites, and database apps that start servers on demand. Each keeps data in its own folder, usually in ~/Library/Application Support.

Remove those databases in the app that made them. Its uninstall steps, if it has any, say whether data goes with it.

What grows by itself, and how each database reclaims it

Every database here keeps files it manages on its own, with defaults that keep them in bounds. These are the limits each project documents.

Default sizes of files databases manage themselves
  • PostgreSQL write-ahead log target1,024 MB
  • MySQL binary log file, before a new one1,024 MB
  • PostgreSQL log kept for reuse80 MB
  • MySQL temporary tablespace at start12 MB
  • SQLite -wal file at checkpoint3.9 MB

Defaults from PostgreSQL 18, MySQL 8.4 and SQLite's documentation, not measurements. PostgreSQL's target is soft, MySQL keeps binary logs for 30 days, and SQLite's figure is 1,000 pages of 4,096 bytes.

These are starting points, not ceilings. Several MySQL binary logs can exist at once, PostgreSQL can pass its target, and both Redis's and MongoDB's files follow the size of your data.

What growsDatabaseHow it comes back
pg_walPostgreSQLAutomatic at checkpoints; remove stale replication slots
Dead rows in tablesPostgreSQLAutomatic vacuum for reuse; a full vacuum returns it
Binary logsMySQLAutomatic after 30 days; MySQL's purge statement
ibtmp1MySQLRestart the server
Append-only fileRedisAutomatic rewrite
Freed space in collectionsMongoDBCompact, or drop the collection
-wal fileSQLiteCheckpoint and close; vacuum for free pages
Server logsPostgreSQL, MySQL, Redis, MongoDBStop the server, move the log to the Trash

Dump files you made yourself

Dumps, exports and copies made before an upgrade are ordinary files: .sql, .dump, .rdb or archives of them. They often end up in Downloads or in project folders and stay long after they've done their job.

They may also be the only copy of something. Open or check each one before it goes. The post on finding large files shows how to search Finder by size and kind.

Before you remove any database

Every way of freeing space in this post either removes data or rewrites it. A few minutes of checking first is cheaper than restoring a database you needed.

Questions to answer first

  1. Which server is it, and is it running? Stop it before touching its folder, in its app or with Homebrew's services.
  2. Does a project still point at it? Look at the project's settings, such as config/database.yml in a Rails app, settings.py in a Django project, or a DATABASE_URL line in an environment file.
  3. Is there a copy? If the data came from somewhere else, such as a shared test dump, you may be able to get it again. If you made it here, a dump is the only copy.
  4. Are you removing one database or a whole server? Dropping a database in a database app is narrower than moving a data folder, and leaves the server working.

What each action costs

ActionWhat you loseCan you undo it?
Move a stopped server's data folder to the TrashEvery database in itYes, until you empty the Trash
Drop a database or collection in a database appThat database or collectionNo
Purge MySQL's binary logsRecovery to points before themNo
Run a full vacuum, compact or SQLite's vacuumNothing but the free spaceNothing to undo
Restart MySQL to shrink ibtmp1NothingNothing to undo
Remove a volume in Docker DesktopThe database in itNo

The Trash is the only step here with a way back, which is one more reason to remove a whole stopped server's folder in Finder rather than reach for commands.

Keep a dump somewhere else

A dump in the same folder you're removing goes to the Trash with it. Keep dumps with your other files, or on another disk, and name them with the database and the date so you can tell later what each one is.

Mistakes to avoid

A database's folder looks like any other folder in Finder, which is what makes these mistakes easy.

Don't move a data folder while the server runs

The server keeps its files open and writes to them constantly. Moving the folder, or anything in it, while it runs can corrupt the database. Stop the server first, in its app or with Homebrew's services.

Don't delete log files the database needs

pg_wal, MySQL's binary logs and SQLite's -wal files all have "log" in their names, and none of them is a log in the sense of a text record you can discard. Each is part of how the database keeps your data safe. Server logs, the text files listed in the first table, are the ones you can clear.

Don't press Initialize Database to free space

MySQL's preference pane recreates the data folder when you press it. Every database goes with it.

Don't assume uninstalling removes data

Homebrew and Postgres.app keep data folders after you remove the software, so that an uninstall never costs you a database. That's the safe default, and it's also why those folders outlive the servers that made them.

Don't touch apps' own databases

The SQLite files in your Library belong to Photos, Mail, Safari and every other app. They're not caches, and removing one can lose an app's library or history. Manage that data in the app, or see the post on Application Support for what's safe there.

How the app does it

Wombit shows these folders on its map, with sizes in which hard links and APFS clones count once. Select one to see what it is and what removing it would cost. It reads only names, sizes and dates, never what's inside a database, and file names and paths never leave your Mac.

Databases are data, and the app treats them that way:

  • Postgres.app's folder and other apps' databases are inside Application Support, which is Review first. The app explains them and says to manage the data in the app that made it; nothing starts checked.
  • Database servers installed with Homebrew are part of the Cellar, also Review first, explained with Homebrew's own way to uninstall them.
  • Databases in Docker are inside Docker's disk file, which is Usually safe: the app explains what's inside and never moves the file.

Data folders in /opt/homebrew/var and SQLite files in your projects have no catalog entry, so they're never offered for removal. On a Mac with Apple Intelligence, the inspector can give a Best guess at what one is, labelled as a guess.

  • ~/Library/Application Support/*

    Application Support folders

    Data that apps create and manage for you, such as libraries, databases, downloads and settings, in a folder for each app.

    Review first · Explained only: the app shows you how

  • /opt/homebrew/Cellar

    Homebrew Cellar

    Command-line tools and libraries installed with Homebrew, in one folder for each package and version.

    Review first · Explained only: never removed

  • ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

    Docker Desktop disk image (Docker.raw)

    The virtual disk where Docker Desktop keeps all your images, containers, volumes and build cache.

    Usually safe · Runs docker --context desktop-linux builder prune --force

Seeing and explaining all of this is free. The app doesn't remove any of these databases itself; it points to each tool's own way. Cleanup, for the caches and build files the catalog marks removable, is PRO, one $4.99 payment with lifetime access.

Every Pro tool's review is free to open, so you see what would go and why before you buy.

Frequently asked questions

Where is the Postgres data folder on a Mac?

Postgres.app keeps each server's data in ~/Library/Application Support/Postgres, in a folder named var- and the major version, such as var-17. Homebrew's PostgreSQL keeps it in /opt/homebrew/var, in a folder such as postgresql@17, or under /usr/local/var on an Intel Mac.

Why is my pg_wal folder so big?

PostgreSQL aims to keep its write-ahead log under 1 GB by default, but that's a soft target. A replication slot nobody reads, failing log archiving or a setting that keeps extra log can make it grow far beyond that. Fix the cause and PostgreSQL removes the old files at its next checkpoint; never delete them by hand.

Can I delete MySQL binlog files on my Mac?

MySQL removes binary logs older than 30 days by itself, when it starts or moves to a new log file. Its manual says you can delete them by hand, but that its own purge statement is better because it also updates the index of logs. If nothing replicates from your Mac, its configuration can keep them for less time or turn them off.

Does uninstalling Postgres.app delete my databases?

No. Dragging Postgres.app to the Trash leaves your data in ~/Library/Application Support/Postgres, and its documentation makes deleting that folder an optional step. Make a dump of anything you might want before you remove it.

Why didn't deleting data make my database smaller?

PostgreSQL, MySQL's shared tablespace, MongoDB and SQLite all keep freed space inside their files to reuse for new data. Each has its own way to give it back to the Mac: a full vacuum in PostgreSQL, compact in MongoDB, and a vacuum in SQLite. Dropping a whole database or table frees its files straight away.

Is it safe to delete Redis's dump.rdb file?

Only if you don't need what's in Redis. With the server stopped, Redis starts empty without it; with the server running, it writes a new one from memory at its next save. Copying the file first is safe, even while Redis runs.

What are .db-wal and .db-shm files on my Mac?

They belong to a SQLite database in write-ahead log mode: the -wal file holds recent changes and the -shm file indexes it. SQLite usually deletes both when the last connection closes. Never delete a -wal file by hand, because committed changes can be lost.

Does uninstalling PostgreSQL with Homebrew remove the data?

No. Homebrew removes the server but leaves its data folder in /opt/homebrew/var, so an uninstall never costs you a database. Remove that folder yourself, with the server stopped, once you're sure you don't need it.

Sources

  1. Go directly to a specific folder on Mac · Apple
  2. Installing and uninstalling Postgres.app · Postgres.app
  3. WAL configuration · PostgreSQL
  4. The binary log · MySQL
  5. Redis persistence · Redis
  6. Write-ahead logging · SQLite