This is a read-only copy of the MariaDB Knowledgebase generated on 2024-12-22. For the latest, interactive version please visit https://mariadb.com/kb/.

La replica basata sulle righe senza chiave primaria

MariaDB migliora la replica row-based sulle tabelle che non hanno una chiave primaria ma posseggono altri indici. Questa funzionalità si basa in parte sulla patch di Percona "row_based_replication_without_primary_key.patch", con alcuni fix e alcuni miglioramenti aggiuntivi.

Quando la replica basata sulle righe viene usata con le UPDATE o le DELETE, gli slave devono localizzare ogni riga replicata basandosi sui valori dei suoi campi. Se la tabelle contiene almeno un indice, questo verrà usato per la ricerca (diversamente sarà necessaria una scansione completa della tabella per ogni riga, e questo deve essere evitato perché è estremamente inefficiente per tutte le tabelle che non siano piccolissime).

A partire da MariaDB 5.3, gli slave cercano di scegliere il miglior indice tra quelli che sono disponibili:

  • Se esiste una chiave primaria, viene usata.
  • Altrimenti viene usato il primo indice univoco senza colonne NULL, se esiste.
  • Altrimenti viene scelto un indice tra quelli normali che esistono nella tabella (ad esempio i FULLTEXT non vengono considerati).

La scelta tra i vari indici non univoci si basa sulla loro cardinalità; si preferisce quello più selettivo (cioè quello che ha il minor numero di righe per ogni valore distinto delle colonne). Si noti che, per la maggior parte degli Storage Engine (come MyISAM, InnoDB), perché questa scelta sia ben fatta, è necessario che sullo slave sia stata eseguita una ANALYZE TABLE, altrimenti non ci sono statistiche sulla cardinalità degli indici. In assenza di tali informazioni, viene scelto il primo indice univoco, se ne esiste uno, oppure il primo non univoco.

Prima di MariaDB 5.3, gli slave sceglievano sempre il primo indice indipendentemente dalla cardinalità. Potevano anche scegliere un indice inutilizzabile (come un FULLTEXT) se non vi erano altri indici (MySQL Bug #58997), e questo causava in molti casi errori nella replica row-based; anche questo problema è stato corretto in MariaDB 5.3.

Vedi anche

Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.