[409] | 1 | -- OSGeo4W64\apps\alkis-import-dev\postprocessing.d\9_optimize.sql |
---|
| 2 | -- Optimieren von ALKIS-Datenbanken aus PostNAS. |
---|
| 3 | -- Optionaler Schritt nach dem Laden oder Aktualisieren. |
---|
| 4 | -- Ziel ist die Reduzierung des Speicherplatzes und die Verbesserung der Verarbeitungs-Geschwindigkeit. |
---|
| 5 | |
---|
| 6 | -- 2018-10-29 krz Mi-Ra/Li: Idee "Clustering" aus der PostNAS-Sitzung. |
---|
| 7 | |
---|
| 8 | SELECT 'Optimierung der Datenbank lÀuft ...' AS info; |
---|
| 9 | |
---|
| 10 | -- Anzeige der GröÃe der Datenbank vor der Optimierung. |
---|
| 11 | -- https://www.postgresql.org/docs/current/static/functions-admin.html |
---|
| 12 | SELECT pg_database_size(:'DBNAME') AS db_groesse_vorher; |
---|
| 13 | |
---|
| 14 | |
---|
| 15 | -- Wenn keine historischen Objekte verwendet werden sollen, dann können alle Objekte gelöscht werden, |
---|
| 16 | -- die einen Eintrag in der Spalte "endet" haben (endet IS NULL). |
---|
| 17 | -- Sollte auskommentiert werden, wenn im NBA-Verfahren bewusst die Abgabeart "3100 fallbezogen (mit Historie)" verwendet wird |
---|
| 18 | -- und die historischen Objekte von der Anwendung gefiltert angezeigt werden können. |
---|
| 19 | SELECT alkis_delete_all_endet(); |
---|
| 20 | |
---|
| 21 | |
---|
| 22 | -- Der Konverter ogr2ogr/NAS liest in einem zweiten Durchlauf durch die NAS-Datei die |
---|
| 23 | -- DatensÀtze mit den Operationen DELETE, REPLACE und UPDATE. |
---|
[412] | 24 | -- Diese SÀtze werden in die Tabelle "delete" eingefÌgt, wo sie Ìber einen Datenbank-Trigger die FortfÌhrung der Objekt-Tabellen auslösen. |
---|
[409] | 25 | -- Danach können die SÀtze der delete-Tabelle wieder gelöscht werden. |
---|
| 26 | TRUNCATE delete; |
---|
| 27 | |
---|
| 28 | |
---|
| 29 | -- Die Tabelle "alkis_beziehungen" hat in einer frÃŒhen Version des Konverters die Beziehungen zwischen ALKIS-Objekten abgebildet. |
---|
| 30 | -- Sie wurde ersetzt durch direkte Relationn zwischen den Objekt-Tabellen. |
---|
| 31 | -- Die Tabelle "alkis_beziehungen" sollte von auswertenden Programmen nicht mehr verwendet werden. |
---|
| 32 | -- Falls sie vom Konverter (Importer) noch gefÌllt wird, kann der Inhalt gelöscht werden. |
---|
| 33 | -- Der Befehl TRUNCATE ist schneller, kann aber nur vom EigentÃŒmer verwendet werden. Ggf. ersetzen durch "DELETE". |
---|
| 34 | TRUNCATE alkis_beziehungen; |
---|
| 35 | --DELETE FROM alkis_beziehungen; |
---|
| 36 | |
---|
| 37 | |
---|
| 38 | -- Wie lange soll das Protokoll gespeichert bleiben? |
---|
[412] | 39 | -- Selektiv "alte" EintrÀge entfernen. |
---|
[409] | 40 | -- ts timestamp without time zone DEFAULT now(), |
---|
| 41 | SELECT 'Importlog vom ' || date(min(ts)) || ' bis ' || date(max(ts)) AS vorher FROM alkis_importlog; |
---|
| 42 | DELETE FROM alkis_importlog WHERE (current_timestamp - ts) > interval '62 days'; -- ca. 2 Monate |
---|
| 43 | SELECT 'Importlog vom ' || date(min(ts)) || ' bis ' || date(max(ts)) AS nachher FROM alkis_importlog; |
---|
| 44 | |
---|
| 45 | |
---|
[412] | 46 | -- C l u s t e r n einiger Tabellen wie im Schritt postcreate.d definiert. |
---|
[409] | 47 | -- -------------------------------------------------------------------------- |
---|
| 48 | -- https://www.postgresql.org/docs/9.4/static/sql-cluster.html |
---|
| 49 | -- CLUSTER [VERBOSE] table_name [ USING index_name ] |
---|
| 50 | |
---|
| 51 | CLUSTER ; |
---|
| 52 | |
---|
| 53 | |
---|
| 54 | -- Reorganisation des Speichers. |
---|
| 55 | -- Dauert je nach DB-GröÃe einen Weile. Die Datenbank is wÀhrend dieser Zeit nur eingeschrÀnkt benutzbar. |
---|
| 56 | VACUUM full; |
---|
| 57 | |
---|
| 58 | |
---|
| 59 | -- GröÃe der Datenbank nach der Optimierung anzeigen. |
---|
| 60 | SELECT pg_database_size(:'DBNAME') AS db_groesse_nachher; |
---|
| 61 | |
---|
| 62 | -- ENDE -- |
---|