Questa pagina fornisce le best practice per ottenere il massimo rendimento, durabilità e disponibilità da Cloud SQL.
Se si verificano problemi con l'istanza Cloud SQL, esamina quanto segue durante la risoluzione dei problemi:
Configurazione e amministrazione delle istanze
Best practice | Ulteriori informazioni |
---|---|
Leggi e segui le linee guida operative per assicurarti che le tue istanze siano coperte dallo SLA di Cloud SQL. | |
Configura un periodo di manutenzione per l'istanza principale per controllare quando possono verificarsi aggiornamenti che causano interruzioni. | Vedi Periodo di manutenzione. |
Se elimini e ricrei regolarmente le istanze, utilizza un timestamp nell'ID istanza per aumentare la probabilità che i nuovi ID istanza siano utilizzabili. | |
Non avviare un'operazione amministrativa prima che quella precedente sia stata completata. |
Le istanze Cloud SQL non accettano nuove richieste di operazioni finché non hanno completato l'operazione precedente. Se tenti di avviare una nuova operazione in anticipo, la richiesta di operazione non va a buon fine. Ciò include i riavvii dell'istanza.
Lo stato dell'istanza nella console Google Cloud non
riflette se un'operazione è in esecuzione. Il segno di spunta verde indica
solo che l'istanza è nello stato |
Configura lo spazio di archiviazione per ospitare la manutenzione critica del database. |
Se l'impostazione dell'istanza Abilita aumenti automatici dello spazio di archiviazione è disattivata o il limite di aumento automatico dello spazio di archiviazione è attivato, assicurati di avere almeno il 20% di spazio disponibile per ospitare eventuali operazioni di manutenzione del database critiche che Cloud SQL potrebbe eseguire. Per ricevere un avviso quando lo spazio libero su disco scende al di sotto del 20%, crea un criterio di avviso basato sulle metriche per la metrica Utilizzo disco con una posizione Sopra la soglia e un valore di 0,8. Per saperne di più, consulta Creare criteri di avviso basati su metriche. |
Evita l'utilizzo eccessivo della CPU. |
Puoi visualizzare la percentuale di CPU disponibile utilizzata dall'istanza nella pagina dei dettagli dell'istanza nella console Google Cloud . Per ulteriori informazioni, consulta Metriche. Puoi anche monitorare l'utilizzo della CPU e ricevere avvisi a una soglia specificata utilizzando Crea criteri di avviso basati su soglie delle metriche. Per evitare un utilizzo eccessivo, puoi aumentare il numero di CPU per la tua istanza. La modifica delle CPU richiede il riavvio dell'istanza. Se la tua istanza ha già raggiunto il numero massimo di CPU, devi partizionare il database in più istanze. |
Evita l'esaurimento della memoria. |
Quando cerchi segni di esaurimento della memoria, devi utilizzare principalmente la metrica utilizzo. Per evitare errori di memoria insufficiente, ti consigliamo di mantenere questa metrica al di sotto del 90%. Puoi anche utilizzare la metrica total_usage per osservare la percentuale di memoria disponibile utilizzata dalla tua istanza Cloud SQL, inclusa la memoria utilizzata dal contenitore del database e la memoria allocata dalla cache del sistema operativo. Osservando la differenza tra le due metriche, puoi identificare la quantità di memoria utilizzata dai processi rispetto a quella utilizzata dalla cache del sistema operativo. Puoi riutilizzare il ricordo in questa cache. Per prevedere i problemi di memoria insufficiente, controlla entrambe le metriche e interpretale insieme. Se le metriche sembrano elevate, l'istanza potrebbe avere poca memoria. Ciò può essere dovuto a una configurazione personalizzata, alle dimensioni insufficienti dell'istanza per il workload o a una combinazione di questi fattori. Scala l'istanza Cloud SQL per aumentare la dimensione della memoria. La modifica della dimensione della memoria dell'istanza richiede il riavvio dell'istanza. Se la tua istanza ha già raggiunto la dimensione massima della memoria, devi partizionare il database su più istanze. Per scoprire di più sul monitoraggio di entrambe le metriche nella console Google Cloud , consulta Metriche. |
Imposta le impostazioni di SQL Server in modo che funzionino in modo ottimale per Cloud SQL. | Consulta Impostazioni di SQL Server. |
Ottimizza l'istanza per le esecuzioni di test. | La tabella seguente elenca i valori di configurazione adatti alle esecuzioni di test.
|
Determina la capacità del sottosistema I/O prima di eseguire il deployment di SQL Server. | Testa una serie di tipi e dimensioni di I/O. Le dimensioni dell'I/O emesso all'archiviazione su disco permanente proveniente da SQL Server influiscono su IOPS e throughput. Il carico di lavoro di SQL Server viene limitato quando raggiunge il limite di IOPS o il limite di throughput. Il tipo di archiviazione utilizzato in Cloud SQL è SSD con disco permanente, adatto per carichi di lavoro aziendali ad alte prestazioni. Personalizza la VM per massimizzare le prestazioni nel seguente modo:
|
Evita la frammentazione dell'indice e gli indici mancanti. | Riordina l'indice o configura una pianificazione per ricompilarlo in base alla frequenza con cui vengono modificati i dati. Inoltre, imposta un fattore di riempimento appropriato per ridurre la frammentazione. Monitora SQL Server per gli indici mancanti che potrebbero offrire prestazioni migliori. |
Aggiorna regolarmente le statistiche. | Se le statistiche non sono aggiornate, lo strumento di ottimizzazione delle query SQL potrebbe generare piani di query non ottimali. Aggiorna le statistiche, soprattutto dopo che sono state modificate grandi quantità di dati. Utilizza l'archivio query per monitorare e risolvere i problemi di SQL Server che hanno piani di query non ottimali. |
Impedire che i file di database diventino inutilmente grandi. |
Imposta Inoltre, assicurati che la funzionalità Abilita aumenti automatici dello spazio di archiviazione di Cloud SQL sia abilitata in modo che Cloud SQL possa aggiungere spazio di archiviazione se il database e l'istanza esauriscono lo spazio. |
Rileva i problemi di integrità del database eseguendo
DBCC CHECKDB
almeno una volta alla settimana.
|
DBCC CHECKDB controlla l'integrità di tutti gli oggetti in un database.
Eseguendo DBCC CHECKDB settimanalmente, puoi assicurarti che i tuoi database non siano danneggiati.
DBCC CHECKDB è un'operazione che richiede molte risorse e può influire sulle prestazioni dell'istanza.Non eseguire DBCC CHECKDB su un server di produzione.Ti consigliamo di utilizzare una delle seguenti opzioni anziché eseguire DBCC CHECKDB su un server di produzione:
Utilizza i seguenti snippet di codice per eseguire
|
Ottimizza le prestazioni
Per proteggere i tuoi dati e garantire il corretto funzionamento delle tue applicazioni con le tabelle OLTP in memoria, valuta la possibilità di applicare le seguenti best practice:
Best practice | Ulteriori informazioni |
---|---|
Rispetta le best practice di Microsoft per le tabelle con memoria ottimizzata |
Per ulteriori informazioni sulle limitazioni, consulta Funzionalità di SQL Server non supportate per OLTP in memoria. |
Sicurezza
Best practice | Ulteriori informazioni |
---|---|
Preferisci IP privato | A meno che non sia necessario l'accesso tramite IP pubblico, preferisci utilizzare l'IP privato. In questo modo, puoi ridurre al minimo le connessioni di rete non autorizzate al tuo database. |
Evita 0.0.0.0/0 nelle reti autorizzate | Evita di includere 0.0.0.0/0 in Reti autorizzate in quanto ciò consente l'accesso da internet globale senza restrizioni. |
Evita reti autorizzate eccessivamente grandi | Evita di utilizzare prefissi CIDR di piccole dimensioni in Reti autorizzate in quanto ciò consente l'accesso da un numero potenzialmente eccessivo di host. Consigliamo un prefisso CIDR non inferiore a /16 e preferibilmente superiore a /19. |
Architettura dei dati
Best practice | Ulteriori informazioni |
---|---|
Se possibile, dividi le istanze di grandi dimensioni in istanze più piccole. | Se possibile, è meglio utilizzare molte istanze Cloud SQL più piccole rispetto a una singola istanza di grandi dimensioni. La gestione di un'istanza monolitica di grandi dimensioni presenta sfide che non si pongono con un gruppo di istanze più piccole. |
Non utilizzare troppe tabelle di database. |
Mantieni il numero di tabelle dell'istanza inferiore a 10.000. Un numero eccessivo di tabelle del database può influire sui tempi di upgrade del database. |
Collation del database |
Che tu stia installando una nuova istanza di SQL Server, ripristinando un
backup del database o connettendo un server a database client, è importante
comprendere i requisiti di località, l'ordine di ordinamento e la sensibilità
a maiuscole/minuscole e accenti dei dati con cui stai lavorando.
Quando selezioni un ordinamento per il server, il database, la colonna o
l'espressione, assegni determinate caratteristiche ai tuoi dati.
Queste caratteristiche influiscono sui risultati di molte operazioni nel
database. Ad esempio, quando crei una query utilizzando ORDER BY ,
l'ordinamento del set di risultati potrebbe dipendere dalle regole di confronto
applicate al database o specificate in una clausola COLLATE a livello di
espressione della query. Scopri di più su
collation dei database e supporto Unicode.
|
Progettazione di query | Per prestazioni ottimali del database o delle query, assicurati di non utilizzare un numero elevato di tabelle nella stessa query (sedici o più). |
Monitoraggio delle query |
Le query potrebbero peggiorare nel tempo. È importante monitorare le prestazioni
dell'applicazione e delle query nel tempo.
Uno dei motivi di questo degrado è il hash bailout. I join hash ricorsivi o i bailout hash causano una riduzione delle prestazioni in un server. Se in una traccia visualizzi molti eventi di avviso hash, aggiorna le statistiche sulle colonne unite. Scopri di più sui bailout hash. |
Implementazione dell'applicazione
Best practice | Ulteriori informazioni |
---|---|
Utilizza pratiche di gestione delle connessioni efficaci, come il pooling delle connessioni e il backoff esponenziale. | L'utilizzo di queste tecniche migliora l'utilizzo delle risorse da parte dell'applicazione e ti aiuta a rimanere entro i limiti di connessione di Cloud SQL. Per ulteriori informazioni ed esempi di codice, vedi Gestione delle connessioni al database. |
Testa la risposta della tua applicazione agli aggiornamenti di manutenzione, che possono verificarsi in qualsiasi momento durante il periodo di manutenzione. | Prova la manutenzione self-service per simulare un aggiornamento di manutenzione. Durante la manutenzione, l'istanza non è disponibile per un breve periodo e le connessioni esistenti vengono interrotte. I test di implementazione della manutenzione ti consentono di comprendere meglio in che modo la tua applicazione gestisce la manutenzione programmata e con quale rapidità il sistema può ripristinarsi. |
Testa la risposta dell'applicazione ai failover, che possono verificarsi in qualsiasi momento. | Puoi avviare manualmente un failover utilizzando la console Google Cloud , gcloud CLI o l'API. Vedi Avvio del failover. |
Evita transazioni di grandi dimensioni. | Mantieni le transazioni brevi e di piccole dimensioni. Se è necessario un aggiornamento di un database di grandi dimensioni, esegui l'operazione in più transazioni più piccole anziché in un'unica transazione di grandi dimensioni. |
Se utilizzi il proxy di autenticazione Cloud SQL, assicurati di utilizzare la versione più recente. | Consulta Mantenere aggiornato il proxy di autenticazione Cloud SQL. |
Importazione ed esportazione di dati
Best practice | Ulteriori informazioni |
---|---|
Velocizza le importazioni per le istanze di piccole dimensioni. | Per le istanze di piccole dimensioni, puoi aumentare temporaneamente la CPU e la RAM di un'istanza per migliorare le prestazioni durante l'importazione di set di dati di grandi dimensioni. |
Se esporti dati da importare in Cloud SQL, assicurati di utilizzare la procedura corretta. | Consulta Esportare dati da un server di database gestito esternamente. |
Backup e ripristino
Best practice | Ulteriori informazioni |
---|---|
Proteggi i tuoi dati con la funzionalità Cloud SQL appropriata. |
I backup e le esportazioni sono modi per fornire ridondanza e protezione dei dati. Ognuna protegge da scenari diversi e si completano a vicenda in una solida strategia di protezione dei dati. I backup sono leggeri e consentono di ripristinare i dati dell'istanza allo stato in cui si trovavano al momento del backup. Tuttavia, i backup presentano alcune limitazioni. Se elimini l'istanza, vengono eliminati anche i backup. Non puoi eseguire il backup di un singolo database o tabella. Se la regione in cui si trova l'istanza non è disponibile, non puoi ripristinarla da quel backup, anche in una regione disponibile. Le esportazioni richiedono più tempo per essere create, perché viene creato un file esterno in Cloud Storage che può essere utilizzato per ricreare i dati. Le esportazioni non sono interessate se elimini l'istanza. Inoltre, puoi esportare solo un singolo database o anche una tabella, a seconda del formato di esportazione che scegli. Quando utilizzi la funzionalità di esportazione del backup su un'istanza SQL Server Enterprise o Standard, evita di creare un file di archivio GZ perché tenta di comprimere un backup già compresso in modo nativo da SQL Server. |
Proteggi l'istanza e i backup da eliminazioni accidentali. | Un'istanza Cloud SQL creata nella console Google Cloud o tramite Terraform attiva la prevenzione dell'eliminazione accidentale per impostazione predefinita. Utilizza la funzionalità di esportazione in Cloud SQL per esportare i dati per una maggiore protezione. Utilizza Cloud Scheduler con l'API REST per automatizzare la gestione dell'esportazione. Per scenari più avanzati, Cloud Scheduler con funzioni Cloud Run per l'automazione. |
Impostazioni di SQL Server
Per Cloud SQL sono consigliate alcune impostazioni di SQL Server. I seguenti argomenti descrivono alcuni consigli.
Impostazioni di configurazione globale
Impostazione | Consiglio | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
max worker threads
|
Mantieni il valore predefinito 0. Questa impostazione definisce il numero di thread disponibili per SQL Server in base al numero di CPU. Il valore viene calcolato automaticamente dal motore SQL Server all'avvio. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
max server memory (mb)
|
Questo flag limita la quantità di memoria che Cloud SQL può allocare per i suoi pool interni. Ti consigliamo di lasciare che Cloud SQL gestisca il valore di questo flag. Se devi gestire manualmente questo valore, utilizza la formula descritta più avanti in questa sezione. Se non imposti un valore per questo flag, Cloud SQL gestisce il valore automaticamente, in base alle dimensioni della RAM dell'istanza. Se non imposti un valore per il flag e ridimensioni l'istanza, Cloud SQL modifica automaticamente il valore del flag in modo da soddisfare i nostri consigli per la nuova dimensione dell'istanza. Questa operazione di ridimensionamento rimuove anche qualsiasi valore impostato manualmente per questo flag. In questo modo, il database utilizza le risorse in modo più efficace contribuendo a evitare l'allocazione eccessiva, riducendo la probabilità di un arresto anomalo dovuto a problemi di memoria insufficiente e contribuendo a evitare il peggioramento delle prestazioni per la tua istanza. Se preferisci gestire il valore di questo flag, impostalo manualmente. Di conseguenza, Cloud SQL disattiva la gestione automatica. Se stai ridimensionando l'istanza, il valore inserito manualmente viene ignorato. Il ridimensionamento dell'istanza riattiva la gestione automatica dei flag. Se, dopo il ridimensionamento, vuoi controllare manualmente il valore del flag, devi inserire un nuovo valore per riattivare il controllo manuale. Valuta la possibilità di rivedere il valore per corrispondere ai valori consigliati per una nuova taglia. Se devi gestire manualmente il valore del flag, ti consigliamo di utilizzare la seguente formula per impostare il flag di database
Ad esempio, se la RAM per la tua istanza è 104 GB
Per questo esempio, devi prenotare 16,4 GB di memoria. Di conseguenza, per il valore di questo flag, specifica La seguente tabella mostra i valori e le percentuali di RAM totale consigliati per alcuni livelli di macchine virtuali (VM) più comuni:
Per monitorare l'utilizzo della memoria per la tua istanza, utilizza le seguenti metriche:
Per saperne di più, consulta Monitora le istanze Cloud SQL. |
Impostazioni del database da modificare
Per prestazioni ottimali del database SQL Server, imposta le seguenti impostazioni di SQL Server come suggerito di seguito.
Impostazione | Consiglio |
---|---|
cost threshold for parallelism |
Questa è la soglia in corrispondenza della quale lo strumento di ottimizzazione SQL esegue una query
utilizzando il parallelismo. Il valore predefinito di Il valore viene ignorato quando |
max degree of parallelism (MAXDOP) |
Per ridurre le attese del database dovute al parallelismo, regola questo valore in base a consigli specifici sul numero di processori logici disponibili. Misura attentamente il rendimento se imposti questa opzione su 1. |
optimize for ad hoc workloads |
Evita di avere un numero elevato di piani monouso nella cache del piano.
Per migliorare l'efficienza della cache del piano per i workload che
contengono molti batch ad hoc da utilizzare una sola volta, imposta questa opzione su |
tempdb |
Pre-dimensiona Il tipo di attesa del database per la contesa Se il numero di processori è minore o uguale a 8, utilizza lo stesso numero di file dei processori logici. Se il numero di processori è maggiore di 8, utilizza 8 file di dati. Se il conflitto continua, aumenta il numero di file di multipli di 4 finché non si verifica più alcun conflitto. |
A seconda del carico di lavoro, potresti anche voler modificare le seguenti impostazioni.
Impostazione | Consiglio |
---|---|
Close Cursor on Commit Enabled |
Il valore predefinito è off , il che significa che i cursori
non vengono chiusi automaticamente quando esegui il commit di una transazione.
|
Default Cursor |
Questa opzione controlla l'ambito di un cursore utilizzato nel codice T-SQL. Se modifichi questa impostazione, valuta il codice dell'applicazione per eventuali effetti negativi. |
Page Verify |
Questa opzione consente a SQL Server di calcolare un checksum per una
pagina del database prima che venga scritta su disco e di archiviare il checksum
nell'intestazione della pagina. Quando una pagina viene letta di nuovo, il checksum viene
ricalcolato per verificare l'integrità della pagina.
Il valore consigliato è checksum .
|
Parameterization |
Il valore predefinito è simple . La parametrizzazione semplice
consente a SQL Server di sostituire i valori letterali in una query con
parametri. Microsoft fornisce linee guida su come modificare questo valore e utilizzarlo con le guide ai piani.
|
Impostazioni del database da conservare
Per prestazioni ottimali del database SQL Server, mantieni i valori predefiniti delle seguenti impostazioni di SQL Server.
Impostazione | Valore predefinito da conservare |
---|---|
Auto Close
|
False . Se questa impostazione è attiva, apre e chiude le connessioni
e svuota la procedura dopo ogni connessione. Ciò può causare un peggioramento delle prestazioni nei database a cui si accede di frequente.
|
Auto Shrink
|
False . L'attivazione può causare la frammentazione di database e indici e altri problemi di prestazioni, alcuni dei quali sono descritti in questo blog di SQL Server.
|
Date Correlation Optimization Enabled
|
False . L'attivazione consente all'ottimizzatore di trovare e ottimizzare
le relazioni tra le date in due tabelle correlate. Il monitoraggio in SQL
Server comporta un overhead delle prestazioni.
|
Legacy Cardinality Estimation
|
False . In alcuni casi, SQL Server non è in grado di calcolare con precisione
le cardinalità quando questa impostazione è abilitata.
|
Parameter Sniffing
|
ON . L'analisi dei parametri delle tabelle del database può contribuire a creare
piani di esecuzione per il riutilizzo. Se le tabelle contengono dati distribuiti in modo non uniforme, i piani di esecuzione risultanti potrebbero causare problemi di prestazioni.
Con questi dati, utilizza altre opzioni di Query Store anziché modificare questa
impostazione.
|
Query Optimizer Fixes
|
False . Se abilitata, può influire sulle prestazioni dello strumento di stima della cardinalità di SQL Server. Se scegli di attivarlo, esegui un test per
assicurarti che non si verifichi una regressione delle query.
|
Auto Create Statistics
|
True . Questa opzione consente a SQL Server di creare statistiche a colonna singola che possono migliorare le stime della cardinalità per i piani di query.
|
Auto Update Statistics
|
True . Questa opzione consente a SQL Server di aggiornare le statistiche non aggiornate utilizzando una soglia di ricompilazione basata sulla cardinalità della tabella.
|
Auto Update Statistics Asynchronously
|
False . Se attivata, questa opzione indica allo strumento di ottimizzazione delle query SQL di utilizzare le statistiche non aggiornate per l'esecuzione della query corrente, aggiornando le statistiche in modo asincrono a vantaggio dei workload futuri.
Tuttavia, se prevedi un tempo di risposta prevedibile per una query eseguita di frequente o se la tua applicazione subisce spesso timeout delle richieste client durante l'attesa degli aggiornamenti delle statistiche, valuta la possibilità di attivare questa opzione e disattivare |
Target Recovery Time (Seconds)
|
60 . Questa impostazione stabilisce un limite superiore per il tempo di recupero di un database scaricando le pagine modificate più o meno frequentemente sul disco dal buffer pool. Per i carichi di lavoro altamente transazionali, un valore inferiore
per questa impostazione, combinato con le IOPS di archiviazione vicine al valore massimo,
può contribuire a un collo di bottiglia delle prestazioni.
|
Impostazioni flag di Trace
I flag di traccia in SQL Server vengono utilizzati per impostare determinate caratteristiche, modificare il comportamento dei database SQL Server o eseguire il debug dei problemi in SQL Server.
Alcuni flag di traccia di SQL Server sono supportati in Cloud SQL e possono essere impostati utilizzando i flag di database. Le impostazioni consigliate sono le seguenti.
Flag di Trace | Consigliato |
---|---|
1204
|
Yes , ad eccezione dei server con carichi di lavoro intensivi che generano molti deadlock. Restituisce le risorse e i tipi di blocchi che partecipano a un deadlock, nonché il comando attualmente interessato. |
1222
|
Yes , ad eccezione dei server con carichi di lavoro intensivi che generano molti deadlock.
|
1224
|
No . Ciò può comportare un maggiore utilizzo della memoria e causare una pressione
sulla memoria del database.
|
2528
|
No . Il controllo parallelo degli oggetti è l'impostazione predefinita ed è
consigliata. Il grado di parallelismo viene calcolato automaticamente dal
motore del database.
|
3205
|
No . Le unità a nastro per i backup sono una funzionalità di Cloud SQL
per SQL Server.
|
3226
|
No , a meno che tu non abbia bisogno di backup frequenti, come i backup TLOG.
|
3625
|
No . Poiché l'account principale non dispone dell'accesso
amministrativo di sistema, potrebbe non essere in grado di visualizzare tutti i messaggi di errore.
|
4199
|
No . Ciò influisce sullo strumento di stima della cardinalità e può causare
la regressione delle query.
|
4616
|
No . Questa limitazione riduce la sicurezza dei ruoli
dell'applicazione. Deve essere convalidato in base ai requisiti dell'applicazione.
|
7806
|
Yes . Se il server di database non risponde, la
connessione amministratore dedicata (DAC) potrebbe essere l'unico modo per stabilire una connessione
per la diagnostica.
|