Dear SQL Developers / Users,

I haven't found the solution for WAL file increase issue. Below is the summary 
of my issue. The email thread is added for additional information as asked by 
Simon.


I am using Sqlite3 in our project. My database has journal_mode set to WAL and 
has one writer & multiple readers. During normal mode of operation, only 
writing process is accessing database and there is no active reader connection

I have observed that when I don’t have any primary key in the database table 
then WAL auto_checkpoint doesn’t work and WAL file keeps growing without any 
bound. At one point, it consumes all the available memory in the system.



I have tried different approaches to fix this issue like setting up 
SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT  = 0, setting 
SQLITE_DEFAULT_WAL_AUTOCHECKPOINT = 100 etc. but nothing worked. I have 
confirmed in my code that auto_checkpoint is not disabled. I have referred to 
information on the link 
https://www.sqlite.org/wal.html#avoiding_excessively_large_wal_files too and 
made sure that any of these cases are not happening with my code

Write-Ahead 
Logging<https://www.sqlite.org/wal.html#avoiding_excessively_large_wal_files>
www.sqlite.org
1. Overview. The default method by which SQLite implements atomic commit and 
rollback is a rollback journal.Beginning with version 3.7.0 (2010-07-21), a new 
"Write-Ahead Log" option (hereafter referred to as "WAL") is available.. There 
are advantages and disadvantages to using WAL instead of a rollback journal.



Another approach, I have tried is that to manually checkpoint WAL file in 
another process at regular interval. This seems to work for me as WAL file 
doesn’t grow beyond specified limit. But I don’t want to do manual checkpoint 
in my code



I want to know why auto_checkpoint is not working when there is no Primary Key 
in the table. FYI, when I make first column as Primary Key in the table then 
auto_checkpoint starts working with the same code. That’s why I am doubting 
some relation between auto_checkpoint and Primary Key.



I checked the documentation on https://www.sqlite.org/wal.html#ckpt and didn’t 
find any reference of Primary Key and WAL file.

Write-Ahead Logging<https://www.sqlite.org/wal.html#ckpt>
www.sqlite.org
1. Overview. The default method by which SQLite implements atomic commit and 
rollback is a rollback journal.Beginning with version 3.7.0 (2010-07-21), a new 
"Write-Ahead Log" option (hereafter referred to as "WAL") is available.. There 
are advantages and disadvantages to using WAL instead of a rollback journal.





I request to please share what could be the reason for auto_checkpoint not 
working in WAL mode. I will appreciate help on this.



Thanks for your help in advance.



Regards,

Tanuj Sharma

________________________________
From: sqlite-users <[email protected]> on behalf of 
Sharma, Tanuj [AUTOSOL/FMP/IN] <[email protected]>
Sent: Thursday, November 15, 2018 8:45 AM
To: SQLite mailing list
Subject: Re: [sqlite] [EXTERNAL] Re: WAL file size increase

Hello Simon,

Thanks for looking into my issue.

>> If, during your testing,  you're using existing database files, please 
>> create new ones each time.
I am not sure if I understood this suggestion. After making my code changes, I 
creates a new database file in WAL mode and still observed the issue. I cannot 
create new database file when system is running as the data in database is 
non-volatile in nature

>> Can you please publish your schemae ?  Just paste them into an answer.
I have six tables in database and below is the schema for each of these tables.
CREATE TABLE DB_TYPE_1 (Point INTEGER PRIMARY KEY, val BLOB)
CREATE TABLE LOG_TYPE_1 (seq_number INTEGER, timestamp INTEGER, val BLOB, flags 
INTEGER)
CREATE TABLE LOG_TYPE_2 (seq_number INTEGER, timestamp INTEGER, val BLOB, flags 
INTEGER)
CREATE TABLE LOG_TYPE_3 (seq_number INTEGER, timestamp INTEGER, val BLOB)
CREATE TABLE LOG_TYPE_4 (seq_number INTEGER, timestamp INTEGER, val BLOB)
CREATE TABLE LOG_TYPE_5 (seq_number INTEGER, timestamp INTEGER, val BLOB)

I have created indexes on seq_number and timestamp column for LOG_TYPE_* tables.

>> Are you defining transactions (with BEGIN) or letting SQLite do it for each 
>> INSERT ?
Yes, I am using "BEGIN TRANSACTION" and "COMMIT TRANSACTION" in my code. I 
don’t know much about this as this piece of code is legacy

>> Do you have any UPDATE or DELETE commands, or just INSERT ?
For LOG_TYPE tables, I am using INSERT or RELACE command. I am using following 
command since database tables are of fixed size. Once entries reach maximum 
point, then application starts overwriting last records.
"INSERT OR REPLACE INTO LOG_TYPE_1 (rowid, seq_number, timestamp, val) VALUES 
(?, ?, ?, ?)"

For DB_TYPE_1 table also , I am using INSERT or RELACE command.
" INSERT OR REPLACE INTO DB_TYPE_1 (point, val) values (?, ?)"


Regards,
Tanuj Sharma

-----Original Message-----
From: sqlite-users <[email protected]> On Behalf Of 
Simon Slavin
Sent: 14 November 2018 10:11
To: SQLite mailing list <[email protected]>
Subject: [EXTERNAL] Re: [sqlite] WAL file size increase

On 14 Nov 2018, at 4:20am, Sharma, Tanuj [AUTOSOL/FMP/IN] 
<[email protected]> wrote:

> I want to know why auto_checkpoint is not working when there is no Primary 
> Key in the table.

If, during your testing,  you're using existing database files, please create 
new ones each time.

Can you please publish your schemae ?  Just paste them into an answer.

Are you defining transactions (with BEGIN) or letting SQLite do it for each 
INSERT ?

Do you have any UPDATE or DELETE commands, or just INSERT ?

Simon.
_______________________________________________
sqlite-users mailing list
[email protected]
https://urldefense.proofpoint.com/v2/url?u=http-3A__mailinglists.sqlite.org_cgi-2Dbin_mailman_listinfo_sqlite-2Dusers&d=DwIGaQ&c=jOURTkCZzT8tVB5xPEYIm3YJGoxoTaQsQPzPKJGaWbo&r=_gjw_zrI4ADZe7LuhFpe8zUXhlmZyMwy8JPAklVQDxc&m=SpLorZc8tHx50vw-G_xBiLaCT2T2AqURz2BEf1p3vk8&s=rXsfHNEgx8sCbeH4fOmHbxpz4Z-4UVNj5y4VROL9o3g&e=

_______________________________________________
sqlite-users mailing list
[email protected]
https://urldefense.proofpoint.com/v2/url?u=http-3A__mailinglists.sqlite.org_cgi-2Dbin_mailman_listinfo_sqlite-2Dusers&d=DwIGaQ&c=jOURTkCZzT8tVB5xPEYIm3YJGoxoTaQsQPzPKJGaWbo&r=_gjw_zrI4ADZe7LuhFpe8zUXhlmZyMwy8JPAklVQDxc&m=C98HL1PpGIVYgbLtwcf0JsoDUXCW_D2Q5HbHV2h0BIg&s=gJJfUl2gYDt77ADrKTADvQm_KAusOg4eOcGee9qxrQg&e=

_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to