Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
7d8dd5c
Generated documentation, scipt and console app to export data neccesa…
May 28, 2026
35b2ce1
Adjusted A2Parties table to handle SelfIdentified users having partyu…
May 28, 2026
794beec
Various corrections after initial coderabbit review.
May 28, 2026
424b440
Cleanup of various issue; including fixing proper cursor for export.
May 28, 2026
1905fd3
minor tweaks, added test script for export query so I can manually te…
May 28, 2026
b24755c
fixes some sql syntas issues, added manual test scripts
May 28, 2026
e6f58ba
handle edge cases for index creation
May 28, 2026
ad7cb68
Misc optimizations after creating indexes and testing queries manually.
Jun 2, 2026
8e608aa
various attempts to tweak and test
Jun 3, 2026
ed447d1
fix comments from coderabbit
Jun 3, 2026
2c43cfe
more fix
Jun 3, 2026
b8b2c92
more testing
Jun 3, 2026
a4997e6
Updates after massive testing of export for issue 1716, should be pro…
Jun 5, 2026
6ccdfa7
updates after comments from Coderabbits
Jun 5, 2026
b0ea142
more fixes
Jun 7, 2026
9e3e14f
Fix broken syntax of export script.
Jun 8, 2026
c81321b
changed cursor usage to per-status
Jun 8, 2026
52b434d
Additional troubleshooting and optimization.
Jun 9, 2026
169d26a
Improved status logging.
Jun 9, 2026
31ee9fc
Tweaks after feedback from Coderabbit.
Jun 9, 2026
7034317
Updated for optimized Issue 1951.
Jun 16, 2026
7cfb8ca
cleanup documentation
Jun 18, 2026
4c9f7e4
tweaked export with abillity to have a delay between each export to a…
Jun 18, 2026
3f0ea46
Major documentation cleanup.
Jun 18, 2026
0ebf622
minor fixes to documentation and cleanup-scripts.
Jun 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 86 additions & 1 deletion Altinn.Correspondence.sln
Original file line number Diff line number Diff line change
Expand Up @@ -21,53 +21,138 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Altinn.Correspondence.Commo
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Altinn.Correspondence.LoadTests.DatabasePopulater", "Test\Altinn.Correspondence.LoadTests.DatabasePopulater\Altinn.Correspondence.LoadTests.DatabasePopulater.csproj", "{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{07C2787E-EAC7-C090-1BA3-A61EC2A24D84}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Altinn.Correspondence.DialogActivityExporter", "tools\Altinn.Correspondence.DialogActivityExporter\Altinn.Correspondence.DialogActivityExporter.csproj", "{2228175C-EBE9-4085-B083-F78BCD021BAE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Debug|x64.ActiveCfg = Debug|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Debug|x64.Build.0 = Debug|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Debug|x86.ActiveCfg = Debug|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Debug|x86.Build.0 = Debug|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Release|Any CPU.Build.0 = Release|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Release|x64.ActiveCfg = Release|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Release|x64.Build.0 = Release|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Release|x86.ActiveCfg = Release|Any CPU
{28B9820A-981B-4AED-BA75-B43D9BEFCFF9}.Release|x86.Build.0 = Release|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Debug|x64.ActiveCfg = Debug|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Debug|x64.Build.0 = Debug|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Debug|x86.ActiveCfg = Debug|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Debug|x86.Build.0 = Debug|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Release|Any CPU.Build.0 = Release|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Release|x64.ActiveCfg = Release|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Release|x64.Build.0 = Release|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Release|x86.ActiveCfg = Release|Any CPU
{F7FC66C9-8BA5-4E3F-913B-0624CDE9C65A}.Release|x86.Build.0 = Release|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Debug|x64.ActiveCfg = Debug|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Debug|x64.Build.0 = Debug|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Debug|x86.ActiveCfg = Debug|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Debug|x86.Build.0 = Debug|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Release|Any CPU.Build.0 = Release|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Release|x64.ActiveCfg = Release|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Release|x64.Build.0 = Release|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Release|x86.ActiveCfg = Release|Any CPU
{D139FEEB-DAC3-4874-9608-CF8801F1C0C2}.Release|x86.Build.0 = Release|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Debug|x64.ActiveCfg = Debug|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Debug|x64.Build.0 = Debug|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Debug|x86.ActiveCfg = Debug|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Debug|x86.Build.0 = Debug|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Release|Any CPU.Build.0 = Release|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Release|x64.ActiveCfg = Release|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Release|x64.Build.0 = Release|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Release|x86.ActiveCfg = Release|Any CPU
{820A2274-CE87-40D5-B173-CCBC3E805D9C}.Release|x86.Build.0 = Release|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Debug|x64.ActiveCfg = Debug|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Debug|x64.Build.0 = Debug|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Debug|x86.ActiveCfg = Debug|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Debug|x86.Build.0 = Debug|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Release|Any CPU.Build.0 = Release|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Release|x64.ActiveCfg = Release|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Release|x64.Build.0 = Release|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Release|x86.ActiveCfg = Release|Any CPU
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC}.Release|x86.Build.0 = Release|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Debug|x64.ActiveCfg = Debug|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Debug|x64.Build.0 = Debug|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Debug|x86.ActiveCfg = Debug|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Debug|x86.Build.0 = Debug|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Release|Any CPU.Build.0 = Release|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Release|x64.ActiveCfg = Release|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Release|x64.Build.0 = Release|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Release|x86.ActiveCfg = Release|Any CPU
{5C88BAAD-CF82-4D7A-8FB6-879605EF4E03}.Release|x86.Build.0 = Release|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Debug|x64.ActiveCfg = Debug|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Debug|x64.Build.0 = Debug|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Debug|x86.ActiveCfg = Debug|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Debug|x86.Build.0 = Debug|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Release|Any CPU.Build.0 = Release|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Release|x64.ActiveCfg = Release|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Release|x64.Build.0 = Release|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Release|x86.ActiveCfg = Release|Any CPU
{AC3CF570-F9E1-4616-A56B-FF94C89CBC0B}.Release|x86.Build.0 = Release|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Debug|x64.ActiveCfg = Debug|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Debug|x64.Build.0 = Debug|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Debug|x86.ActiveCfg = Debug|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Debug|x86.Build.0 = Debug|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Release|Any CPU.Build.0 = Release|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Release|x64.ActiveCfg = Release|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Release|x64.Build.0 = Release|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Release|x86.ActiveCfg = Release|Any CPU
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD}.Release|x86.Build.0 = Release|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Debug|x64.ActiveCfg = Debug|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Debug|x64.Build.0 = Debug|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Debug|x86.ActiveCfg = Debug|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Debug|x86.Build.0 = Debug|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Release|Any CPU.Build.0 = Release|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Release|x64.ActiveCfg = Release|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Release|x64.Build.0 = Release|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Release|x86.ActiveCfg = Release|Any CPU
{2228175C-EBE9-4085-B083-F78BCD021BAE}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{D78A36B1-D457-4FF7-B01E-82A0C3C64EDC} = {DC791FEF-108F-4773-8B84-56986CB90767}
{3E5EEBF3-366E-48F8-9D57-1975F95D4FAD} = {DC791FEF-108F-4773-8B84-56986CB90767}
{2228175C-EBE9-4085-B083-F78BCD021BAE} = {07C2787E-EAC7-C090-1BA3-A61EC2A24D84}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3508DF12-D3DE-4956-ABAB-31D7321B72C7}
EndGlobalSection
EndGlobal
EndGlobal
91 changes: 91 additions & 0 deletions docs/database/Check_Disk_Space_And_Table_Stats.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
-- =====================================================================================
-- Check Disk Space and Table Statistics
-- =====================================================================================
-- For use BEFORE creating large indexes on 1.94 billion row table
-- =====================================================================================

-- 1. Check available disk space
SELECT
pg_tablespace_name(oid) AS tablespace,
pg_size_pretty(pg_tablespace_size(oid)) AS size
FROM pg_tablespace;

-- 2. Current CorrespondenceStatuses table size
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size,
pg_size_pretty(pg_relation_size(relid)) AS table_size,
pg_size_pretty(pg_indexes_size(relid)) AS indexes_size,
n_live_tup AS live_rows,
n_dead_tup AS dead_rows,
ROUND(100.0 * n_dead_tup / NULLIF(n_live_tup + n_dead_tup, 0), 2) AS dead_row_pct
FROM pg_stat_user_tables
WHERE schemaname = 'correspondence'
AND tablename = 'CorrespondenceStatuses';

-- 3. Existing indexes on CorrespondenceStatuses
SELECT
schemaname,
tablename,
indexname,
pg_size_pretty(pg_relation_size(indexrelid)) AS index_size,
idx_scan AS times_used,
idx_tup_read AS tuples_read,
idx_tup_fetch AS tuples_fetched
FROM pg_stat_user_indexes
WHERE schemaname = 'correspondence'
AND tablename = 'CorrespondenceStatuses'
ORDER BY pg_relation_size(indexrelid) DESC;

-- 4. Estimate new index sizes (rough calculation)
-- Based on 1.94B total rows:
-- - Issue #1716 (SyncedFromAltinn2 IS NOT NULL): ~1% = ~19M rows → ~3 GB
-- - Issue #1951 (SyncedFromAltinn2 IS NULL): ~15% = ~300M rows → ~24 GB
SELECT
'Estimated disk space needed for new indexes:' AS info,
'3 GB (Issue #1716) + 24 GB (Issue #1951) = ~27 GB' AS estimate,
'Plus 50% temp space during creation = ~40 GB total' AS with_temp;

-- 5. Check if table needs VACUUM
SELECT
schemaname,
tablename,
last_vacuum,
last_autovacuum,
n_dead_tup,
n_mod_since_analyze,
CASE
WHEN n_dead_tup > 1000000 THEN 'VACUUM RECOMMENDED'
ELSE 'OK'
END AS vacuum_recommendation
FROM pg_stat_user_tables
WHERE schemaname = 'correspondence'
AND tablename = 'CorrespondenceStatuses';

-- 6. Current database size
SELECT
pg_database.datname,
pg_size_pretty(pg_database_size(pg_database.datname)) AS size
FROM pg_database
WHERE datname = current_database();

-- =====================================================================================
-- Recommendations based on 1.94 billion rows:
-- =====================================================================================
--
-- DISK SPACE:
-- - Ensure at least 50 GB free space (27 GB indexes + 20 GB temp + buffer)
-- - Monitor disk space during creation with: df -h (Linux) or Get-PSDrive (PowerShell)
--
-- TIMING:
-- - Index #1 (Issue #1716): 1-2 hours (currently running)
-- - Index #2 (Issue #1951): 6-10 hours (run overnight or maintenance window)
Comment thread
RagnarFatland marked this conversation as resolved.
--
-- PERFORMANCE:
-- - Set maintenance_work_mem = '4GB' before creating Index #2
-- - Run VACUUM ANALYZE if dead_row_pct > 5%
-- - Schedule during lowest traffic period
-- - Consider pausing ETL/batch jobs during creation
--
-- =====================================================================================
Loading
Loading