Questo documento fa parte di una serie che fornisce informazioni e indicazioni chiave relative alla pianificazione ed esecuzione delle migrazioni dei database Oracle® 11g/12c a Cloud SQL per MySQL versione 5.7, istanze di seconda generazione. La serie include le seguenti parti:
- Migrazione degli utenti Oracle a Cloud SQL per MySQL: terminologia e funzionalità (questo documento)
- Migrazione degli utenti Oracle a Cloud SQL per MySQL: tipi di dati, utenti e tabelle
- Migrazione degli utenti Oracle a Cloud SQL per MySQL: query, stored procedure, funzioni e trigger
- Migrazione degli utenti Oracle a Cloud SQL per MySQL: sicurezza, operazioni, monitoraggio e registrazione
Terminologia
Questa sezione illustra le somiglianze e le differenze nella terminologia dei database tra Oracle e Cloud SQL per MySQL. Esamina e confronta gli aspetti di base di ciascuna delle piattaforme di database. Il confronto distingue tra le versioni Oracle 11g e 12c a causa di differenze di architettura (ad esempio, Oracle 12c introduce la funzionalità multi-tenant). La versione di Cloud SQL per MySQL a cui si fa riferimento qui è 5.7.x.
Differenze nella terminologia tra Oracle 11g e Cloud SQL per MySQL
Oracle 11g | Descrizione | Cloud SQL per MySQL | Differenze principali |
---|---|---|---|
Istanza | Una singola istanza Oracle 11g può contenere un solo database. | Istanza | Un'istanza MySQL può contenere più database. |
Database | Un database è considerato una singola istanza (il nome del database è identico al nome dell'istanza). | Database | Uno o più database servono più applicazioni. |
Schema | Gli schemi e gli utenti sono identici perché entrambi sono considerati proprietari degli oggetti del database (un utente può essere creato senza specificare o essere allocato a uno schema). | Schema | Uno schema è definito database, mentre gli oggetti del database vengono creati in un determinato schema/database. |
User | Identità dello schema perché entrambi sono proprietari di oggetti database, ad esempio istanza → database → schemi/utenti → oggetti database. | User | Un utente del database con autorizzazioni specifiche per connettere o modificare gli oggetti del database su schemi/database specifici, ad esempio istanza → database/schemi → oggetti del database. |
Role | Set definito di autorizzazioni di database che possono essere collegate come gruppo e assegnate agli utenti del database. | Privilegi MySQL | MySQL 5.7 non supporta la gestione dei ruoli. Le autorizzazioni possono essere configurate utilizzando la clausola GRANT per consentire agli utenti di disporre di privilegi sugli oggetti del database a diversi livelli (LETTURA/SCRITTURA e così via). |
Utenti amministratore/SYSTEM | Utenti amministratori Oracle con il massimo livello di accesso:SYS SYSTEM |
Super user | Una volta disegnato, Cloud SQL per MySQL ha l'utente root@'%' (che può connettersi da qualsiasi host) e un utente aggiuntivo chiamato
mysql.sys , che può connettersi solo da localhost. |
Dizionario/metadati | Oracle utilizza le seguenti tabelle di metadati:USER_TableName ALL_TableName DBA_TableName |
Dizionario/metadati | MySQL utilizza diversi database/schemi per i dizionari/metadati:MYSQL INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYS |
Visualizzazioni dinamiche del sistema | Visualizzazioni dinamiche Oracle:V$ViewName |
Visualizzazioni dinamiche del sistema | Le visualizzazioni dinamiche di MySQL sono disponibili in diversi database di sistema:INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYS |
Spazio dati | Le strutture di archiviazione logiche principali dei database Oracle. Ogni tablespace può contenere uno o più file di dati. | Spazio dati | Come in Oracle, uno spazio tabella MySQL è un'unità logica, ma rappresenta solo una singola tabella, a differenza dello spazio tabella Oracle, che può avere più file di dati (contiene i dati di più tabelle). MySQL supporta la creazione di un nuovo spazio tabella con un file di dati allocato, quindi la creazione di una nuova tabella collegata allo spazio tabella appena creato. Tieni presente che le impostazioni di configurazione dello spazio tabella, come le dimensioni e i limiti, vengono impostate utilizzando i parametri del database e non durante la creazione dello spazio tabella. |
File di dati | Gli elementi fisici di un database Oracle che contengono i dati e sono definiti in un tablespace specifico. Un singolo file di dati è definito dalle dimensioni iniziali e massime e può contenere dati per più tabelle. I file di dati Oracle utilizzano il suffisso .dbf (non obbligatorio). |
File di dati | Cloud SQL per MySQL utilizza il parametro innodb_file_per_table
con il valore "ON " (predefinito); questa configurazione
genera un nuovo file di dati per ogni tabella e un tablespace dedicato.I file di dati MySQL utilizzano i file .ibd (dati) e .frm (metadati). |
Spazio tabella di sistema | Contiene gli oggetti delle tabelle e delle viste del dizionario di dati per l'intero database Oracle. | Spazio tabella di sistema | Come in Oracle, contiene le tabelle di dizionario/metadati. Memorizzati nello spazio tabella innodb_system associato al file di dati ibdata1 . |
Spazio tabella temporaneo | Contiene oggetti dello schema validi per la durata di una sessione; inoltre, supporta le operazioni in esecuzione che non possono essere inserite nella memoria del server. | Spazio tabella temporaneo | Lo scopo è identico a quello di Oracle, archiviato nello spazio tabella MySQLinnodb_temporary associato al file di datiibtmp1 . |
Annulla tablespace |
Un tipo speciale di spazio tabella permanente di sistema utilizzato da Oracle per gestire le operazioni di rollback quando il database viene eseguito in modalità di gestione dell'annullamento automatico (predefinita). | Annullare il tablespace | Come in Oracle, lo spazio tabella di annullamento di MySQL contiene log di annullamento per scopi di rollback. Per impostazione predefinita, questa opzione è impostata su OFF e viene menzionata come deprecata per le release future di MySQL. |
ASM | Oracle Automatic Storage Management è un gestore di dischi e un file system di database integrato e ad alte prestazioni, eseguito automaticamente da un database Oracle configurato con ASM. | Non supportato | MySQL utilizza il termine motori di archiviazione per descrivere diverse implementazioni di gestione dei dati, ma non supporta Oracle ASM. Cloud SQL per MySQL supporta molte funzionalità che forniscono l'automazione dello spazio di archiviazione, come gli incrementi automatici dello spazio di archiviazione, le prestazioni e la scalabilità. |
Tabelle/visualizzazioni | Oggetti di database fondamentali creati dall'utente. | Tabelle/visualizzazioni | Identico a Oracle. |
Viste materializzate | Definiti con istruzioni SQL specifiche e possono essere aggiornati manualmente o automaticamente in base a configurazioni specifiche. | Non supportato da MySQL | Come soluzione alternativa, è possibile utilizzare trigger/viste anziché viste materializzate di Oracle. |
Sequenza | Generatore di valori univoci Oracle. | Incremento automatico | MySQL non supporta le sequenze Oracle. Utilizza AUTO_INCREMENT come soluzione alternativa alla funzionalità di generazione automatica delle sequenze. |
Sinonimi | Oggetti del database Oracle che fungono da identificatori alternativi per altri oggetti del database. | Non supportato | MySQL non supporta il sinonimo Oracle. Come soluzione alternativa, è possibile utilizzare le viste impostando le autorizzazioni appropriate. |
Partizionamento | Oracle fornisce molte soluzioni di partizionamento per suddividere le tabelle di grandi dimensioni in parti gestite più piccole. | Partizionamento | MySQL ha un supporto per il partizionamento più limitato per migliorare le prestazioni, mantenendo al contempo le operazioni di gestione e manutenzione dei dati, come le partizioni Oracle. |
Database flashback | Funzionalità proprietaria di Oracle che può essere utilizzata per inizializzare un database Oracle a un momento precedente definito, consentendo di eseguire query o ripristinare i dati modificati o danneggiati per errore. | Non supportato | Come soluzione alternativa, puoi utilizzare i backup di Cloud SQL e il recupero point-in-time per ripristinare un database a uno stato precedente (ad esempio, prima dell'eliminazione di una tabella). |
sqlplus | Interfaccia a riga di comando Oracle che consente di eseguire query e gestire l'istanza del database. | mysql | Interfaccia a riga di comando equivalente a MySQL per query e gestione. Può essere collegato da qualsiasi client con le autorizzazioni appropriate a Cloud SQL. |
PL/SQL | Oracle ha esteso il linguaggio procedurale a ANSI SQL. | MySQL | MySQL ha un proprio linguaggio procedurale esteso con sintassi e implementazione diverse e non ha nomi aggiuntivi per questo linguaggio esteso. |
Pacchetto e corpo del pacchetto | Funzionalità specifica di Oracle per raggruppare procedure e funzioni archiviate sotto lo stesso riferimento logico. | Non supportato | MySQL supporta le stored procedure e le funzioni come singoli oggetti con allocazione di gruppo. |
Funzioni e stored procedure | Utilizza PL/SQL per implementare la funzionalità del codice. | Funzioni e stored procedure | La creazione di funzioni e stored procedure è supportata da MySQL con la sua implementazione del linguaggio procedurale proprietario. |
Trigger | Oggetto Oracle utilizzato per controllare l'implementazione di DML nelle tabelle. | Trigger | Identico a Oracle. |
PFILE/SPFILE | I parametri a livello di istanza e di database di Oracle vengono conservati in un file binario chiamato SPFILE (nelle versioni precedenti il file si chiamava PFILE ), che può essere utilizzato come file di testo per impostare i parametri manualmente. |
Flag del database Cloud SQL per MySQL | Puoi impostare o modificare i parametri di Cloud SQL per MySQL tramite l'utilità flag di database. Non puoi modificare i parametri del database in Cloud SQL per MySQL utilizzando l'interfaccia a riga di comando del client MySQL (ad esempio mysql>
SET GLOBAL ... ). Puoi modificare questi parametri solo utilizzando l'utilità dei flag di database. |
SGA/PGA/AMM | Parametri di memoria Oracle che controllano l'allocazione della memoria all'istanza database. |
INNODB_BUFFER_POOL_SIZE
|
MySQL ha i propri parametri di memoria. Un parametro equivalente potrebbe essere
INNODB_BUFFER_POOL_SIZE . In Cloud SQL per MySQL, questo
parametro è predefinito dal tipo di istanza scelto e il valore cambia
di conseguenza. |
Cache dei risultati | Riduce le operazioni di I/O SQL recuperando le righe dalla cache del buffer, che può essere gestita utilizzando i parametri e gli indizi del database a livello di sessione. | Cache delle query | Ha la stessa finalità di base della cache dei risultati di Oracle e può essere gestita a livello di database e di sessione. |
Suggerimenti per i database | Impatto controllato sulle istruzioni SQL che influiscono sul comportamento dell'ottimizzatore per ottenere un rendimento migliore. Oracle ha più di 50 diversi suggerimenti per i database. | Suggerimenti per i database | MySQL supporta un insieme limitato di suggerimenti per il database rispetto a Oracle (suggerimenti per l'ottimizzatore e suggerimenti per gli indici). Tieni presente che MySQL utilizza diversi suggerimenti, sintassi e nomi di database. |
RMAN | Utilità Oracle Recovery Manager. Utilizzato per eseguire il backup dei database con funzionalità estese per supportare più scenari di ripristino di emergenza e altro ancora (clonazione e così via). | Backup Cloud SQL per MySQL | Cloud SQL per MySQL offre due metodi per applicare il backup completo: backup on demand e automatici. |
Data Pump (EXPDP/IMPDP) | Utilità di generazione di dump Oracle che può essere utilizzata per molte funzionalità, come esportazione/importazione, backup del database (a livello di schema o oggetto), metadati dello schema, generazione di file SQL dello schema e altro ancora. | mysqldump/mysqlimport |
Utilità di dump (esportazione) MySQL che può essere collegata come client (da remoto)
e generare un file di dump (SQL). In un secondo momento, puoi comprimere il file dump e
spostarlo in Cloud Storage. L'utilità mysqldump è solo per il
passaggio di esportazione. |
SQL*Loader | Strumento che consente di caricare dati da file esterni come file di testo, file CSV e altro ancora. | mysqlimport/ |
L'utilità mysqlimport consente di caricare file di testo o CSV (Oracle supporta formati di file aggiuntivi) in una tabella di database con una struttura corrispondente. |
Data Guard | Soluzione di ripristino di emergenza di Oracle che utilizza un'istanza di standby, consentendo agli utenti di eseguire operazioni di tipo "READ" dall'istanza di standby. | Repliche e disponibilità elevata di Cloud SQL per MySQL | Per realizzare il ripristino di emergenza o l'alta disponibilità, Cloud SQL per MySQL offre l'architettura della replica di failover e per le operazioni di sola lettura (separazione LETTURA/SCRITTURA) utilizzando la replica di lettura. |
Active Data Guard/Golden Gate | Le principali soluzioni di replica di Oracle, che possono avere più scopi, ad esempio come standby (RE), istanze di sola lettura, replica bidirezionale (multi-source), data warehousing e altro ancora. | Replica di lettura Cloud SQL per MySQL | Replica di lettura Cloud SQL per MySQL per implementare il clustering con separazione LETTURA/SCRITTURA. Al momento, non è supportata la configurazione multi-origine, come la replica bidirezionale Golden Gate o la replica eterogenea. |
RAC | Oracle Real Application Cluster. Soluzione di clustering proprietaria di Oracle per fornire alta disponibilità tramite il deployment di più istanze di database con una singola unità di archiviazione. | Non supportato | L'architettura multi-source non è ancora supportata in Google Cloud Cloud SQL. Per ottenere un'architettura di clustering con separazione LETTURA/SCRITTURA e alta disponibilità, utilizza l'alta disponibilità e la replica di lettura di Cloud SQL. |
Controllo della rete/del cloud (OEM) | Software Oracle per la gestione e il monitoraggio di database e altri servizi correlati in formato app web. Questo strumento è utile per l'analisi del database in tempo reale per comprendere i carichi di lavoro elevati. | Console Cloud SQL per MySQL, Cloud Monitoring | Utilizza Cloud SQL per MySQL per il monitoraggio, inclusi grafici dettagliati in base al tempo e alle risorse. Utilizza Cloud Monitoring anche per memorizzare metriche di monitoraggio MySQL specifiche e analisi dei log per funzionalità di monitoraggio avanzate. |
Log REDO | Log delle transazioni Oracle costituiti da due o più file definiti preallocati che archiviano tutte le modifiche dei dati man mano che si verificano. Lo scopo del log di redo è proteggere il database in caso di guasto dell'istanza. | Log REDO | MySQL dispone anche di file di log di redo, che vengono utilizzati durante il recupero da arresto anomalo per correggere i dati scritti dal meccanismo dei log di redo delle transazioni incomplete. |
Archiviare i log | I log archiviati forniscono supporto per le operazioni di backup e replica e altro ancora. Oracle scrive nei log di archivio (se abilitati) dopo ogni operazione di trasferimento del log di redo. | binlogs | Implementazione di MySQL della conservazione dei log delle transazioni. Utilizzato principalmente per scopi di replica (abilitato per impostazione predefinita con Cloud SQL). |
File di controllo | Il file di controllo Oracle contiene informazioni sul database, ad esempio file di dati, nomi e posizioni dei log di redo, il numero di sequenza del log corrente e informazioni sul checkpoint dell'istanza. | MySQL | L'architettura MySQL non include un file di controllo simile all'implementazione di Oracle. Questo viene controllato tramite i parametri MySQL e utilizzando il comando SHOW MASTER STATUS per visualizzare la posizione corrente del log binario. |
SCN | L'SCN (System Change Number) di Oracle è il metodo principale per mantenere la coerenza dei dati da parte di tutti i componenti del database Oracle al fine di soddisfare il modello ACID delle transazioni. | Numero di sequenza del log | L'implementazione di MySQL per la coerenza del database utilizza l'LSN (Log Sequence Number). |
AWR | Oracle AWR (Automatic Workload Repository) è un report dettagliato che fornisce informazioni dettagliate sul rendimento dell'istanza del database Oracle ed è considerato uno strumento DBA per la diagnostica delle prestazioni. | performance_schema |
MySQL non dispone di un report equivalente ad AWR di Oracle, ma raccoglie i dati sulle prestazioni raccolti da performance_schema . Una
soluzione alternativa consiste nell'utilizzare le dashboard sul rendimento di Workbench. |
DBMS_SCHEDULER |
Utilità Oracle utilizzata per impostare e temporizzare operazioni predefinite. | EVENT_SCHEDULER |
Funzionalità di pianificatore interno del database MySQL. Per impostazione predefinita, questa funzionalità è impostata su OFF . |
Crittografia trasparente dei dati | Cripta i dati archiviati sui dischi come protezione dei dati at-rest. | Advanced Encryption Standard di Cloud SQL | Cloud SQL per MySQL utilizza l'Advanced Encryption Standard (AES-256) a 256 bit per la protezione della sicurezza dei dati a riposo, nonché per i dati in transito |
Compressione avanzata | Per migliorare l'ingombro del database, ridurre i costi di archiviazione e migliorare le prestazioni del database, Oracle fornisce funzionalità di compressione avanzata dei dati (tabelle/indici). | Compressione delle tabelle InnoDB | MySQL offre la compressione delle tabelle creando una tabella utilizzando il parametro ROW_FORMAT impostato su COMPRESSED . Scopri di più sulla compressione dell'indice. |
SQL Developer | Interfaccia utente grafica SQL gratuita di Oracle per la gestione ed esecuzione di istruzioni SQL e PL/SQL (può essere utilizzata anche con MySQL). | MySQL Workbench | Interfaccia utente grafica SQL gratuita di MySQL per gestire ed eseguire istruzioni di codice SQL e MySQL. |
Log degli avvisi | Log principale di Oracle per errori e operazioni generali del database. | Log degli errori di MySQL | Utilizza Logs Viewer di Cloud Logging per visualizzare i log degli errori di MySQL |
Tabella DUAL |
Tabella speciale Oracle utilizzata principalmente per recuperare i valori delle pseudo colonne come SYSDATE o USER |
Tabella DUAL | MySQL consente di specificare DUAL come tabella negli statement SQL
che non dipendono dai dati di nessuna tabella. |
Tabella esterna | Oracle consente agli utenti di creare tabelle esterne con i dati di origine su file esterni al database. | Non supportato. | Nessun equivalente diretto. |
Listener | Processo di rete Oracle incaricato di ascoltare le connessioni al database in arrivo | Reti autorizzate Cloud SQL | MySQL accetta le connessioni da origini remote una volta consentite nella pagina di configurazione delle reti autorizzate di Cloud SQL |
TNSNAMES | File di configurazione di rete Oracle che definisce gli indirizzi del database per stabilire connessioni utilizzando gli alias di connessione. | Non esiste | MySQL accetta connessioni esterne utilizzando il nome di connessione dell'istanza Cloud SQL o l'indirizzo IP privato/pubblico. Cloud SQL Proxy è un metodo di accesso sicuro aggiuntivo per connettersi a Cloud SQL per MySQL (istanze di seconda generazione) senza dover consentire indirizzi IP specifici o configurare SSL. |
Porta predefinita dell'istanza | 1521 | Porta predefinita dell'istanza | 3306 |
Link al database | Oggetti dello schema Oracle che possono essere utilizzati per interagire con gli oggetti del database locale/remoto. | Non supportato | Per una soluzione alternativa, utilizza il codice dell'applicazione per connetterti e recuperare i dati da un database remoto. |
Differenze nella terminologia tra Oracle 12c e Cloud SQL per MySQL
Oracle 12c | Descrizione | Cloud SQL per MySQL | Differenze principali |
---|---|---|---|
Istanza | La funzionalità multi-tenant introdotta nell'istanza Oracle 12c che può contenere più database come database modulare (PDB), diversamente da Oracle 11g, dove un'istanza Oracle può ottenere un solo database. | Istanza | Cloud SQL per MySQL può contenere più database con nomi diversi che servono più servizi e applicazioni. |
CDB | Un database contenitore multi-tenant (CDB) può supportare uno o più PDB, mentre è possibile creare oggetti globali CDB (che interessano tutti i PDB), ad esempio i ruoli. | Istanza MySQL | L'istanza MySQL è paragonabile al CDB Oracle. Entrambi forniscono un livello di sistema per i PDB. |
PDB | I database pluggable (PDB) possono essere utilizzati per isolare i servizi e le applicazioni tra loro e possono essere utilizzati come raccolta portatile di schemi. | Database/schemi MySQL | Un database MySQL può supportare più servizi e applicazioni, nonché molti utenti di database. |
Sequenze di sessioni | A partire da Oracle 12c, le sequenze possono essere create a livello di sessione (restituisce valori univoci solo all'interno di una sessione) o a livello globale (ad esempio, quando si utilizzano tabelle temporanee). | Incremento automatico |
Le sequenze non sono supportate da MySQL, ma gli utenti possono utilizzare la proprietà della colonna AUTO_INCREMENT come soluzione alternativa. |
Colonne di identità | Il tipo IDENTITY di Oracle 12c genera una sequenza e la associa a una colonna della tabella senza dover creare manualmente un oggetto sequenza separato. |
Incremento automatico | Utilizza la proprietà della colonna AUTO_INCREMENT per simulare la stessa funzionalità della colonna di identità di Oracle 12c (una soluzione alternativa alla funzionalità di generazione automatica di sequenze). |
Sharding | L'implementazione di sharding di Oracle è una soluzione in cui un database Oracle viene suddiviso in più database più piccoli (shard) per consentire scalabilità, disponibilità e distribuzione geografica per gli ambienti OLTP. | Non supportato (come funzionalità) | MySQL non dispone di una funzionalità di suddivisione equivalente. Lo sharding può essere implementato utilizzando MySQL (come piattaforma di dati) con un livello di applicazione di supporto. |
Database in memoria | Oracle fornisce una suite di funzionalità che possono migliorare le prestazioni del database per i carichi di lavoro OLTP e misti. | Non supportato | MySQL non ha una funzionalità equivalente. In alternativa, puoi utilizzare Memorystore. |
Oscuramento | Nell'ambito delle funzionalità di sicurezza avanzate di Oracle, l'oscuramento può eseguire il mascheramento delle colonne per impedire la visualizzazione di dati sensibili da parte di utenti e applicazioni. | Non supportato | MySQL non ha una funzionalità equivalente. |
Funzionalità
Sebbene i database Oracle 11g/12c e Cloud SQL per MySQL funzionino su architetture diverse (infrastruttura e linguaggi procedurali estesi), condividono gli stessi aspetti fondamentali di un database relazionale. Supportano oggetti di database, carichi di lavoro di concorrenza multiutente e transazioni (compatibilità ACID). Gestiscono inoltre le contese per i blocchi che supportano più livelli di isolamento (in base alle esigenze aziendali) e soddisfano i requisiti delle applicazioni in corso come un datastore relazionale per le operazioni di elaborazione delle transazioni online (OLTP) e di analisi online (OLAP).
La sezione seguente fornisce una panoramica di alcune delle principali differenze funzionali tra Oracle e Cloud SQL per MySQL. In alcuni casi, se necessario, la sezione include confronti tecnici dettagliati.
Creazione e visualizzazione di database esistenti
Oracle 11g/12c | Cloud SQL per MySQL 5.7 |
---|---|
In genere, crei i database e visualizzi quelli esistenti utilizzando l'utilità Oracle
Database
Creation Assistant (DBCA). I database o le istanze creati manualmente richiedono la specifica di parametri aggiuntivi:SQL> CREATE DATABASE ORADB USER SYS IDENTIFIED BY password USER SYSTEM IDENTIFIED BY password EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE temp UNDO TABLESPACE undotbs1 DEFAULT TABLESPACE users; |
Utilizza un'istruzione del tipo CREATE DATABASE Name; , come
in questo esempio:
mysql> CREATE DATABASE MYSQLDB; |
Oracle 12c | Cloud SQL per MySQL 5.7 |
In Oracle 12c, puoi creare PDB dal seed, da un modello di database di container (CDB) o clonando un PDB da un PDB esistente. Utilizza diversi parametri:SQL> CREATE PLUGGABLE DATABASE PDB ADMIN USER usr IDENTIFIED BY passwd ROLES = (dba) DEFAULT TABLESPACE sales DATAFILE '/disk1/ora/dbs/db/db.dbf' SIZE 250M AUTOEXTEND ON FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/') STORAGE (MAXSIZE 2G) PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'; |
Utilizza un'istruzione del tipo CREATE DATABASE Name; , come показано в этом примере:mysql> CREATE DATABASE MYSQLDB; |
Elenca tutti i PDB:SQL> SHOW is PDBS; |
Elenca tutti i database esistenti:mysql> SHOW DATABASES; |
Connettiti a un altro PDB:SQL> ALTER SESSION SET CONTAINER=pdb; |
Connettiti a un altro database:mysql> use databaseName; mysql> \u databaseName; |
Apri o chiudi un PDB specifico (aperto/sola lettura):SQL> ALTER PLUGGABLE DATABASE pdb CLOSE; |
Non supportato per un singolo database. Tutti i database si trovano nella stessa istanza Cloud SQL per MySQL. Pertanto, tutti i database sono attivi o inattivi. |
Gestione di un database tramite la console Cloud SQL
Nella console Google Cloud, vai a Storage > SQL > Instance > Databases > View/Create.
Database e schemi di sistema
Le istanze di database Oracle ottengono determinati schemi di sistema, ad esempio
SYS/SYSTEM
, con il ruolo di proprietari degli oggetti metadati del database.
Al contrario, MySQL contiene diversi database di sistema (a differenza degli schemi Oracle), che forniscono il livello di metadati (tieni presente che i nomi dei database sono sensibili alle maiuscole):
-
Il database di sistema
mysql
contiene tabelle che archiviano le informazioni richieste dal server MySQL durante l'esecuzione, ad esempio:- Tabelle dei privilegi di sistema
- Tabelle di informazioni sugli oggetti
- Tabelle di sistema dei log
- Tabelle del sistema di replica
- Tabelle di sistema dello strumento di ottimizzazione
- Tabelle di sistema dei fusi orari
-
INFORMATION_SCHEMA
funge da dizionario dei dati e catalogo di sistema principali del database. Fornisce l'accesso ai metadati del database, ovvero alle informazioni interne del database sul server MySQL, come il nome di un database o di una tabella, il tipo di dati della colonna e i privilegi di accesso. -
Un database di sistema che raccoglie informazioni statistiche sull'istanza MySQL. Il database di sistema
performance_schema
contiene le metriche per il monitoraggio dell'esecuzione del server a un livello molto granulare. Lo schema fornisce un'ispezione dell'esecuzione interna del server in fase di esecuzione e può fungere da fonte principale per analizzare i problemi di prestazioni del database.performance_schema
non è abilitato per impostazione predefinita con Cloud SQL per MySQL. Per attivare lo schema, utilizza lo strumento a riga di comandogcloud
:gcloud sql instances patch INSTANCE_NAME --database-flags performance_schema=on
Per completare questa configurazione, devi riavviare l'istanza. Non puoi modificare il parametro
--database-flags
utilizzando la pagina dei flag di database Cloud SQL per MySQL nella console Google Cloud. -
Lo schema
sys
esiste dalla versione 5.5.7 di MySQL e contiene principalmente visualizzazioni delle tabelle di sistemaperformance_schema
. Questo schema fornisce un insieme di visualizzazioni più leggibili che riassumono i dati diperformance_schema
in un formato più facilmente comprensibile. Lo schemasys
contiene anche diverse procedure e funzioni memorizzate per eseguire operazioni come la configurazione diperformance_schema
e la generazione di report di diagnostica.Lo schema
sys
mostra le informazioni solo quandoperformance_schema
è attivo.
Visualizzazione dei metadati e delle visualizzazioni dinamiche del sistema
Questa sezione fornisce una panoramica di alcune delle tabelle di metadati più comuni e delle viste dinamiche di sistema utilizzate in Oracle e dei relativi oggetti database in Cloud SQL per MySQL versione 5.7.
Oracle fornisce centinaia di tabelle e viste dei metadati di sistema, mentre MySQL ne contiene solo alcune dozzine. Per ogni caso, può essere presente più di un oggetto database, ciascuno con uno scopo specifico.
Oracle fornisce diversi livelli di oggetti di metadati, ognuno dei quali richiede diversi privilegi:
USER_TableName
: può essere visualizzato dall'utente.ALL_TableName
: può essere visualizzato da tutti gli utenti.DBA_TableName
: può essere visualizzato solo dagli utenti con il privilegio DBA, ad esempioSYS
eSYSTEM
.
Per le visualizzazioni dinamiche del rendimento, Oracle utilizza i prefissi V$
e GV$
. Affinché un utente MySQL possa visualizzare le tabelle o le viste dei metadati di sistema, deve disporre di autorizzazioni specifiche per gli oggetti di sistema. Per ulteriori informazioni sulla sicurezza, consulta la sezione Sicurezza.
Tipo di metadati | Tabella/visualizzazione Oracle | Tabella/visualizzazione/programma MySQL (comando MySQL) |
---|---|---|
Sessioni aperte | V$SESSION |
SHOW PROCESSLIST INFORMATION_SCHEMA.PROCESSLIST performance_schema.threads |
Transazioni in esecuzione | V$TRANSACTION |
INFORMATION_SCHEMA.INNODB_TRX |
Oggetti di database | DBA_OBJECTS |
Non supportati. Esegui query su ogni oggetto in base al tipo. |
Tabelle | DBA_TABLES |
INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.INNODB_SYS_TABLES |
Colonne della tabella | DBA_TAB_COLUMNS |
INFORMATION_SCHEMA.COLUMNS INFORMATION_SCHEMA.INNODB_SYS_COLUMNS |
Privilegi per tabelle e colonne | TABLE_PRIVILEGES DBA_COL_PRIVS ROLE_TAB_PRIVS |
INFORMATION_SCHEMA.COLUMN_PRIVILEGES |
Partizioni | DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS |
INFORMATION_SCHEMA.PARTITIONS SHOW CREATE TABLE TableName SHOW TABLE STATUS LIKE 'TableName' |
Visualizzazioni | DBA_VIEWS |
INFORMATION_SCHEMA.VIEWS |
Vincoli | DBA_CONSTRAINTS |
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS SHOW CREATE TABLE TableName |
Indici | DBA_INDEXES DBA_PART_INDEXES |
INFORMATION_SCHEMA.STATISTICS INFORMATION_SCHEMA.INNODB_SYS_INDEXES INFORMATION_SCHEMA.KEY_COLUMN_USAGE |
Viste materializzate | DBA_MVIEWS |
Non supportata |
Stored procedure | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
Funzioni memorizzate | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
Trigger | DBA_TRIGGERS |
INFORMATION_SCHEMA.TRIGGERS |
Utenti | DBA_USERS |
mysql.user |
Privilegi utente | DBA_SYS_PRIVS DBA_ROLE_PRIVS SESSION_PRIVS |
INFORMATION_SCHEMA.USER_PRIVILEGES |
Job/ Pianificazione |
DBA_JOBS DBA_JOBS_RUNNING DBA_SCHEDULER_JOBS DBA_SCHEDULER_JOB_LOG |
INFORMATION_SCHEMA.EVENTS |
Spazi dati | DBA_TABLESPACES |
INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES |
File di dati | DBA_DATA_FILES |
INFORMATION_SCHEMA.FILES INFORMATION_SCHEMA.INNODB_SYS_DATAFILES |
Sinonimi | DBA_SYNONYMS |
Non supportata |
Sequenze | DBA_SEQUENCES |
Non supportata |
Link ai database | DBA_DB_LINKS |
Non supportata |
Statistiche | DBA_TAB_STATISTICS DBA_TAB_COL_STATISTICS DBA_SQLTUNE_STATISTICS DBA_CPU_USAGE_STATISTICS |
INFORMATION_SCHEMA.STATISTICS INFORMATION_SCHEMA.KEY_COLUMN_USAGE SHOW INDEXES FROM TableName |
Serrature | DBA_LOCK DBA_DDL_LOCKS DBA_DML_LOCKS V$SESSION_BLOCKERS V$LOCKED_OBJECT |
INFORMATION_SCHEMA.INNODB_LOCKS INFORMATION_SCHEMA.INNODB_LOCK_WAITS INFORMATION_SCHEMA.INNODB_TRX performance_schema.metadata_locks performance_schema.rwlock_instances SHOW PROCESSLIST |
Parametri del database | V$PARAMETER V$NLS_PARAMETERS SHOW PARAMETER Param |
performance_schema.global_variables performance_schema.session_variables INFORMATION_SCHEMA.CHARACTER_SETS SHOW VARIABLES LIKE '%variable%'; |
Segmenti | DBA_SEGMENTS |
La tabella Segments non è supportata. Esegui query su ogni oggetto in base al tipo. |
Ruoli | DBA_ROLES DBA_ROLE_PRIVS USER_ROLE_PRIVS |
Roles not supported use instead: information_schema.COLUMN_PRIVILEGES information_schema.SCHEMA_PRIVILEGES information_schema.TABLE_PRIVILEGES information_schema.USER_PRIVILEGES mysql.columns_priv mysql.procs_priv mysql.proxies_priv mysql.tables_priv |
Cronologia sessioni | V$ACTIVE_SESSION_HISTORY DBA_HIST_* |
sys.statement_analysis performance_schema.events_stages_history performance_schema.events_stages_history_long performance_schema.events_statements_history performance_schema.events_statements_history_long performance_schema.events_transactions_history performance_schema.events_transactions_history_long performance_schema.events_waits_history performance_schema.events_waits_history_long |
Versione | V$VERSION |
sys.version SHOW VARIABLES LIKE '%version%'; |
Eventi di attesa | V$WAITCLASSMETRIC V$WAITCLASSMETRIC_HISTORY V$WAITSTAT V$WAIT_CHAINS |
performance_schema.events_waits_current performance_schema.events_waits_history performance_schema.events_waits_history_long sys.innodb_lock_waits sys.io_global_by_wait_by_bytes sys.io_global_by_wait_by_latency sys.schema_table_lock_waits sys.wait_classes_global_by_avg_latency sys.wait_classes_global_by_latency sys.waits_by_host_by_latency sys.waits_by_user_by_latency sys.waits_global_by_latency |
Ottimizzazione e analisi di SQL |
V$SQL V$SQLAREA V$SESS_IO V$SYSSTAT V$STATNAME V$OSSTAT V$ACTIVE_SESSION_HISTORY V$SESSION_WAIT V$SESSION_WAIT_CLASS V$SYSTEM_WAIT_CLASS V$LATCH V$SYS_OPTIMIZER_ENV V$SQL_PLAN V$SQL_PLAN_STATISTICS |
performance_schema.events_statements_current performance_schema.events_statements_history performance_schema.events_statements_history_long sys.statement_analysis sys.host_summary_by_statement_latency sys.host_summary_by_statement_type sys.statements_with_errors_or_warnings sys.statements_with_full_table_scans sys.statements_with_runtimes_in_95th_percentile sys.statements_with_sorting sys.statements_with_temp_tables sys.user_summary_by_statement_latency sys.user_summary_by_statement_type slow-query-log general-log SHOW STATUS LIKE '%StatusName%'; |
Ottimizzazione della memoria dell'istanza |
V$SGA V$SGASTAT V$SGAINFO V$SGA_CURRENT_RESIZE_OPS V$SGA_RESIZE_OPS V$SGA_DYNAMIC_COMPONENTS V$SGA_DYNAMIC_FREE_MEMORY V$PGASTAT |
information_schema.INNODB_CMPMEM_RESET information_schema.INNODB_CMPMEM performance_schema.memory_summary_by_account_by_event_name performance_schema.memory_summary_by_host_by_event_name performance_schema.memory_summary_by_thread_by_event_name performance_schema.memory_summary_by_user_by_event_name performance_schema.memory_summary_global_by_event_name performance_schema.replication_group_member_stats performance_schema.replication_group_members sys.memory_by_host_by_current_bytes sys.memory_by_thread_by_current_bytes sys.memory_by_user_by_current_bytes sys.memory_global_by_current_bytes sys.memory_global_total |
Motori di archiviazione MySQL
A differenza di molti altri RDBMS (incluso Oracle), MySQL può funzionare in modo polimorfico grazie al suo sistema di archiviazione pluggable. L'architettura del motore di archiviazione pluggable di MySQL consente a un amministratore di database di selezionare un motore di archiviazione specializzato per una determinata esigenza dell'applicazione.
Il componente del motore di archiviazione pluggable di MySQL nel server del database MySQL è responsabile dell'esecuzione delle operazioni di I/O dei dati, inclusa la memorizzazione dei dati nei dischi o nei buffer della memoria. L'architettura dell'engine di archiviazione plug-in fornisce un insieme standard di servizi di gestione e assistenza comuni a tutti gli engine di archiviazione sottostanti.
A partire dalla versione 5.5 di MySQL, il motore di archiviazione predefinito è il motore di archiviazione InnoDB, mentre InnoDB gestisce anche le tabelle temporanee. Puoi configurare gli engine di archiviazione durante la tabella CREATE
o ALTER
, come nell'esempio seguente:
mysql> SHOW CREATE TABLE JOBS \G;
L'output è il seguente:
*************************** 1. row *************************** Table: JOBS Create Table: CREATE TABLE `JOBS` ( `JOB_ID` varchar(10) NOT NULL, `JOB_TITLE` varchar(35) NOT NULL, `MIN_SALARY` decimal(6,0) DEFAULT NULL, `MAX_SALARY` decimal(6,0) DEFAULT NULL, PRIMARY KEY (`JOB_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
Per ulteriori informazioni, consulta i diversi motori di archiviazione di MySQL.
Puoi visualizzare la configurazione del motore di archiviazione utilizzando la seguente query:
mysql> SHOW VARIABLES LIKE '%storage%';
L'output è simile al seguente:
+----------------------------------+--------+ | Variable_name | Value | +----------------------------------+--------+ | default_storage_engine | InnoDB | | default_tmp_storage_engine | InnoDB | | disabled_storage_engines | | | enforce_storage_engine | Innodb | | internal_tmp_disk_storage_engine | InnoDB | +----------------------------------+--------+
Puoi visualizzare tutti i motori di archiviazione integrati:
mysql> SHOW STORAGE ENGINES;
L'output è simile al seguente:
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | CSV | YES | CSV storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
Tieni presente che InnoDB è il motore di archiviazione predefinito ed è l'unico motore di archiviazione che supporta le transazioni (conforme ad ACID). Poiché InnoDB è l'unico motore di archiviazione che si avvicina alla funzionalità di Oracle, ti consigliamo di utilizzarlo sempre. Cloud SQL per MySQL di seconda generazione supporta solo il motore di archiviazione InnoDB.
Parametri di sistema
Sia i database Oracle che Cloud SQL per MySQL possono essere configurati in modo specifico per ottenere determinate funzionalità oltre la configurazione predefinita. Per modificare i parametri di configurazione in Oracle, sono necessarie alcune autorizzazioni di amministrazione (principalmente le autorizzazioni utente SYS/SYSTEM
).
Di seguito è riportato un esempio di modifica della configurazione di Oracle mediante l'istruzione
ALTER SYSTEM
. In questo esempio, l'utente modifica il parametro "massimo
tentativi di accesso non riusciti" solo a livello di configurazione spfile
(con la modifica valida solo dopo un riavvio):
SQL> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=spfile;
Nell'esempio seguente, l'utente chiede di visualizzare semplicemente il valore del parametro Oracle:
SQL> SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;
L'output è simile al seguente:
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sec_max_failed_login_attempts integer 2
La modifica del parametro Oracle funziona in tre ambiti:
- SPFILE: le modifiche ai parametri vengono scritte in
spfile
di Oracle, con un riavvio dell'istanza necessario per l'applicazione del parametro. - MEMORIA: le modifiche ai parametri vengono applicate solo nel livello di memoria, mentre non è consentita alcuna modifica dei parametri statici.
- ENTRAMBI: le modifiche ai parametri vengono applicate sia nel file del parametro del server sia nella memoria dell'istanza, dove non è consentita alcuna modifica dei parametri statici.
Flag di configurazione di Cloud SQL per MySQL
Puoi modificare i parametri di sistema di Cloud SQL per MySQL utilizzando i flag di configurazione nella console Google Cloud, in gcloud CLI o in CURL. Consulta l'elenco completo di tutti i parametri supportati da Cloud SQL per MySQL che puoi modificare.
I parametri MySQL possono essere suddivisi in diversi ambiti:
- Parametri dinamici:possono essere modificati in fase di esecuzione.
- Parametri statici:richiedono il riavvio dell'istanza per essere applicati.
- Parametri globali:avranno un effetto globale su tutte le sessioni attuali e future.
- Parametri sessione:possono essere modificati a livello di sessione solo per la durata della sessione corrente, in modo isolato dalle altre sessioni.
Il parametro di memoria Cloud SQL per MySQL
innodb_buffer_pool_size
(uno dei parametri fondamentali da considerare durante la pianificazione e la definizione delle dimensioni di un ambiente MySQL) è determinato dal tipo di istanza e non può essere modificato utilizzando
i flag di configurazione o qualsiasi altro metodo, ad esempio:
- Il tipo di istanza
db-n1-standard-1
ha un'allocazione di memoria di 1,4 GB. - Il tipo di istanza
db-n1-highmem-8
ha un'allocazione di memoria di 38 GB.
Esempi di modifica dei parametri di Cloud SQL per MySQL
Console
Utilizza la console Google Cloud per attivare il parametro event_scheduler
.
Vai alla pagina Modifica istanza di Cloud Storage.
In Flag, fai clic su Aggiungi elemento e cerca
event_scheduler
come показано во скриншоте ниже.
gcloud
Utilizza gcloud CLI per attivare il parametro
event_scheduler
.gcloud sql instances patch INSTANCE_NAME \ --database-flags event_scheduler=on
L'output è il seguente:
WARNING: This patch modifies database flag values, which may require your instance to be restarted. Check the list of supported flags - /sql/docs/mysql/flags - to see if your instance will be restarted when this patch is submitted. Do you want to continue (Y/n)?
Sessione MySQL
Disattiva la modalità AUTOCOMMIT
a livello di sessione. Questa alterazione rimane in vigore per la sessione corrente e si applica solo per la durata della sessione.
Mostra variabili come
autocommit
:mysql> SHOW VARIABLES LIKE '%autoc%';
Viene visualizzato il seguente output, dove
autocommit
èON
:+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+
Disattiva
autocommit
:mysql> SET autocommit=off;
Mostra variabili come
autocommit
:mysql> SHOW VARIABLES LIKE '%autoc%';
Viene visualizzato il seguente output, dove
autocommit
èOFF
:+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+
Transazioni e livelli di isolamento
Questa sezione descrive le principali differenze tra Oracle e Cloud SQL per MySQL pertinenti alle migrazioni a livello di transazione e isolamento.
Modalità di commit
Per impostazione predefinita, Oracle funziona in modalità di commit non automatico, in cui ogni transazione DML deve essere determinata con istruzioni COMMIT/ROLLBACK
. Una delle differenze fondamentali tra Oracle e MySQL è che MySQL funziona per impostazione predefinita in modalità di commit automatico e ogni transazione DML viene eseguita con commit automatico specificando esplicitamente le istruzioni COMMIT/ROLLBACK
.
Per forzare MySQL a funzionare in una modalità non di commit automatico, sono disponibili diverse opzioni:
- Quando gestisci le transazioni nell'ambito delle stored procedure, utilizza la clausola
START TRANSACTION
per inserire la stessa modalità transazionale di Oracle. Utilizza la seguente istruzione per impostare il parametro di sistema
autocommit
suOFF
a livello di sessione e utilizza esplicitamente le istruzioniCOMMIT/ROLLBACK
nelle transazioni DML:mysql> SET autocommit=off;
Livelli di isolamento
Lo standard ANSI/ISO SQL (SQL92) definisce quattro livelli di isolamento. Ogni livello offre un approccio diverso per gestire l'esecuzione simultanea delle transazioni di database:
- Lettura non confermata: una transazione attualmente in fase di elaborazione può vedere i dati non confermati creati dall'altra transazione. Se viene eseguito un rollback, tutti i dati vengono ripristinati allo stato precedente.
- Lettura confermata:una transazione vede solo le modifiche ai dati che sono state confermate. Le modifiche non confermate("letture sporche") non sono possibili.
- Lettura ripetibile: una transazione può visualizzare le modifiche apportate dall'altra transazione solo dopo che entrambe le transazioni hanno emesso un
COMMIT
o dopo che entrambe sono state annullate. - Serializable:il livello di isolamento più rigoroso/sicuro. Questo livello blocca tutti i record a cui viene eseguito l'accesso e la risorsa in modo che i record non possano essere aggiunti alla tabella.
I livelli di isolamento delle transazioni gestiscono la visibilità dei dati modificati come li vedono altre transazioni in esecuzione. Inoltre, quando più transazioni contemporaneamente accedono agli stessi dati, il livello di isolamento delle transazioni selezionato influisce sul modo in cui le diverse transazioni interagiscono.
Oracle supporta i seguenti livelli di isolamento:
- Lettura confermata (valore predefinito)
- Serializable
- Solo lettura (non fa parte dello standard SQL ANSI/ISO (SQL92)
Controllo della concorrenza multiversione (MVCC) di Oracle:
- Oracle utilizza il meccanismo MVCC per fornire coerenza di lettura automatica in tutto il database e in tutte le sessioni.
- Oracle si basa sul numero di modifica di sistema (SCN) della transazione corrente per ottenere una vista coerente del database. Pertanto, tutte le query del database restituiscono solo i dati committati rispetto all'SCN al momento dell'esecuzione della query.
- I livelli di isolamento possono essere modificati a livello di transazione e sessione.
Ecco un esempio di impostazione dei livelli di isolamento:
-- Transaction Level
SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SQL> SET TRANSACTION READ ONLY;
-- Session Level
SQL> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
SQL> ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;
Cloud SQL per MySQL, come Oracle, supporta i seguenti quattro livelli di isolamento delle transazioni specificati nello standard ANSI SQL:92:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ (default)
SERIALIZABLE
Il livello di isolamento predefinito di Cloud SQL per MySQL è REPEATABLE READ
. Eventuali
nuovi dati saranno disponibili per entrambi solo dopo che entrambe le transazioni avranno emesso un
comando COMMIT
. Questi livelli di isolamento possono essere modificati a livello di SESSION
e
GLOBAL
(la modifica a livello globale
è attualmente in versione beta e utilizza i flag di configurazione).
Per verificare i livelli di isolamento attuali sia a livello di SESSION
sia a livello di GLOBAL
, utilizza
la seguente istruzione:
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
L'output è il seguente:
+-----------------------+-----------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+-----------------+ | REPEATABLE-READ | REPEATABLE-READ | +-----------------------+-----------------+
Puoi modificare la sintassi del livello di isolamento nel seguente modo:
SET [SESSION] TRANSACTION ISOLATION LEVEL [READ WRITE | READ ONLY]
| REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE]
Puoi anche modificare il livello di isolamento a livello di SESSION
:
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- Verify
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
L'output è il seguente:
+-----------------------+------------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+------------------+ | REPEATABLE-READ | READ-UNCOMMITTED | +-----------------------+------------------+
Struttura delle transazioni di Cloud SQL per MySQL
Sintassi di Transazioni:
START TRANSACTION [transaction_characteristic [, transaction_characteristic] ...] |
---|
Le transazioni possono essere implementate con START TRANSACTION
o BEGIN
.
L'opzione WITH CONSISTENT SNAPSHOT
avvia una transazione READ
coerente,
che è in pratica la stessa cosa che emettere un START TRANSACTION
, seguito da un
SELECT
da qualsiasi tabella. La clausola WITH CONSISTENT SNAPSHOT
che avvia un
READ
coerente (un'operazione READ
che utilizza le informazioni sulle istantanee per presentare
risultati di query in base a un determinato momento) non modifica il livello di isolamento delle transazioni ed è supportata solo dal livello di isolamento REPEATABLE READ
.
Un READ
coerente utilizza le informazioni relative agli istantanei per rendere disponibili i risultati delle query in base a un determinato momento, indipendentemente dalle modifiche eseguite dalle transazioni simultanee. Se i dati sottoposti a query sono stati modificati da un'altra transazione, i dati originali vengono ricostruiti utilizzando il log di annullamento. In questo modo eviterai problemi di blocco che potrebbero ridurre la concorrenza.
Con il livello di isolamento REPEATABLE READ
, lo snapshot si basa sul momento in cui viene eseguita la prima operazione READ
. Con il livello di isolamento READ COMMITTED
,
lo snapshot viene reimpostato sul momento di ogni operazione READ
coerente.
Di seguito è riportato un esempio di impostazione del livello di transazione e isolamento:
mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
mysql> START TRANSACTION;
mysql> INSERT INTO tbl1 VALUES (1, 'A');
mysql> UPDATE tbl2 SET col1 = 'Done' WHERE KeyColumn = 1;
mysql> COMMIT;