mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-05-30 23:40:40 +02:00
[Enhancement]: Allow adjustment of SQLITE PRAGMA values #2437
Closed
opened 2026-04-25 00:07:08 +02:00 by adam
·
10 comments
No Branch/Tag Specified
master
book_tags_genres_dedupe
episode_download_fallback
Issue-4540-SortBy-StartedDate-and-FinishedDate
episode_meta_tagging
fix_authorize_race_condition
redirect_transcode_requests
progress_updated_sort
fix_ereader_socket_event
fix_change_empty_root_password
fix_podcast_session_track_index
fix_set_token
session_modal_user
localize_durations
fix_oidc_create_user
jwt_auth_refactor
fix_scanner_deleting_single_file_books
fix_mediaprogress_updatedat_2
experimental_next_client
podcast_episode_duration
episode-timestamps-clickable
book_author_secondary_sort_title
podcast_useragents
pathexists_user_access
fix_pathexists_join
book_author_secondary_sort
clean_duplicate_mediaprogress
sanitize_html_description
trix_prevent_attachments
check_path_api_fix
fix_mediaprogress_updatedat
increase_express_json_limit
fix_dockerfile_nunicode
search_episodes
audiobook_tools_update
episode_secondary_sorts
hls_stream_url_update
new_session_track_endpoint
audiobook_tools_enhancements
watcher_rescans_update
player_track_tooltip
fix_exclude_prefixes_crash
socket_item_events
fix_podcast_episode_scanner_promise
new_stats_controller
count_cache_for_userpermissions
parsing-opf-v3
validate_migration_files
fix-quick-match-all-crash
fix-chapter-end-sleep-timer
stringify_sequelize_query
remove-col-ambiguity
fix_next_prev_edit_description
details_trim_whitespace
fix_content_url_basepath
fix_logger_fatal
progress_bar_visibility
batch-edit-populate-map-details
feed_generator_updates
bookmark-modal-updates
migrate-library-item-in-scanner
migrate-new-library-items
migrate-podcasts-new-library-item-2
migrate-podcasts-new-library-item
fix-remove-episode-from-playlist
playback-session-use-new-library-item
refactor-library-item
fix-heatmap-caption
feed-episodes-upsert
share-media-player-media-session-api
remove-old-playlist
remove_old_collection_object
plugin-implementation-demo
feed_migration
refactor-feeds-from-item
fix_remove_authors_no_books
v2.17.3-fk-constraints-migration
migrations-first-upgrade
sqlite_2
feature/nuxt-target-server
waveform
sqlite
playlists
video
v2.35.1
v2.35.0
v2.34.0
v2.33.2
v2.33.1
v2.33.0
v2.32.1
v2.32.0
v2.31.0
v2.30.0
v2.29.0
v2.28.0
v2.27.0
v2.26.3
v2.26.2
v2.26.1
v2.26.0
v2.25.1
v2.25.0
v2.24.0
v2.23.0
v2.22.0
v2.21.0
v2.20.0
v2.19.5
v2.19.4
v2.19.3
v2.19.2
v2.19.1
v2.19.0
v2.18.1
v2.18.0
v2.17.7
v2.17.6
v2.17.5
v2.17.4
v2.17.3
v2.17.2
v2.17.1
v2.17.0
v2.16.2
v2.16.1
v2.16.0
v2.15.1
v2.15.0
v2.14.0
v2.13.4
v2.13.3
v2.13.2
v2.13.1
v2.13.0
v2.12.3
v2.12.2
v2.12.1
v2.12.0
v2.11.0
v2.10.1
v2.10.0
v2.9.0
v2.8.1
v2.8.0
v2.7.2
v2.7.1
v2.7.0
v2.6.0
v2.5.0
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.23
v2.2.22
v2.2.21
v2.2.20
v2.2.19
v2.2.18
v2.2.17
v2.2.16
v2.2.15
v2.2.14
v2.2.13
v2.2.12
v2.2.11
v2.2.10
v2.2.9
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.5
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.24
v2.0.23
v2.0.22
v2.0.21
v2.0.20
v2.0.19
v2.0.18
v2.0.17
v2.0.16
v2.0.15
v2.0.14
v2.0.13
v2.0.12
v2.0.11
v2.0.10
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v1.7.2
v1.7.1
v1.7.0
v1.6.0
v1.5.5
v1.5.0
v1.4.11
v1.4.9
v1.4.7
v1.4.6
v1.4.4
v1.4.2
v1.4.0
v1.4.1
v1.3.4
v1.3.3
v1.3.1
v1.2.8
v1.2.6
v1.2.5
v1.2.4
v1.2.1
v1.1.15
v1.1.14
v1.1.13
v1.1.12
v1.1.11
v1.1.10
v1.1.9
v1.1.8
v1.0.0
0.9.61-beta.0
0.9.61-beta
Labels
Clear labels
authentication
backlog
bug
chapter editor
config-issue
ebooks
encoding/embedding
enhancement
help wanted
listening sessions & progress
planned
possible plugin
progress sync
pull-request
sorting/filtering/searching
unable to reproduce
upload
users & permissions
waiting
Mirrored from GitHub Pull Request
No Label
enhancement
Milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
adam (Adam Melkus)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/audiobookshelf#2437
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @PhantomPhoton on GitHub (Dec 27, 2024).
Type of Enhancement
None
Describe the Feature/Enhancement
I would like to adjust some PRAGMA values for the sqlite database.
Why would this be helpful?
My podcast library is fairly large and it takes approximately 20 seconds to load each "page" on the library view. Adjusting mmap_size to
268435456(256 megabytes) reduces the latency of the query to approximately 3 seconds per "page". Myabsdatabase.sqlitefile is approximately 150 megabytes.I've tested this via using the
sqlite3command line which running the query before the change matches pretty closely the latency being reported by AudioBookShelf.Future Implementation (Screenshot)
Optionally a list of values that would be able to be adjusted or a freeform text box allowing a list of values to be set that is run on every newly created connection. The majority of the PRAGMA values are specific to the connection and won't persist once the connection is closed.
Audiobookshelf Server Version
v2.17.5
Current Implementation (Screenshot)
No response
@nichwall commented on GitHub (Dec 27, 2024):
Out of curiosity, what was the mmap size before you changed it?
@PhantomPhoton commented on GitHub (Dec 27, 2024):
It's zero, which has mmap disabled.
@mikiher commented on GitHub (Dec 29, 2024):
Would it make sense to make some of these PRAGMA values default for everyone? Do you have any suggestions?
@PhantomPhoton commented on GitHub (Dec 29, 2024):
I think ideally a few could make sense.
PRAGMA temp_store = 2Use memory backed temporary tables rather than writing them to disk. This is less impacting for people with their database on a fast SSD, but depending on the queries, could be impactful for people with a database on a traditional hard drive
PRAGMA cache_size = -some_valueBy default, the cache_size is set to
-2000, which the cache size is limited to 2048000 bytes of memory. ~2 megabytes isn't that much, my podcastEpisode table is over 80 megabytes, perSELECT name, SUM("pgsize") FROM "dbstat" GROUP BY nameI'm using-262144in my testing (256 megabytes) to match the size of the mmap value I'm using.PRAGMA mmap_size = 268435456And of course the mmap value. Strictly speaking, it's best to have a larger mmap value than the size of the database. It basically allows the kernel to bypass a huge amount of layers and speeds up reads and writes to the file dramatically, however, you should have enough free memory to fix it all, as if it starts to swap, you've in a worst performance path then just using the standard file operations.
I ran my library query as a test for different sizes of mmap
I don't know if the project has a target amount of ram to fit into. If I had to pick, I'd pick a mmap value that is larger then the database first, followed by the memory temp_store and then finally increasing the cache size.
@mikiher commented on GitHub (Dec 29, 2024):
Thanks for the suggestions, I will look into these.
In the meantime, will a setting through an environment variable be OK for you? That is easier than adding a full UI (which will also likely not be used by many).
Audiobookshelf opens a single Sequelize instance (which opens connections to SQLite under the hood) that lives throughout the server's lifetime, so PRAGMA settings would be done at initialization and would not change until the server is shutdown.
@PhantomPhoton commented on GitHub (Dec 29, 2024):
I think environment variables would be perfect. I agree that adding a full UI seems overkill for the feature. Most people won't be changing the values, doubly so if there's some reasonable defaults being set.
@mikiher commented on GitHub (Jan 3, 2025):
I'm working on some query optimizations. Since you seem to know your way around querying the db, can you please also share the sizes (number oh entries) of your Podcasts and PodcastEpisodes tables?
@PhantomPhoton commented on GitHub (Jan 5, 2025):
717 Podcasts with 35204 Episodes.
@PhantomPhoton commented on GitHub (Jan 21, 2025):
So I patched in some hardcoded pragma values in Database.js
And can confirm that I'm seeing the same speed up inside of Audiobookshelf that I saw from the sqlite command line interface. It's a really nice speed improvement.
Just wanted to share that I've confirmed that on my setup it helps a lot :)
@github-actions[bot] commented on GitHub (Feb 2, 2025):
Fixed in v2.19.0.