This is an automated email from the ASF dual-hosted git repository.
wohali pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb-documentation.git
The following commit(s) were added to refs/heads/main by this push:
new c212c63 Reorganise db/view compaction section, closes #321 (#638)
c212c63 is described below
commit c212c63ab75cf448e2327174b5d5b39828c9341f
Author: Joan Touzet <[email protected]>
AuthorDate: Tue Mar 30 17:03:27 2021 +0000
Reorganise db/view compaction section, closes #321 (#638)
---
src/maintenance/compaction.rst | 305 +++++++++++++++++++++--------------------
1 file changed, 155 insertions(+), 150 deletions(-)
diff --git a/src/maintenance/compaction.rst b/src/maintenance/compaction.rst
index bc2e46d..973afb3 100644
--- a/src/maintenance/compaction.rst
+++ b/src/maintenance/compaction.rst
@@ -16,164 +16,25 @@
Compaction
==========
-The `compaction` operation is the way to reduce disk space usage by removing
+The `compaction` operation is a way to reduce disk space usage by removing
unused and old data from database or view index files. This operation is very
similar to the `vacuum` (`SQLite`_ ex.) operation available for other database
management systems.
.. _SQLite: http://www.sqlite.org/lang_vacuum.html
-During compaction of the `target` CouchDB creates new file with the
``.compact``
-extension and transfers only actual data into. Because of this, CouchDB checks
-first for the available disk space - it should be *twice greater* than the
-compacted file's data.
+During compaction, CouchDB re-creates the database or view in a new file
+with the ``.compact`` extension. As this requires roughly twice the disk
storage,
+CouchDB first checks for available disk space before proceeding.
-When all actual data is successfully transferred to the `compacted` file
CouchDB
-replaces the `target` with the `compacted` file.
+When all actual data is successfully transferred to the newly compacted file,
+CouchDB transparently swaps the compacted file into service, and removes the
+old database or view file.
-.. _compact/db:
-
-Database Compaction
-===================
-
-Database compaction compresses the database file by removing unused file
-sections created during updates. Old documents revisions are replaced with
-small amount of metadata called `tombstone` which are used for conflicts
-resolution during replication. The number of stored revisions
-(and their `tombstones`) can be configured by using the :get:`_revs_limit
-</{db}/_revs_limit>` URL endpoint.
-
-Compaction can be manually triggered per database and runs as a background
-task. To start it for specific database there is need to send HTTP
-:post:`/{db}/_compact` sub-resource of the target database::
-
- curl -H "Content-Type: application/json" -X POST
http://localhost:5984/my_db/_compact
-
-On success, HTTP status :statuscode:`202` is returned immediately:
-
-.. code-block:: http
-
- HTTP/1.1 202 Accepted
- Cache-Control: must-revalidate
- Content-Length: 12
- Content-Type: text/plain; charset=utf-8
- Date: Wed, 19 Jun 2013 09:43:52 GMT
- Server: CouchDB (Erlang/OTP)
-
-.. code-block:: javascript
-
- {"ok":true}
-
-Although the request body is not used you must still specify
-:header:`Content-Type` header with :mimetype:`application/json` value
-for the request. If you don't, you will be aware about with HTTP status
-:statuscode:`415` response:
-
-.. code-block:: http
-
- HTTP/1.1 415 Unsupported Media Type
- Cache-Control: must-revalidate
- Content-Length: 78
- Content-Type: application/json
- Date: Wed, 19 Jun 2013 09:43:44 GMT
- Server: CouchDB (Erlang/OTP)
-
- {"error":"bad_content_type","reason":"Content-Type must be
application/json"}
-
-When the compaction is successful started and running it is possible to get
-information about it via :ref:`database information resource <api/db>`::
-
- curl http://localhost:5984/my_db
-
-.. code-block:: http
-
- HTTP/1.1 200 OK
- Cache-Control: must-revalidate
- Content-Length: 246
- Content-Type: application/json
- Date: Wed, 19 Jun 2013 16:51:20 GMT
- Server: CouchDB (Erlang/OTP)
-
- {
- "committed_update_seq": 76215,
- "compact_running": true,
- "db_name": "my_db",
- "disk_format_version": 6,
- "doc_count": 5091,
- "doc_del_count": 0,
- "instance_start_time": "0",
- "purge_seq": 0,
- "sizes": {
- "active": 3787996,
- "disk": 17703025,
- "external": 4763321
- },
- "update_seq": 76215
- }
-
-Note that ``compact_running`` field is ``true`` indicating that compaction
-is actually running. To track the compaction progress you may query the
-:get:`_active_tasks </_active_tasks>` resource::
-
- curl http://localhost:5984/_active_tasks
-
-.. code-block:: http
-
- HTTP/1.1 200 OK
- Cache-Control: must-revalidate
- Content-Length: 175
- Content-Type: application/json
- Date: Wed, 19 Jun 2013 16:27:23 GMT
- Server: CouchDB (Erlang/OTP)
-
- [
- {
- "changes_done": 44461,
- "database": "my_db",
- "pid": "<0.218.0>",
- "progress": 58,
- "started_on": 1371659228,
- "total_changes": 76215,
- "type": "database_compaction",
- "updated_on": 1371659241
- }
- ]
-
-.. _compact/views:
-
-Views Compaction
-================
-
-`Views` are also need compaction like databases, unlike databases views
-are compacted by groups per `design document`. To start their compaction there
-is need to send HTTP :post:`/{db}/_compact/{ddoc}` request::
-
- curl -H "Content-Type: application/json" -X POST
http://localhost:5984/dbname/_compact/designname
-
-.. code-block:: javascript
-
- {"ok":true}
-
-This compacts the view index from the current version of the specified design
-document. The HTTP response code is :statuscode:`202`
-(like :ref:`compaction for databases <compact/db>`) and a compaction background
-task will be created.
-
-.. _compact/views/cleanup:
-
-Views cleanup
--------------
-
-View indexes on disk are named after their `MD5` hash of the view definition.
-When you change a view, old indexes remain on disk. To clean up all outdated
-view indexes (files named after the MD5 representation of views, that does not
-exist anymore) you can trigger a :ref:`view cleanup <api/db/view_cleanup>`::
-
- curl -H "Content-Type: application/json" -X POST
http://localhost:5984/dbname/_view_cleanup
-
-.. code-block:: javascript
-
- {"ok":true}
+Since CouchDB 2.1.1, automated compaction is enabled by default, and is
+described in the next section. It is still possible to trigger manual
+compaction if desired or necessary. This is described in the subsequent
+sections.
.. _compact/auto:
@@ -333,3 +194,147 @@ database-specific thresholds as in the ``mydb`` setting
above. Rather, channels
can be configured to focus on specific classes of files: large databases, small
view indexes, and so on. Most cases of named database compaction rules can be
expressed using properties of those databases and/or their associated views.
+
+.. _compact/db:
+
+Manual Database Compaction
+==========================
+
+Database compaction compresses the database file by removing unused file
+sections created during updates. Old documents revisions are replaced with
+small amount of metadata called `tombstone` which are used for conflicts
+resolution during replication. The number of stored revisions
+(and their `tombstones`) can be configured by using the :get:`_revs_limit
+</{db}/_revs_limit>` URL endpoint.
+
+Compaction can be manually triggered per database and runs as a background
+task. To start it for specific database there is need to send HTTP
+:post:`/{db}/_compact` sub-resource of the target database::
+
+ curl -H "Content-Type: application/json" -X POST
http://localhost:5984/my_db/_compact
+
+On success, HTTP status :statuscode:`202` is returned immediately:
+
+.. code-block:: http
+
+ HTTP/1.1 202 Accepted
+ Cache-Control: must-revalidate
+ Content-Length: 12
+ Content-Type: text/plain; charset=utf-8
+ Date: Wed, 19 Jun 2013 09:43:52 GMT
+ Server: CouchDB (Erlang/OTP)
+
+.. code-block:: javascript
+
+ {"ok":true}
+
+Although the request body is not used you must still specify
+:header:`Content-Type` header with :mimetype:`application/json` value
+for the request. If you don't, you will be aware about with HTTP status
+:statuscode:`415` response:
+
+.. code-block:: http
+
+ HTTP/1.1 415 Unsupported Media Type
+ Cache-Control: must-revalidate
+ Content-Length: 78
+ Content-Type: application/json
+ Date: Wed, 19 Jun 2013 09:43:44 GMT
+ Server: CouchDB (Erlang/OTP)
+
+ {"error":"bad_content_type","reason":"Content-Type must be
application/json"}
+
+When the compaction is successful started and running it is possible to get
+information about it via :ref:`database information resource <api/db>`::
+
+ curl http://localhost:5984/my_db
+
+.. code-block:: http
+
+ HTTP/1.1 200 OK
+ Cache-Control: must-revalidate
+ Content-Length: 246
+ Content-Type: application/json
+ Date: Wed, 19 Jun 2013 16:51:20 GMT
+ Server: CouchDB (Erlang/OTP)
+
+ {
+ "committed_update_seq": 76215,
+ "compact_running": true,
+ "db_name": "my_db",
+ "disk_format_version": 6,
+ "doc_count": 5091,
+ "doc_del_count": 0,
+ "instance_start_time": "0",
+ "purge_seq": 0,
+ "sizes": {
+ "active": 3787996,
+ "disk": 17703025,
+ "external": 4763321
+ },
+ "update_seq": 76215
+ }
+
+Note that ``compact_running`` field is ``true`` indicating that compaction
+is actually running. To track the compaction progress you may query the
+:get:`_active_tasks </_active_tasks>` resource::
+
+ curl http://localhost:5984/_active_tasks
+
+.. code-block:: http
+
+ HTTP/1.1 200 OK
+ Cache-Control: must-revalidate
+ Content-Length: 175
+ Content-Type: application/json
+ Date: Wed, 19 Jun 2013 16:27:23 GMT
+ Server: CouchDB (Erlang/OTP)
+
+ [
+ {
+ "changes_done": 44461,
+ "database": "my_db",
+ "pid": "<0.218.0>",
+ "progress": 58,
+ "started_on": 1371659228,
+ "total_changes": 76215,
+ "type": "database_compaction",
+ "updated_on": 1371659241
+ }
+ ]
+
+.. _compact/views:
+
+Manual View Compaction
+======================
+
+`Views` also need compaction. Unlike databases, views are compacted by groups
+per `design document`. To start their compaction, send the HTTP
+:post:`/{db}/_compact/{ddoc}` request::
+
+ curl -H "Content-Type: application/json" -X POST
http://localhost:5984/dbname/_compact/designname
+
+.. code-block:: javascript
+
+ {"ok":true}
+
+This compacts the view index from the current version of the specified design
+document. The HTTP response code is :statuscode:`202`
+(like :ref:`compaction for databases <compact/db>`) and a compaction background
+task will be created.
+
+.. _compact/views/cleanup:
+
+Views cleanup
+-------------
+
+View indexes on disk are named after their `MD5` hash of the view definition.
+When you change a view, old indexes remain on disk. To clean up all outdated
+view indexes (files named after the MD5 representation of views, that does not
+exist anymore) you can trigger a :ref:`view cleanup <api/db/view_cleanup>`::
+
+ curl -H "Content-Type: application/json" -X POST
http://localhost:5984/dbname/_view_cleanup
+
+.. code-block:: javascript
+
+ {"ok":true}