(internal): lower default value of org-roam-db-gc-threshold (#872)

The high value has been reported to cause significant slowdowns, so we
reset the default, and add documentation for its customization instead.
Ref #834
This commit is contained in:
Jethro Kuan
2020-06-28 15:16:14 +08:00
committed by GitHub
parent 610d4ced85
commit e33c3bcb3f
4 changed files with 56 additions and 3 deletions

View File

@ -831,6 +831,22 @@ checker, to perform autofixes for the errors. For each error detected,
=org-roam-doctor= will move the point to the current error, and pop-up a help =org-roam-doctor= will move the point to the current error, and pop-up a help
window displaying the error message, as well as the list of actions that can be window displaying the error message, as well as the list of actions that can be
taken provided in =:actions=. taken provided in =:actions=.
* Performance Optimization
** TODO Profiling Key Operations
** Garbage Collection
During the cache-build process, Org-roam generates a lot of in-memory
data-structures (such as the Org file's AST), which are discarded after use. These structures are garbage collected at regular intervals (see [[info:elisp#Garbage Collection][info:elisp#Garbage Collection]]).
Org-roam provides the option ~org-roam-db-gc-threshold~ to temporarily change
the threshold value for GC to be triggered during these memory-intensive
operations. To reduce the number of garbage collection processes, one may set
~org-roam-db-gc-threshold~ to a high value (such as ~most-positive-fixnum~):
#+BEGIN_SRC emacs-lisp
(setq org-roam-db-gc-threshold most-positive-fixnum)
#+END_SRC
* _ Copying * _ Copying
:PROPERTIES: :PROPERTIES:
:COPYING: t :COPYING: t

View File

@ -78,6 +78,7 @@ General Public License for more details.
* Roam Protocol:: * Roam Protocol::
* Daily Notes:: * Daily Notes::
* Diagnosing and Repairing Files:: * Diagnosing and Repairing Files::
* Performance Optimization::
* Appendix:: * Appendix::
* FAQ:: * FAQ::
@ -124,6 +125,11 @@ Roam Protocol
* The @samp{roam-file} protocol:: * The @samp{roam-file} protocol::
* The @samp{roam-ref} Protocol:: * The @samp{roam-ref} Protocol::
Performance Optimization
* Profiling Key Operations::
* Garbage Collection::
Appendix Appendix
* Note-taking Workflows:: * Note-taking Workflows::
@ -1128,6 +1134,32 @@ checker, to perform autofixes for the errors. For each error detected,
window displaying the error message, as well as the list of actions that can be window displaying the error message, as well as the list of actions that can be
taken provided in @samp{:actions}. taken provided in @samp{:actions}.
@node Performance Optimization
@chapter Performance Optimization
@menu
* Profiling Key Operations::
* Garbage Collection::
@end menu
@node Profiling Key Operations
@section @strong{TODO} Profiling Key Operations
@node Garbage Collection
@section Garbage Collection
During the cache-build process, Org-roam generates a lot of in-memory
data-structures (such as the Org file's AST), which are discarded after use. These structures are garbage collected at regular intervals (see @ref{Garbage Collection,info:elisp#Garbage Collection,,elisp,}).
Org-roam provides the option @code{org-roam-db-gc-threshold} to temporarily change
the threshold value for GC to be triggered during these memory-intensive
operations. To reduce the number of garbage collection processes, one may set
@code{org-roam-db-gc-threshold} to a high value (such as @code{most-positive-fixnum}):
@lisp
(setq org-roam-db-gc-threshold most-positive-fixnum)
@end lisp
@node Appendix @node Appendix
@chapter Appendix @chapter Appendix

View File

@ -60,13 +60,18 @@ when used with multiple Org-roam instances."
:type 'string :type 'string
:group 'org-roam) :group 'org-roam)
(defcustom org-roam-db-gc-threshold most-positive-fixnum (defcustom org-roam-db-gc-threshold gc-cons-threshold
"The value to temporarily set the `gc-cons-threshold' threshold to. "The value to temporarily set the `gc-cons-threshold' threshold to.
During large, heavy operations like `org-roam-db-build-cache', During large, heavy operations like `org-roam-db-build-cache',
many GC operations happen because of the large number of many GC operations happen because of the large number of
temporary structures generated (e.g. parsed ASTs). Temporarily temporary structures generated (e.g. parsed ASTs). Temporarily
increasing `gc-cons-threshold' will help reduce the number of GC increasing `gc-cons-threshold' will help reduce the number of GC
operations, at the cost of temporary memory usage." operations, at the cost of temporary memory usage.
This defaults to the original value of `gc-cons-threshold', but
tweaking this number may lead to better overall performance. For
example, to reduce the number of GCs, one may set it to a large
value like `most-positive-fixnum'."
:type 'int :type 'int
:group 'org-roam) :group 'org-roam)

View File

@ -45,7 +45,7 @@
(pcase (benchmark-run 1 (org-roam-db-build-cache t)) (pcase (benchmark-run 1 (org-roam-db-build-cache t))
(`(,time ,gcs ,time-in-gc) (`(,time ,gcs ,time-in-gc)
(message "Elapsed time: %fs (%fs in %d GCs)" time time-in-gc gcs) (message "Elapsed time: %fs (%fs in %d GCs)" time time-in-gc gcs)
(expect time :to-be-less-than 70)))) (expect time :to-be-less-than 90))))
(it "builds quickly without change" (it "builds quickly without change"
(pcase (benchmark-run 1 (org-roam-db-build-cache)) (pcase (benchmark-run 1 (org-roam-db-build-cache))
(`(,time ,gcs ,time-in-gc) (`(,time ,gcs ,time-in-gc)