diff --git a/bitbake/lib/prserv/db.py b/bitbake/lib/prserv/db.py
index b4bda7078cd..8ee8d458194 100644
--- a/bitbake/lib/prserv/db.py
+++ b/bitbake/lib/prserv/db.py
@@ -9,6 +9,7 @@ import os.path
 import errno
 import prserv
 import time
+from contextlib import closing
 
 try:
     import sqlite3
@@ -62,21 +63,18 @@ class PRTable(object):
         end = start + 20
         while True:
             try:
-                return self.conn.execute(*query)
+                with closing(self.conn.cursor()) as cursor:
+                    return cursor.execute(*query)
             except sqlite3.OperationalError as exc:
                 if 'is locked' in str(exc) and end > time.time():
                     continue
                 raise exc
 
     def sync(self):
-        if not self.read_only:
-            self.conn.commit()
-            self._execute("BEGIN EXCLUSIVE TRANSACTION")
+        pass
 
     def sync_if_dirty(self):
-        if self.dirty:
-            self.sync()
-            self.dirty = False
+        pass
 
     def _getValueHist(self, version, pkgarch, checksum):
         data=self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table,
@@ -292,11 +290,10 @@ class PRData(object):
                 raise e
         uri = "file:%s%s" % (self.filename, "?mode=ro" if self.read_only else "")
         logger.debug("Opening PRServ database '%s'" % (uri))
-        self.connection=sqlite3.connect(uri, uri=True, isolation_level="EXCLUSIVE", check_same_thread = False)
+        self.connection=sqlite3.connect(uri, uri=True)
         self.connection.row_factory=sqlite3.Row
-        if not self.read_only:
-            self.connection.execute("pragma synchronous = off;")
-            self.connection.execute("PRAGMA journal_mode = MEMORY;")
+        self.connection.execute("pragma synchronous = off;")
+        self.connection.execute("PRAGMA journal_mode = WAL;")
         self._tables={}
 
     def disconnect(self):
