Delete/Insert vs Update

Massimiliano Valli

Delete/Insert vs Update

Buongiorno a tutti,

 

un nostro applicativo vorrebbe sosituire, all'interno di un programma cics, l'istruzione sql di update con una delete e insert. Secondo l'applicativo risulterebbe più performante.

L'oggetto db2 in questione è un ts segmented con 8 indici. Uno dei campi oggetto dell'update è contenuto in tutti gli 8 indici. Dimensionalmente la tabella contiene 16 milioni di righe.

Al momento siamo in db2 v11 CM.

 

Avete esperienze in merito?

Grazie in anticipo.  

Angelo Sironi

R: Delete/Insert vs Update
(in response to Massimiliano Valli)
Ciao Massimiliano,

io chiederei conto all’applicativo delle ragioni di questo suo convincimento….



Poi aggiungerei le seguenti considerazioni. Innanzitutto mi chiederei se è ragionevole che una colonna oggetto di aggiornamento (che immagino frequente o massiccio, altrimenti uno non si farebbe certe preoccupazioni…) sia presente in ben 8 indici sapendo che è oggetto di aggiornamento frequente e/o massiccio…. Perché è ovvio che se fosse presente “solo” in 5 indici la convinzione dell’applicativo sarebbe indubbiamente errata.



Nell’ipotesi che i predicati dell’UPDATE e quelli della DELETE siano identici e che tutti i predicati siano supportati da un indice (quindi, non ci siano predicati che il DB2 debba analizzare accedendo alla parte dati, e nell’ulteriore ipotesi che la tabella sia compressa, la cancellazione deve sfilare la chiave da tutti gli indici e cancellare la riga dati senza necessità di decomprimerla. L’insert deve comprimere, inserire la riga nel TS e inserire le relative chiavi in tutti gli 8 indici. L’Update deve fare le stesse cose che fa la coppia DELETE + INSERT, ma deve in più decomprimere la riga per aggiornarla e poi ricomprimerla. L’altro elemento di differenza potenziale è la quantità dei dati da scrivere sul Log, che potrebbe risultare vantaggiosa per l’Update vs. la coppia DELETE+INSERT.



Non prendo in esame il caso in cui la tabella sia Parent di relazioni supportare da vincoli formali di Integrità Referenziale…



Ma, ripeto, mi piacerebbe conoscere le ragioni del programmatore… Anche perché le convinzioni devono essere basate su solide basi condivisibili… Altrimenti sono solo supposizioni….



A presto,

Angelo



Da: Massimiliano Valli [mailto:[login to unmask email]
Inviato: giovedì 6 aprile 2017 12:18
A: [login to unmask email]
Oggetto: [DB2UGITALY] - Delete/Insert vs Update



Buongiorno a tutti,



un nostro applicativo vorrebbe sosituire, all'interno di un programma cics, l'istruzione sql di update con una delete e insert. Secondo l'applicativo risulterebbe più performante.

L'oggetto db2 in questione è un ts segmented con 8 indici. Uno dei campi oggetto dell'update è contenuto in tutti gli 8 indici. Dimensionalmente la tabella contiene 16 milioni di righe.

Al momento siamo in db2 v11 CM.



Avete esperienze in merito?

Grazie in anticipo.



-----End Original Message-----

Massimiliano Castellini

R: Delete/Insert vs Update
(in response to Angelo Sironi)
Oltre alle considerazioni di Angelo la coppia delete/insert comunque
comporta la gestione del calcolo dello spazio libero sulla tabella e la
gestione degli alberi delle chiavi sugli indici e relative pulizie di bit e
pagine. Anche io sarei curioso di sapere le motivazioni addotte. Ciao Max

Il 06/Apr/2017 13:16, "Angelo Sironi" <[login to unmask email]> ha
scritto:

> Ciao Massimiliano,
>
> io chiederei conto all’applicativo delle ragioni
> di questo suo convincimento….
>
>
>
> Poi aggiungerei le seguenti considerazioni. Innanzitutto mi chiederei se è
> ragionevole che una colonna oggetto di aggiornamento (che immagino
> frequente o massiccio, altrimenti uno non si farebbe certe preoccupazioni…)
> sia presente in ben 8 indici sapendo che è oggetto di aggiornamento
> frequente e/o massiccio…. Perché è ovvio che se fosse presente “solo” in 5
> indici la convinzione dell’applicativo sarebbe indubbiamente errata.
>
>
>
> Nell’ipotesi che i predicati dell’UPDATE e quelli della DELETE siano
> identici e che tutti i predicati siano supportati da un indice (quindi, non
> ci siano predicati che il DB2 debba analizzare accedendo alla parte dati, e
> nell’ulteriore ipotesi che la tabella sia compressa, la cancellazione deve
> sfilare la chiave da tutti gli indici e cancellare la riga dati senza
> necessità di decomprimerla. L’insert deve comprimere, inserire la riga nel
> TS e inserire le relative chiavi in tutti gli 8 indici. L’Update deve fare
> le stesse cose che fa la coppia DELETE + INSERT, ma deve in più
> decomprimere la riga per aggiornarla e poi ricomprimerla. L’altro
> elemento di differenza potenziale è la quantità dei dati da scrivere sul
> Log, che potrebbe risultare vantaggiosa per l’Update vs. la coppia
> DELETE+INSERT.
>
>
>
> Non prendo in esame il caso in cui la tabella sia Parent di relazioni
> supportare da vincoli formali di Integrità Referenziale…
>
>
>
> Ma, ripeto, mi piacerebbe conoscere le ragioni del programmatore… Anche
> perché le convinzioni devono essere basate su solide basi condivisibili…
> Altrimenti sono solo supposizioni….
>
>
>
> A presto,
>
> Angelo
>
>
>
> *Da:* Massimiliano Valli [mailto:[login to unmask email]
> *Inviato:* giovedì 6 aprile 2017 12:18
> *A:* [login to unmask email]
> *Oggetto:* [DB2UGITALY] - Delete/Insert vs Update
>
>
>
> Buongiorno a tutti,
>
>
>
> un nostro applicativo vorrebbe sosituire, all'interno di un programma
> cics, l'istruzione sql di update con una delete e insert. Secondo
> l'applicativo risulterebbe più performante.
>
> L'oggetto db2 in questione è un ts segmented con 8 indici. Uno dei campi
> oggetto dell'update è contenuto in tutti gli 8 indici. Dimensionalmente la
> tabella contiene 16 milioni di righe.
>
> Al momento siamo in db2 v11 CM.
>
>
>
> Avete esperienze in merito?
>
> Grazie in anticipo.
>
>
> -----End Original Message-----
>
> -----End Original Message-----
>

Massimiliano Valli

RE: R: Delete/Insert vs Update
(in response to Massimiliano Castellini)

Grazie ad entrambi per le precise rispote. 

Abbiamo inoltrato il messaggio all'applicativo e attendiamo un riscontro. 

Anche a noi è sembrata una cosa piuttosto bizzarra.