Dan Kennedy wrote: > On 11/18/2015 03:37 PM, T?r?k Edwin wrote: >> On 11/17/2015 12:11 AM, Deon Brewis wrote: >>> We found that using SQLITE memory mapped I/O (mmap_size > 0) in OSX isn't >>> usable in any way shape or form. It will inevitably lead to catalog >>> corruption if you hard-reboot OSX, even without the database or application >>> open. >>> >> I tried to turn on mmap I/O in SQLite 3.9.1 in our application on CentOS 7 >> and Debian Jessie, but after 24-48h of continous writes to the DB I always >> get a corruption: >> SQLite result 0xb: database corruption at line 76915 of [767c1727fe] >> SQLite result 0xb: statement aborts at 10: [DELETE FROM revision_blocks >> WHERE revision_id=:revision_id] >> Query "DELETE FROM revision_blocks WHERE revision_id=:revision_id" failed: >> (code 0xb: database disk image is malformed) database disk image is malformed >> >> After this 'pragma integrity check' says: >> row 90814 missing from index sqlite_autoindex_revision_ops_1 >> wrong # of entries in index sqlite_autoindex_revision_ops_1 >> row 1046646 missing from index idx_revmap >> row 1046646 missing from index sqlite_autoindex_revision_blocks_1 >> wrong # of entries in index idx_revmap >> wrong # of entries in index sqlite_autoindex_revision_blocks_1 >> >> There are not reboots involved, just multiple processes accessing a WAL DB. >> Without mmap I/O I've never seen corrupted DBs in our application. > > As of yesterday, SQLite uses a read-only mapping in mmap mode. The db file is > written using plain old write(), just as in non-mmap mode:
That's the safest way to use mmap, but keep in mind that this requires a unified buffer cache and systems like OpenBSD still don't have that, so this approach will cause corruptions on systems like that. > > http://sqlite.org/src/info/67c5d3c646c8198c > > It would be interesting to know if this clears the problem in your > environment. -- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/