diff options
-rw-r--r-- | guix-data-service/jobs/load-new-guix-revision.scm | 16 | ||||
-rw-r--r-- | guix-data-service/model/derivation.scm | 65 |
2 files changed, 80 insertions, 1 deletions
diff --git a/guix-data-service/jobs/load-new-guix-revision.scm b/guix-data-service/jobs/load-new-guix-revision.scm index f60eaad..c1c27af 100644 --- a/guix-data-service/jobs/load-new-guix-revision.scm +++ b/guix-data-service/jobs/load-new-guix-revision.scm @@ -2142,6 +2142,22 @@ SKIP LOCKED") "vacuuming package derivations by guix revision range table" (vacuum-package-derivations-table conn)) + (with-time-logging + "update-derivation-inputs-statistics" + (update-derivation-inputs-statistics conn)) + + (with-time-logging + "vacuum-derivation-inputs-table" + (vacuum-derivation-inputs-table conn)) + + (with-time-logging + "update-derivation-outputs-statistics" + (update-derivation-outputs-statistics conn)) + + (with-time-logging + "vacuum-derivation-outputs-table" + (vacuum-derivation-outputs-table conn)) + #t) (begin (exec-query conn "ROLLBACK") diff --git a/guix-data-service/model/derivation.scm b/guix-data-service/model/derivation.scm index 7a4b214..05cb9ea 100644 --- a/guix-data-service/model/derivation.scm +++ b/guix-data-service/model/derivation.scm @@ -19,6 +19,7 @@ #:use-module (srfi srfi-1) #:use-module (ice-9 vlist) #:use-module (ice-9 match) + #:use-module (ice-9 format) #:use-module (ice-9 binary-ports) #:use-module (rnrs bytevectors) #:use-module (gcrypt hash) @@ -61,7 +62,11 @@ select-existing-derivations select-derivations-by-id select-derivations-and-build-status - derivation-file-names->derivation-ids)) + derivation-file-names->derivation-ids + update-derivation-inputs-statistics + vacuum-derivation-inputs-table + update-derivation-outputs-statistics + vacuum-derivation-outputs-table)) (define (valid-targets conn) '("arm-linux-gnueabihf" @@ -1917,3 +1922,61 @@ INNER JOIN derivation_source_files (insert-source-files-missing-nars all-ids)) all-ids))))) + +(define (update-derivation-inputs-statistics conn) + (let ((query + " +SELECT COUNT(DISTINCT derivation_id), COUNT(DISTINCT derivation_output_id) +FROM derivation_inputs")) + + (match (exec-query conn query) + (((derivation_id_count derivation_output_id_count)) + + (exec-query + conn + (simple-format + #f + " +ALTER TABLE derivation_inputs + ALTER COLUMN derivation_id + SET (n_distinct = ~A)" + derivation_id_count)) + + (exec-query + conn + (simple-format + #f + " +ALTER TABLE derivation_inputs + ALTER COLUMN derivation_output_id + SET (n_distinct = ~A)" + derivation_output_id_count)))))) + +(define (vacuum-derivation-inputs-table conn) + (exec-query + conn + "VACUUM (VERBOSE, ANALYZE) derivation_inputs")) + +(define (update-derivation-outputs-statistics conn) + (let ((query + " +SELECT COUNT(DISTINCT derivation_id), COUNT(*) FROM derivation_outputs")) + + (match (exec-query conn query) + (((derivation_id_count all_count)) + + (exec-query + conn + (format + #f + " +ALTER TABLE derivation_outputs + ALTER COLUMN derivation_id + SET (n_distinct = ~7f)" + (* -1 (/ (string->number derivation_id_count) + (string->number all_count))))))))) + +(define (vacuum-derivation-outputs-table conn) + (exec-query + conn + "VACUUM (VERBOSE, ANALYZE) derivation_outputs")) |