diff --git a/README.md b/README.md
index b70034e1d9b27d8b01e73708744ecc9c8ecd1172..c6624eac6560f9f10d80fc5e7368cccefa362ed6 100644
--- a/README.md
+++ b/README.md
@@ -55,6 +55,7 @@ Then copy your resulting wheel and install it via pip on the target system.
 * added the context manager syntax to VarlenIterator
 * fixed a memory leak that happened during getting current value
     from an empty series
+* added `MemoryPressureManager` support for `Database`
 
 ## v0.6.1
 
diff --git a/setup.cfg b/setup.cfg
index 3e4aa7c5433a910ae72a0ab5e4a14f44da6c2622..3e4676bd3690e8ff241f3ef2d383e709d66b4443 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,7 +1,7 @@
 # coding: utf-8
 [metadata]
 name = tempsdb
-version = 0.6.2a3
+version = 0.6.2a4
 long-description = file: README.md
 long-description-content-type = text/markdown; charset=UTF-8
 license_files = LICENSE
diff --git a/tempsdb/database.pxd b/tempsdb/database.pxd
index 03b94beec0d87881a84c6b748f8daac218a4e757..24594a7434590859cfc677ffa0e791b6202491ab 100644
--- a/tempsdb/database.pxd
+++ b/tempsdb/database.pxd
@@ -6,11 +6,12 @@ cdef class Database:
         readonly str path
         bint closed
         object lock
-        object mpm
+        object mpm, mpm_handler
         dict open_series
         dict open_varlen_series
         readonly dict metadata
 
+    cpdef int checkpoint(self) except -1
     cpdef int reload_metadata(self) except -1
     cpdef int set_metadata(self, dict meta) except -1
     cpdef int close(self) except -1
diff --git a/tempsdb/database.pyx b/tempsdb/database.pyx
index 8bd7c3b93831e6e690f98b8526bbf3f5db255de4..7391449cee939b9568e1151c402d973904f125c6 100644
--- a/tempsdb/database.pyx
+++ b/tempsdb/database.pyx
@@ -38,6 +38,7 @@ cdef class Database:
         self.open_varlen_series = {}
         self.lock = threading.RLock()
         self.mpm = None
+        self.mpm_handler = None
         self.metadata = {}
         self.reload_metadata()
 
@@ -89,6 +90,24 @@ cdef class Database:
                         output.append(v_series)
         return output
 
+    cpdef int checkpoint(self) except -1:
+        """
+        Destroy closed series
+        """
+        cdef:
+            TimeSeries series
+            VarlenSeries v_series
+        with self.lock:
+            with DictDeleter(self.open_series) as dd:
+                for series in dd.values():
+                    if series.closed:
+                        dd.delete()
+            with DictDeleter(self.open_varlen_series) as dd:
+                for v_series in dd.values():
+                    if v_series.closed:
+                        dd.delete()
+        return 0
+
     cpdef int delete_series(self, str name) except -1:
         """
         Deletes a constant-length time series.
@@ -353,6 +372,7 @@ cdef class Database:
         cdef TimeSeries series
         for series in self.open_series.values():
             series.register_memory_pressure_manager(mpm)    # no-op if already closed
+        self.mpm_handler = mpm.register_on_entered_severity(1)(self.checkpoint)
         return 0
 
     def __del__(self):
@@ -378,6 +398,9 @@ cdef class Database:
                 var_series.close(True)
             self.open_varlen_series = {}
         self.closed = True
+        if self.mpm_handler is not None:
+            self.mpm_handler.cancel()
+            self.mpm_handler = None
         return 0