MainframeSupports
tip uge 23/2000:

Moderne informationsteknologi baseret på DB2 udmærker sig ofte ved at have fuld historik på data. Men på et eller andet tidspunkt finder man ud af, at det er tid til at rydde lidt op. Og det sker typisk for at få bedre performance. Men selve sletningen viser sig ofte at være en rigtig tung sag.

Hvis man baserer sine tabeller på partitionerede tablespaces, så er der hjælp at hente i en ny parameter kaldet LOCKPART YES. LOCKPART YES sættes med ALTER TABLESPACE og kræver, at tablespacet er stoppet, mens ALTER udføres. Herefter er det til gengæld muligt at udstede en LOCK TABLE med en PART parameter på.

Lad os antage, at vi har en DB2-tabel i et partitioneret tablespace med 5 partitioner, hvor selve partitioneringen ikke er efter alder. Vi ønsker nu at slette alle rækker, der er over 3 år gamle med SQL. Før LOCKPART YES kunne dette kun ske ved et stort tablespacescan hen over samtlige partitioner. Efter kan det lade sig gøre med 5 parallelt udførte scans på hver sin partition.

Tricket ligger i at udstede en LOCK TABLE med PART parameter på efterfulgt af en DELETE FROM med en WHERE-clause, der begrænser sletningen til netop den partition, man har lavet LOCK TABLE på. Og dem kan man så lave 5 af parallelt. Man skal lige huske, at alle indexes på tabellen skal være type 2 indexes, ellers virker det ikke.

Sidste uges tip        Tip oversigten