changeset 22612:9cc4ce6f3920

lib-storage: Add settings to configure lib-index optimization parameters The defaults are expected to be pretty good, but these settings make it easier to test whether other values might be more optimal.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 09 Oct 2017 16:37:08 +0300
parents 65ada9976a7f
children bb127acc6c9b
files src/lib-storage/index/index-storage.c src/lib-storage/mail-storage-settings.c src/lib-storage/mail-storage-settings.h
diffstat 3 files changed, 64 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/index-storage.c	Mon Oct 09 15:37:51 2017 +0300
+++ b/src/lib-storage/index/index-storage.c	Mon Oct 09 16:37:08 2017 +0300
@@ -247,6 +247,29 @@
 	mail_index_set_lock_method(box->index,
 		box->storage->set->parsed_lock_method,
 		mail_storage_get_lock_timeout(box->storage, UINT_MAX));
+
+	const struct mail_storage_settings *set = box->storage->set;
+	struct mail_index_optimization_settings optimization_set = {
+		.index = {
+			.rewrite_min_log_bytes = set->mail_index_rewrite_min_log_bytes,
+			.rewrite_max_log_bytes = set->mail_index_rewrite_max_log_bytes,
+		},
+		.log = {
+			.min_size = set->mail_index_log_rotate_min_size,
+			.max_size = set->mail_index_log_rotate_max_size,
+			.min_age_secs = set->mail_index_log_rotate_min_age,
+			.log2_max_age_secs = set->mail_index_log2_max_age,
+		},
+		.cache = {
+			.unaccessed_field_drop_secs = set->mail_cache_unaccessed_field_drop,
+			.record_max_size = set->mail_cache_record_max_size,
+			.compress_min_size = set->mail_cache_compress_min_size,
+			.compress_delete_percentage = set->mail_cache_compress_delete_percentage,
+			.compress_continued_percentage = set->mail_cache_compress_continued_percentage,
+			.compress_header_continue_count = set->mail_cache_compress_header_continue_count,
+		},
+	};
+	mail_index_set_optimization_settings(box->index, &optimization_set);
 	return 0;
 }
 
--- a/src/lib-storage/mail-storage-settings.c	Mon Oct 09 15:37:51 2017 +0300
+++ b/src/lib-storage/mail-storage-settings.c	Mon Oct 09 16:37:08 2017 +0300
@@ -38,6 +38,18 @@
 	DEF(SET_STR, mail_server_comment),
 	DEF(SET_STR, mail_server_admin),
 	DEF(SET_UINT, mail_cache_min_mail_count),
+	DEF(SET_TIME, mail_cache_unaccessed_field_drop),
+	DEF(SET_SIZE, mail_cache_record_max_size),
+	DEF(SET_SIZE, mail_cache_compress_min_size),
+	DEF(SET_UINT, mail_cache_compress_delete_percentage),
+	DEF(SET_UINT, mail_cache_compress_continued_percentage),
+	DEF(SET_UINT, mail_cache_compress_header_continue_count),
+	DEF(SET_SIZE, mail_index_rewrite_min_log_bytes),
+	DEF(SET_SIZE, mail_index_rewrite_max_log_bytes),
+	DEF(SET_SIZE, mail_index_log_rotate_min_size),
+	DEF(SET_SIZE, mail_index_log_rotate_max_size),
+	DEF(SET_TIME, mail_index_log_rotate_min_age),
+	DEF(SET_TIME, mail_index_log2_max_age),
 	DEF(SET_TIME, mailbox_idle_check_interval),
 	DEF(SET_UINT, mail_max_keyword_length),
 	DEF(SET_TIME, mail_max_lock_timeout),
@@ -81,6 +93,18 @@
 	.mail_server_comment = "",
 	.mail_server_admin = "",
 	.mail_cache_min_mail_count = 0,
+	.mail_cache_unaccessed_field_drop = 60*60*24*30,
+	.mail_cache_record_max_size = 64 * 1024,
+	.mail_cache_compress_min_size = 32 * 1024,
+	.mail_cache_compress_delete_percentage = 20,
+	.mail_cache_compress_continued_percentage = 200,
+	.mail_cache_compress_header_continue_count = 4,
+	.mail_index_rewrite_min_log_bytes = 8 * 1024,
+	.mail_index_rewrite_max_log_bytes = 128 * 1024,
+	.mail_index_log_rotate_min_size = 32 * 1024,
+	.mail_index_log_rotate_max_size = 1024 * 1024,
+	.mail_index_log_rotate_min_age = 5 * 60,
+	.mail_index_log2_max_age = 3600 * 24 * 2,
 	.mailbox_idle_check_interval = 30,
 	.mail_max_keyword_length = 50,
 	.mail_max_lock_timeout = 0,
@@ -414,6 +438,11 @@
 		return FALSE;
 	}
 
+	if (set->mail_cache_compress_delete_percentage > 100) {
+		*error_r = "mail_cache_compress_delete_percentage can't be over 100";
+		return FALSE;
+	}
+
 	uidl_format_ok = FALSE;
 	for (p = set->pop3_uidl_format; *p != '\0'; p++) {
 		if (p[0] != '%' || p[1] == '\0')
--- a/src/lib-storage/mail-storage-settings.h	Mon Oct 09 15:37:51 2017 +0300
+++ b/src/lib-storage/mail-storage-settings.h	Mon Oct 09 16:37:08 2017 +0300
@@ -24,6 +24,18 @@
 	const char *mail_server_comment;
 	const char *mail_server_admin;
 	unsigned int mail_cache_min_mail_count;
+	unsigned int mail_cache_unaccessed_field_drop;
+	uoff_t mail_cache_record_max_size;
+	uoff_t mail_cache_compress_min_size;
+	unsigned int mail_cache_compress_delete_percentage;
+	unsigned int mail_cache_compress_continued_percentage;
+	unsigned int mail_cache_compress_header_continue_count;
+	uoff_t mail_index_rewrite_min_log_bytes;
+	uoff_t mail_index_rewrite_max_log_bytes;
+	uoff_t mail_index_log_rotate_min_size;
+	uoff_t mail_index_log_rotate_max_size;
+	unsigned int mail_index_log_rotate_min_age;
+	unsigned int mail_index_log2_max_age;
 	unsigned int mailbox_idle_check_interval;
 	unsigned int mail_max_keyword_length;
 	unsigned int mail_max_lock_timeout;