Deze query geeft per administratie het maximum van de documentbijlagen aan:
select ptn_name
, count(distinct tpn_version) version_cnt
, max(tpn_count_rows) tpn_count_rows
, max(round(tpn_estimated_size_characters/1e6, 0)) tpn_estimated_size_mb
from dc_table_partition_versions_r
where tbe_full_qualified_name = 'ExactOnlineREST.Documents.DocumentAttachmentFilesBulk'
and tpn_state != 'D'
group
by ptn_name
order
by tpn_estimated_size_mb desc
Een schatting voor het geheel kan dan met:
select sum(4 * 1.25 * tpn_estimated_size_mb)
from ( select ptn_name
, count(distinct tpn_version) version_cnt
, max(tpn_count_rows) tpn_count_rows
, max(round(tpn_estimated_size_characters/1e6, 0)) tpn_estimated_size_mb
from dc_table_partition_versions_r
where tbe_full_qualified_name = 'ExactOnlineREST.Documents.DocumentAttachmentFilesBulk'
and tpn_state != 'D'
group
by ptn_name
) t
De geschatte maximale omvang is 329 GB.
De feiten worden opgeslagen in de facts table:
select distinct tbe_facts_table_name
from dc_table_partition_versions_r
where tbe_full_qualified_name = 'ExactOnlineREST.Documents.DocumentAttachmentFilesBulk'
and tpn_state != 'D'
Zijnde dcd_nmr4a. In de Top Tables staat die voor 929 GB en 1 GB indexes met vrijwel geen Unused space, verspreid over 8,2 miljoen rijen:
De verwachting is echter 2,3 miljoen documenten,bepaalde met de volgende query:
select sum(4 * tpn_count_rows)
from ( select ptn_name
, count(distinct tpn_version) version_cnt
, max(tpn_count_rows) tpn_count_rows
, max(round(tpn_estimated_size_characters/1e6, 0)) tpn_estimated_size_mb
from dc_table_partition_versions_r
where tbe_full_qualified_name = 'ExactOnlineREST.Documents.DocumentAttachmentFilesBulk'
and tpn_state != 'D'
group
by ptn_name
) t
We selecteren een administratie 1246933 met 10.671 documenten / 926 MB volgens Data Replicator, gemiddeld elk <100 KB. De volgende query geeft aan dat er inderdaad 10.671 documenten in de Data Replicator versie staan:
select count(*)
from dcd_nmr4a
where tpn_id$ = 646561
De omvang van deze 10.671 klopt ongeveer:
select sum(Datalength(ddfb76cf6a2fac5e043ef62984f0b1) )/1e6
from dcd_nmr4a
where tpn_id$ = 646561
waar voor de documenten alleen al 789 MB uitkomt. De totale omvang is dan pakweg 800 MB, en dat is redelijk in de buurt van geschatte 926 MB volgens Data Replicator.
Vervolgens maken we een analyze per tabelpartitieversie met:
select tpn_id$
, sum(Datalength(ddfb76cf6a2fac5e043ef62984f0b1)) size_b
, count(*) cnt
into tmp_partition_sizes
from dcd_nmr4a
--where tpn_id$ = 646561
group
by tpn_id$
Hier komt een tabel tmp_partition_sizes
uit met per combinatie van administratie en versie van de data de omvang in bytes en het aantal documenten. Dit duurde nog geen minuut.
De volgende query correleert de inhoud van de database met het repository qua aantal rijen en aantal MB:
select coalesce(tpndisk.tpn_id$, tpndr.tpn_id) tpn_id
, case
when tpndisk.tpn_id$ is not null
then 'X'
else '-'
end
+ case
when tpndr.tpn_id is not null
then 'X'
else '-'
end
category
, round(tpndisk.size_b / 1e6, 0) disk_size_mb
, round(tpndr.tpn_estimated_size_characters / 1e6, 0) repository_size_mb
, tpndisk.cnt
, tpndr.tpn_count_rows
from tmp_partition_sizes tpndisk
full
outer
join ( select *
from dc_table_partition_versions_r tpndr
where tpndr.tbe_full_qualified_name = 'ExactOnlineREST.Documents.DocumentAttachmentFilesBulk'
and tpndr.tpn_state != 'D'
) tpndr
on tpndr.tpn_id = tpndisk.tpn_id$
Hier blijkt uit dat er veel tabelpartitieversies in de database staan die niet meer in het repository staan. De meest recente daarvan is van pakweg 28 oktober en enkele honderden zijn ouder. Deze tabelpartitieversies zijn niet terug te vinden in het repository bij dc_table_partition_versions
.
In de event logging is nog 1 rij terug te vinden over de meest recente overbodige tabelpartitieversie:
select *
from dc_event_log
where tpn_id=616104
itgendch193
Dropped table partition version ‘616.104 - Obsoleted v764 (table 76 - ExactOnlineREST.Documents.DocumentAttachmentFilesBulk, partition 69 - 2274689)’.
2021-11-05 14:42:23.497
Deleted no rows from facts table dcd_nmr4a since the MD5 hash is empty (ExactOnlineREST.Documents.DocumentAttachmentFilesBulk).
Free field 1: O
Free field 2: D
Free field 3: itgendch726
Hieruit volgt dat het verwijderen niet gedaan is omdat er volgens het repository geen gegevens waren geladen, zoals normaliter gesignaleerd wordt door de MD5 hash.
Het volgende statement maakt een lijst van op te ruimen tabelpartitieversies:
--
-- Create list of table partition version IDs to purge.
--
select distinct
tpn_id$
into tmp_tpn_to_purge
from dcd_nmr4a
where tpn_id$
not in
( select id
from dc_table_partition_versions
)
Het opruimen kan vervolgens in batches van 10.000 (ongeveer 1 GB aan documentbijlagen) met code zoals:
declare
@cnt int = 1;
begin
while @cnt != 0
begin
delete top(1000)
from dcd_nmr4a
where tpn_id$ in ( select tpn_id$ from tmp_tpn_to_purge )
;
set @cnt = @@rowcount;
print @cnt;
end;
end;