Questa pagina descrive Calíope 1.8, la versione che sto costruendo adesso. La 1.7 è sull'App Store per Mac, iPad, iPhone, Apple Watch, Apple TV e Apple Vision Pro. Il changelog dice in quale versione è arrivata ogni funzione.

Aggiunge a ogni argomento un pulsante «Apri in Calíope». Funziona solo con l'app installata.

Manutenzione tabelle

Manutenzione delle tabelle

Analizza, controlla, ottimizza o ripara le tabelle selezionate, con le operazioni di cui dispone il server.

Dove si trova: Workspace › Strumenti › Manutenzione tabelle

Apri Manutenzione tabelle dalla barra laterale del workspace. Seleziona le tabelle nell'albero a sinistra (la casella di un database seleziona tutte le sue tabelle, oppure spuntale una per una), scegli l'operazione in alto — ANALYZE, CHECK, CHECKSUM, OPTIMIZE o REPAIR — e premi Esegui. Accanto al pulsante vedi quante tabelle sono selezionate.

I risultati compaiono sotto, una riga per ogni messaggio che il server restituisce per ciascuna tabella: gli avvisi sono evidenziati in arancione e gli errori in rosso. Su InnoDB, OPTIMIZE risponde con una nota: ricostruisce la tabella e la analizza al suo posto. CHECKSUM dà un numero per tabella; lo stesso numero su due server significa le stesse righe. REPAIR viene eseguito solo sulle tabelle il cui motore di archiviazione sa ripararsi: MyISAM, Aria, ARCHIVE e CSV. Prima di eseguirlo, una riga sotto i modificatori dice quante delle tabelle selezionate verranno saltate, e ognuna riceve una riga che spiega perché; su InnoDB la riga suggerisce OPTIMIZE, che ricostruisce la tabella. Sul Mac, fai clic sull'intestazione di una colonna per ordinare i risultati; Svuota i risultati svuota l'elenco. Mentre un'operazione è in corso, accanto a Esegui compaiono una barra di avanzamento e Annulla; le tabelle vengono elaborate una alla volta, quindi annullare si ferma prima della successiva.

L’albero ha un filtro per nome nell’intestazione, come quello dell’Editor SQL: digita parte del nome di un database o di una tabella per restringere l’elenco. Ogni database carica le sue tabelle la prima volta che lo espandi, quindi se filtri con database non espansi il piè di pagina indica quanti mancano e propone di caricarli. Seleziona tutto percorre tutti i database del server tranne quelli di sistema del server stesso, che puoi spuntare a mano, e può richiedere qualche secondo. Se il server rifiuta l'operazione su una tabella, quella tabella riceve una riga di errore con il messaggio del server.

SQL Server

Ci sono quattro operazioni: ANALYZE (UPDATE STATISTICS), CHECK (DBCC CHECKTABLE), OPTIMIZE (ALTER INDEX ALL … REBUILD) e CHECKSUM (CHECKSUM_AGG(BINARY_CHECKSUM(*)), sulla tabella intera). La somma non conta le colonne text, ntext, image, xml né quelle di un tipo come geometry, e il risultato le nomina accanto: due tabelle che differiscono solo lì danno la stessa somma. Una tabella su uno schema di partizione offre di ricostruire una sola partizione. Non c’è REPAIR: richiede il database in modalità utente singolo e può perdere dati. OPTIMIZE blocca la tabella mentre la ricostruisce: la ricostruzione online esiste solo nell’edizione Enterprise, e non con indici spaziali.

PostgreSQL

Ci sono tre operazioni: ANALYZE, OPTIMIZE, che esegue VACUUM e poi REINDEX TABLE CONCURRENTLY, e quindi dà due righe per tabella, e CHECK, con l’estensione amcheck: bt_index_check su ogni indice B-tree e, dalla 14, verify_heapam sulla tabella. Senza l’estensione, CHECK dà una nota con CREATE EXTENSION amcheck. Nessuna ferma la tabella. Non ci sono REPAIR né CHECKSUM. VACUUM FULL, l’unica che restituisce spazio al sistema, è esclusa di proposito: blocca l’intera tabella mentre la riscrive. Su un server precedente alla 12, OPTIMIZE si ferma al VACUUM e la riga dell’indice dice perché.

ClickHouse

Con ClickHouse ci sono tre operazioni: CHECK, che restituisce una riga per ogni parte della tabella; OPTIMIZE, che ne fonde le parti; e ANALYZE, che calcola le statistiche di colonna che l'ottimizzatore usa per ordinare i filtri: ADD STATISTICS con tdigest e uniq sulle colonne di numeri e date, uniq su quelle di testo, e MATERIALIZE STATISTICS, che aspetta la fine. Un Array o una Map non prendono statistiche, e una tabella senza colonne che le accettino lo dice. REPAIR e CHECKSUM non esistono nel motore e non compaiono. Con una sola tabella spuntata compare Partizione, per ottimizzare una partizione invece della tabella intera.

Oracle

Con Oracle ci sono tre operazioni. ANALYZE raccoglie le statistiche della tabella e dei suoi indici con DBMS_STATS.GATHER_TABLE_STATS, e la riga del risultato dice quante righe contano le statistiche e quando sono state raccolte; senza privilegi su una tabella di un altro schema, dice che non è stato possibile raccoglierle e sotto va il messaggio del server. CHECK è ANALYZE TABLE … VALIDATE STRUCTURE CASCADE ONLINE: verifica la tabella e i suoi indici senza bloccare le scritture. Su una tabella partizionata va CASCADE FAST, che dice se c'è un danno senza dettagliarlo, perché la forma completa richiede una tabella INVALID_ROWS nel tuo schema. OPTIMIZE è ALTER TABLE … SHRINK SPACE CASCADE: compatta in linea la tabella e i suoi indici e restituisce lo spazio libero. Se la tabella non aveva ROW MOVEMENT, Calíope lo attiva per l'operazione e poi lo disattiva. Se la tabella non accetta SHRINK (ORA-10631 o ORA-10635: un indice basato su funzione, una vista materializzata ON COMMIT sopra, un tablespace senza ASSM), Calíope la riscrive con MOVE ONLINE e la riga lo dice. Su una tabella partizionata puoi scegliere una partizione (MODIFY PARTITION … SHRINK SPACE CASCADE). Non ci sono REPAIR né CHECKSUM: Oracle non ha queste operazioni per tabella. Annulla interrompe anche la tabella in corso: il server ferma la sua istruzione (ORA-01013) e quella tabella non riceve riga nell'elenco.

TiDB

Con TiDB ci sono due operazioni: ANALYZE e CHECK, che esegue ADMIN CHECK TABLE —confronta gli indici con le righe— una tabella alla volta. Se non trova nulla, la riga dice che la tabella non presenta problemi; se trova qualcosa, c’è il messaggio del server, che nomina l’indice. Non ci sono REPAIR, CHECKSUM né OPTIMIZE: TiDB non li ha —il suo archivio si compatta da solo— e non vengono offerti.

Con un’etichetta di ambiente di sola lettura, questo strumento non viene offerto. Con una che conferma le scritture, ANALYZE, OPTIMIZE e REPAIR chiedono una volta per lotto; CHECK e CHECKSUM, che leggono, non chiedono.

MySQLMariaDBAurora

Con una sola tabella selezionata, OPTIMIZE permette di scegliere una delle sue partizioni. Calíope la ricostruisce con REBUILD PARTITION e la analizza con ANALYZE PARTITION, perché su InnoDB OPTIMIZE PARTITION ricostruirebbe l’intera tabella. Questa operazione finisce nel binlog anche se selezioni il modificatore che lo evita: ALTER TABLE non lo accetta.

Parole chiave: ANALYZE, CHECK, OPTIMIZE, REPAIR, manutenzione, CHECKSUM

Modificatori di operazione

Opzioni aggiuntive che modificano il comportamento dell'operazione.

Dove si trova: Manutenzione tabelle › Griglia dei modificatori

Sotto l'operazione, la griglia dei modificatori: LOCAL (senza binlog), FOR UPGRADE, QUICK, FAST, MEDIUM, EXTENDED, CHANGED e USE_FRM. Ogni operazione attiva solo quelli che accetta, e cambiare operazione li deseleziona. Ad esempio, QUICK accelera CHECK perché non scorre le righe in cerca di collegamenti errati, FOR UPGRADE verifica la compatibilità con la versione attuale del server, e LOCAL tiene ANALYZE, OPTIMIZE e REPAIR fuori dal log binario, così le repliche non li ripetono. Con CHECKSUM, QUICK restituisce solo il checksum che una tabella mantiene aggiornato, e la maggior parte non ne mantiene. USE_FRM ricostruisce l'indice di una tabella MyISAM dalla sua definizione, come ultima risorsa.

La griglia mostra solo i modificatori che il motore ha. Con SQL Server CHECK accetta PHYSICAL_ONLY (solo la struttura, più veloce) e EXTENDED_LOGICAL_CHECKS; con PostgreSQL OPTIMIZE accetta FREEZE, SKIP_LOCKED e INDEX_CLEANUP OFF (gli ultimi due dalla 12) e ANALYZE SKIP_LOCKED, che salta la tabella bloccata da un altro invece di aspettarla.

ClickHouse

Con ClickHouse sono tre, tutti di OPTIMIZE e spenti all'inizio. FINAL obbliga a lasciare la tabella —o la partizione— in una sola parte, e spuntandolo un avviso dice che può richiedere ore e il doppio del disco. DEDUPLICATE toglie le righe identiche in tutte le colonne, e va sempre con FINAL: senza, deduplica solo ciò che il server stava per fondere. CLEANUP è di una ReplacingMergeTree con colonna di cancellazione: scarta le righe marcate come cancellate, e la tabella deve permetterlo con un'impostazione propria; se non è di quel motore o non lo permette, la riga del risultato dice perché e non si invia nulla.

Oracle

Con Oracle sono tre. FAST, in CHECK, chiede CASCADE FAST anche su una tabella senza partizioni. MOVE ONLINE, in OPTIMIZE, riscrive l'intero segmento (ALTER TABLE … MOVE ONLINE, o MOVE PARTITION … ONLINE) invece di compattarlo, e gli indici restano utilizzabili. NO_INVALIDATE, in ANALYZE, lascia vivi i cursori che usano già le statistiche vecchie (no_invalidate => TRUE).

TiDB

Con TiDB non ci sono modificatori, e la sezione non viene disegnata.

SQL Server

Con SQL Server, CHECKSUM non ha modificatori: la somma è dell’intera tabella.

Parole chiave: QUICK, EXTENDED, FOR UPGRADE, LOCAL, modificatori