Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
OVSQLITE(5)		   InterNetNews Documentation		     OVSQLITE(5)

NAME
     ovsqlite - SQLite-based overview storage method for INN

DESCRIPTION
     This  method uses SQLite to store overview data.  It requires version 3.8.2
     or later of the SQLite library (3.20.0+ recommended).

     SQLite	source,     documentation,     etc.	are	available     at
     <https://www.sqlite.org/>.   Ones	of  the  stated goals of the SQLite file
     format are long-term stability and compatibility, which make  that  storage
     method a perfect choice to store overview data.

     Only  one protocol version of the ovsqlite storage method currently exists,
     implemented since INN 2.7.0.

     This method comes with a support utility (ovsqlite-util) and a Perl  module
     ("INN::ovsqlite_client")  which  permit accessing and manipulating overview
     information.  See their manual pages for more details about their possibil-
     ities.

INSTALLATION
     The configure script will automatically enable ovsqlite support if it finds
     the SQLite library.  If the library isn't installed in a standard location,
     you may have to specify the --with-sqlite3 option to  help  configure  find
     it.  For complicated cases, you can use separate --with-sqlite3-include and
     --with-sqlite3-lib  options.   Finally,  if you don't want ovsqlite support
     even when your system has the SQLite  library,  you  can  use  the  --with-
     out-sqlite3 option.

     If  you have a recent Linux installation, SQLite is most likely already in-
     stalled.  You may have to install a separate package with a name similar to
     "libsqlite3-dev" to get the required header files.

     Plan on needing at least 0.93 KB for  every  article  in  your  spool  (not
     counting  crossposts).   So, if you have 5 million articles, you'll need at
     least 4.65 GB of disk space for ovsqlite.	With compression  enabled,  this
     estimate  changes	to  0.4 KB  per article, so you'll need at least 2 GB of
     disk space for 5 million articles.  Plus, you'll need additional space  for
     transaction  logs	(a  few  MB,  or up to a few hundred MB temporarily with
     walmode enabled).

CONFIGURATION
     To select ovsqlite as your overview method, set the ovmethod  parameter  in
     inn.conf to "ovsqlite".  The database file will be created in the directory
     specified	by  the pathoverview parameter in inn.conf.  Restart INN to take
     the change into account (after having rebuilt your existing  overview  with
     makehistory, if needed).

     These  additional	parameters are read from the ovsqlite.conf configuration
     file:

     cachesize
	 The SQLite in-memory page cache size in  kilobytes  for  the  ovsqlite-
	 server  write	daemon.   The default value is left up to the SQLite li-
	 brary and seems to be stable at 2000 KB.

     compress
	 If INN was built with zlib support and this parameter is true, ovsqlite
	 will compress overview records whenever this saves space.  This parame-
	 ter is consulted only when creating a new database.  Enabling	compres-
	 sion saves about 55 % of disk space on standard overview data.  The de-
	 fault value is false.

     mmapsize
	 The  maximum number of bytes of the database file that SQLite will mem-
	 ory-map.  When set, SQLite reads data directly from the operating  sys-
	 tem's	page  cache  via  mmap	instead  of copying it into its own page
	 cache, which can significantly improve read performance for large data-
	 bases.  When walmode is enabled, nnrpd reader processes honor this set-
	 ting too, which additionally lets them share physical memory pages  for
	 the  same  database  regions through the operating system's page cache.
	 This is of little benefit on ZFS or others  without  a  unified  buffer
	 cache,  where	the  mapped  pages would simply be cached twice.  A good
	 starting value is the size of the database file or the amount of avail-
	 able memory, whichever is smaller.  For example, a value of  4294967296
	 allows up to 4 GB to be memory-mapped.  The default value of 0 disables
	 memory-mapped I/O.

     walmode
	 If  this parameter is true, ovsqlite will use SQLite's WAL (Write-Ahead
	 Logging) journal mode instead of PERSIST mode.  WAL mode allows concur-
	 rent readers and writers without blocking, which significantly improves
	 read performance when multiple  nnrpd	processes  access  the	overview
	 database simultaneously.  It also sets "synchronous" to "NORMAL", which
	 is safe with WAL and reduces unnecessary fsync overhead.

	 On  shutdown,	the WAL is checkpointed back into the main database file
	 and truncated.

	 Note: WAL mode requires shared-memory support and does not work on net-
	 work filesystems such as NFS when innd and nnrpd  are	not  exclusively
	 run  on  one mount consumer.  Disable this parameter if pathoverview is
	 shared on a network filesystem between two different hosts.

	 The default value is true.

     readercachesize
	 The SQLite in-memory page cache size in kilobytes for each nnrpd reader
	 process.  When walmode is enabled, nnrpd processes  open  the	overview
	 database  directly  for  read-only  access,  bypassing ovsqlite-server.
	 This eliminates the IPC overhead and allows reads  to	scale  with  the
	 number  of reader processes.  Each nnrpd process gets its own cache, so
	 this value should typically be smaller or equal to cachesize.	The  op-
	 erating  system's  file  cache  (or ZFS ARC) serves as a shared second-
	 level cache across all readers.

	 Direct reader mode is only activated when walmode is enabled.	 Without
	 WAL,  writers take exclusive locks that would block direct readers dur-
	 ing commits, so the server path is used instead.  The default value  is
	 2000 (about 2 MB).

     walcheckpointthreshold
	 The  WAL page count at which ovsqlite-server forces a checkpoint.  When
	 the WAL grows beyond this many pages, the server  performs  a	TRUNCATE
	 checkpoint  during  its  next idle period, waiting up to 10 seconds for
	 readers to finish their current queries  before  flushing  WAL  content
	 back  to  the database file.  This prevents unbounded WAL growth and is
	 no worse than the non-WAL path where every commit  takes  an  exclusive
	 lock.	 If  readers do not finish within the timeout, the checkpoint is
	 skipped and retried on the next idle cycle.

	 This parameter is only effective when walmode is enabled.  The  default
	 value is 1000.

     pagesize
	 The  SQLite database page size in bytes.  Must be a power of 2, minimum
	 512, maximum 65536.  Appropriate values include the virtual memory page
	 size and the filesystem allocation block size.  This parameter is  con-
	 sulted only when creating a new database.  The default value is left up
	 to the SQLite library and varies between versions.

     transrowlimit
	 The maximum number of article rows that can be inserted or deleted in a
	 single SQL transaction.  The default value is 10000.

     transtimelimit
	 The  maximum SQL transaction lifetime in seconds.  The default value is
	 10.

     A transaction occurs every transrowlimit articles	or  transtimelimit  sec-
     onds,  whichever  is smaller.  You are encouraged to keep the default value
     for row limits and, instead, adjust the time limit according  to  how  many
     articles  your  news server usually accepts per second during normal opera-
     tion (you can find statistics about incoming articles in your daily  Usenet
     reports).	 Inserting  or	deleting  a database row within a transaction is
     very fast whereas committing a transaction is slow, especially on	rotating
     storage.	Setting  transaction  limits  too low leads to poor performance.
     When rebuilding overview data, it may be worth  temporarily  raising  these
     values on systems with slow CPU or rotating storage (for instance, multiply
     by 10 the default values).  Performance won't change much on fast systems.

RUNNING
     Write  operations	(article  ingest,  expiration)	go through the ovsqlite-
     server daemon.  For ordinary operation, rc.news will start and stop it  au-
     tomatically.   If	you want to touch the overview database while innd isn't
     running,  you'll  have  to  start	ovsqlite-server  manually  first.    See
     ovsqlite-server(8).

     When  walmode is enabled, nnrpd reader processes open the overview database
     directly with read-only access, bypassing ovsqlite-server for  read  opera-
     tions.  This eliminates the IPC round-trip and server serialization bottle-
     neck,  allowing  read  performance  to  scale with the number of concurrent
     readers.

HISTORY
     Initial  implementation  of  ovsqlite  written  by  Bo  Lindbergh	 <2bfjd-
     sla52kztwejndzdstsxl9athp@gmail.com> for InterNetNews.

SEE ALSO
     INN::ovsqlite_client(3pm), inn.conf(5), makehistory(8), ovsqlite-server(8),
     ovsqlite-util(8), rc.news(8).

INN 2.8.0			   2026-06-13			     OVSQLITE(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ovsqlite&sektion=5&manpath=FreeBSD+Ports+15.1.quarterly>

home | help