Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 14553|Risposta: 0

[Comunicazione] Problema con il limite di connessione utente SQL Server

[Copiato link]
Pubblicato su 26/11/2014 15:11:08 | | | |

Connessioni utente SQLSERVER

Le Connessioni General StatisticsUser dell'istanza SQL nel contatore performance corrispondono a essa

Puoi anche consultare TCPv4Connections Established nel contatore delle prestazioni  


Su una macchina con solo il servizio SQLSERVER,Connessioni TCPV4 stabilite & Collegamenti utente MssqlQuesti due parametri sono fondamentalmente sincronizzati e sono indicati come numero di connessioni nel seguente contenuto di test


Questo numero di connessioni è limitato, simile al numero massimo di limiti di concorrenza. Quando questo limite viene raggiunto, le query diventano non responsive anche se ci sono risorse libere di CPU, IO e MEM (alcune, non tutte le query sono interessate)

Il valore massimo di TCPV4 Connections Established & Mssql UserConnections dipende dai seguenti fattori
     a. La complessità dell'istruzione di esecuzione è correlata: più complessa è l'affermazione, minore è il numero massimo di connessioni (questo effetto è molto importante)
     b. È collegata alla concorrenza dei thread della richiesta,
10 processi, ciascuno apre 5.000 thread da richiedere,SELECT getdate()La dichiarazione è già abbandonata quando arriva a circa 4000 (da quello che ho capito è che, sebbene molti thread non abbiano richiesto risorse, il numero di richieste è elevato, il che ha un impatto).
10 processi, ciascuno apre 1000 thread per richiedere, SELECT getdate()Le dichiarazioni possono superare le 10.000.
    c. È collegata alla frequenza delle richieste di thread
Se ogni thread esegue una query e si ferma per 0-10.000 millisecondi, occuperà meno connessioni rispetto a se non viene sospeso
    d. Nel test, si è anche riscontrato che alcune connessioni non chiuse avrebbero causato il gonfio del contatore, cosa non discussa
10 processi, ciascuno apre 1000 thread di richiesta, pausa casualmente (da 0 a 10 secondi) dopo ogni query sul server. I risultati del test sono i seguenti:
Esecuzione:SELEZIONA * DA [sistema]. [dbo]. [DBA_alert](questa query restituisce 200 linee, il numero massimo di connessioni è 700 e il problema inizia a essere emesso)
Quando il numero di connessioni raggiunge 700, iniziano a essere segnalati alcuni errori e a 12:00 cominciano ad apparire molti errori, e il numero di connessioni intorno a 18:00 rimane bloccato e non aumenta più. Errori e connessioni lente sono abbondanti
Esecuzione:SELECT getdate()Tempo della pena(Il numero massimo di connessioni è 3500 e il problema inizia)
Quando il numero di connessioni raggiunge 3500, alcune iniziano a segnalare errori, e la pressione massima raggiunge circa 11000, e il numero di connessioni continua a crescere lentamente. Errori e interruzioni di connessione lente

La conclusione è: in date condizioni di pressione: la più semplice da eseguireIl numero massimo di connessioni può arrivare fino a 3500 quando SELECT getdate() ed esegui SELECT * FROM [sistema]. [dbo]. [DBA_alert], il numero massimo di connessioni può arrivare fino a 700. Il timeout della query si verifica quando CPU, IO e MEM hanno tutti un gran numero di risorse inattive.
Nell'ambiente di produzione, la pressione di 10*1000 thread non può essere raggiunta, ma SQL sarà più complesso dell'ambiente di test.

Numero concorrenteIl collo di bottiglia non è causato dalla larghezza di banda del mio computer o della scheda di rete del server
Per dimostrare quanto sopra. Ho fatto i seguenti test: exec dbo.run2 in caso di grande concorrenza;

ALTER proc [dbo]. [run2]
come
imposta nocount su
seleziona getdate()
dichiara @i int
Set @i=0
mentre @i<1000 Quando questo valore è 1000, il numero massimo di connessioni è circa 1300, e quando questo valore è 10, è normale raggiungere 5000.
inizio
    INSERIRE IN [pub]. [dbo]. [tb_test] ([nome]) valori (newid())
    set @i=@i+1
fine

Vai

Il numero di cicli di cambiamento non influenzerà il risultato di ritorno, cioè la pressione sul traffico della scheda di rete è la stessa, ma uno scadrà rapidamente e l'altro potrà sempre essere controllato, così l'impatto della larghezza di banda delle schede di rete su entrambi i lati può essere eliminato.


Contenuto di errore quando il numero massimo di connessioni è bloccato:




netstat-un risultato quando il numero massimo di connessioni è bloccato (fortemente consolidato):





Diagramma di esecuzione del programma di prova quando il numero massimo di connessioni è bloccato:



Vale la pena notare:La connessione con errori o timeout non è uniforme, e sarà concentrata in alcuni processi, cioè alcuni processi possono sempre funzionare normalmente e l'altra parte riporterà errori per molto tempo (non ha nulla a che fare con l'ordine di inizio dei processi, da quanto ho capito alcuni processi hanno risorse, possono continuare a funzionare normalmente, mentre altri processi nei thread delle risorse originali sono preemptati e non possono applicarsi a nuove risorse, continueranno a segnalare errori ripetutamente). Come mostrato nella figura sopra, il secondo e il settimo processo hanno iniziato ad avere un gran numero di timeout e altri processi hanno continuato a funzionare. Sul server, le query possono apparire come non influenzate o meno influenzate da alcune macchine, e alcune macchine sono significativamente colpite.


Conclusione: Sebbene il limite superiore delle Connessioni Utente SQLSERVER sia legato a una serie di condizioni, è comunque possibile stimare e prevedere il collo di bottiglia; quando questo limite superiore sarà raggiunto, ci saranno un gran numero di query lente e timeout (anche se CPU, IO. MEM, traffico può verificarsi anche quando ci sono risorse inattive). Infatti, modificare alcuni parametri TCP aumenterà questo limite superiore, e potrei scrivere supplementi in seguito





Precedente:【Progetto Imprenditoriale】Wuhan Career Worry-Free Technology Co., Ltd. Supervisore del Campus di Reclutamento (Wuchang Institute of Technology)
Prossimo:Configura Python per accedere a SQLSserver sotto Redhat
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com