HOW TO: Troubleshoot prestazioni delle applicazioni con SQL Server

Traduzione articoli Traduzione articoli
Identificativo articolo: 224587 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Questo articolo viene descritto come risolvere i problemi relativi a SQL in dettaglio i problemi di prestazioni server. Risoluzione dei problemi di prestazioni comporta l'utilizzo di una serie di passaggi per isolare e determinare la causa del rallentamento di un'applicazione. Alcune cause possibili sono:
  • Blocco.
  • Conflitto di risorse di sistema.
  • Problemi di progettazione dell'applicazione.
  • Un insieme particolare di query o stored procedure con lunghi tempi di esecuzione.
In questo articolo viene descritto come determinare l'origine di un problema di prestazioni. Fa riferimento anche altri articoli nella Knowledge Base che trattano dei dettagli di problemi di prestazioni specifici per l'ulteriore risoluzione dei problemi.

SQL Profiler


SQL Profiler Ŕ uno strumento potente per risolvere il problema di SQL Server 7.0, o versione successiva, applicazione prestazioni. SQL Profiler consente di acquisire facilmente tutti gli eventi che si verificano sul server in un tipico carico, e fornisce informazioni su di essi. Utilizzando SQL Profiler in combinazione con Microsoft Windows NT Performance Monitor e alcune query semplice per identificare se il blocco Ŕ in corso verranno fornite le informazioni Ŕ necessario risolvere la maggior parte dei problemi di prestazioni.

Elementi da controllare

1. Intervallo impostato tra SQL Profiler per acquisire una traccia. Per effettuare questa operazione, attenersi alla seguente procedura:
  1. Aprire SQL Profiler.
  2. Scegliere Opzioni dal menu Strumenti .
  3. Assicurarsi che il All Event Classes e le opzioni All Data Columns sono selezionate.
  4. Fare clic su OK .
  5. Creare una nuova traccia.
  6. Scegliere Nuovo dal menu file , quindi traccia .
  7. Nella scheda Generale specificare un nome di traccia e un file per acquisire i dati.
  8. Nella scheda eventi , aggiungere i seguenti tipi di evento per la traccia:

    Riduci questa tabellaEspandi questa tabella
    TitoloEvento da aggiungereDescrizione
    CursoriCursorPrepareQuesto evento indica che un cursore di un'istruzione SQL Ŕ stato preparato utilizzando ODBC, OLEDB o di DB-Library.
    Errore e avvisoColonna mancante statisticheQuesto evento indica che le statistiche di colonna sarebbe stato utile per l'ottimizzazione guidata non erano disponibili. La colonna di testo Visualizza l'elenco di colonne con statistiche mancanti. Questo evento, in combinazione con un varie: Auto-UpdateStats evento, indica che Ŕ stata attivata l'opzione Automatico Crea statistiche .
    VarieAttenzioneQuesto evento indica che un client ha inviato un segnale di attenzione.
    VarieAuto-UpdateStatsQuesto evento indica che Ŕ stata attivata l'opzione di Aggiornamento automatico statistiche .
    VarieExec preparati SQLQuesto evento indica che di DB-Library, ODBC o OLE DB eseguita un'istruzione Transact-SQL preparata in precedenza o le istruzioni.
    VariePiano di esecuzioneQuesto evento mostra la struttura del piano dell'istruzione Transact-SQL che Ŕ stata eseguita.
    VariePreparazione di SQLQuesto evento indica che in un'applicazione ODBC, OLE DB o DB-Library sono state preparate una o pi¨ istruzioni Transact-SQL da eseguire.
    VarieAnnullamento preparazione SQLQuesto evento indica che in un'applicazione ODBC, OLE DB o DB-Library una o pi¨ istruzioni Transact-SQL da eseguire sono state convertite in non preparate.
    SessioniConnettersiQuesto evento indica che Ŕ stata stabilita una nuova connessione.
    SessioniDisconnettereQuesto evento indica che un client Ŕ stato disconnesso.
    SessioniConnessione esistenteQuesto evento indica l'esistenza di una connessione all'avvio della traccia SQL Profiler.
    Stored procedureSP: CompletedQuesto evento indica il completamento dell'esecuzione di una stored procedure.
    Stored procedureSP: ricompilareQuesto evento indica che una stored procedure Ŕ stata ricompilata durante l'esecuzione.
    Stored procedureSP: StartingQuesto evento indica l'inizio dell'esecuzione di una stored procedure.
    Stored procedureSP: StmtCompletedQuesto evento indica che quando un'istruzione in una stored procedure Ŕ stata completata l'esecuzione.
    TSQL:SQL: BatchCompletedQuesto evento indica che un batch Transact-SQL Ŕ stata completata. Nella colonna Text Ŕ riportata l'istruzione che Ŕ stata eseguita.
    TSQL:SQL:StmtCompletedQuesto evento indica un'istruzione Transact-SQL completata. Nella colonna Text Ŕ riportata l'istruzione che Ŕ stata eseguita.
    TSQL:RPC: CompletedQuesto evento indica il completamento di una chiamata di procedura remota (RPC, Remote Procedure Call).
  9. Se nell'applicazione vengono visualizzati errori di timeout, se l'applicazione si blocca oppure se si verificano altri eventi che impediscono il completamento dell'istruzione che causa il problema, includere anche i seguenti eventi:

    Riduci questa tabellaEspandi questa tabella
    TSQL:SQL: BatchStartingQuesto evento indica l'inizio di un batch Transact-SQL. Nella colonna Text Ŕ riportata l'istruzione in esecuzione.
    TSQL:SQL:StmtStartingQuesto evento indica l'inizio di un'istruzione Transact-SQL. Nella colonna Text Ŕ riportata l'istruzione in esecuzione.
    TSQL:RPC: avvioQuesto evento indica l'inizio di una chiamata a procedura remota (RPC).
    Stored procedureSP: StmtStartingQuesto evento indica quando un'istruzione in una stored procedure Ŕ avvio dell'esecuzione.


    Questo consentirÓ di verificare che Ŕ possibile visualizzare l'istruzione che era in esecuzione quando si Ŕ verificato il timeout
  10. Nella scheda Colonne di dati , assicurarsi che le colonne seguenti siano incluse:

    per SQL Server 2000

    Ora di inizio

    Ora di fine

    LoginSid

    SPID

    Classe di evento

    TextData

    IntegerData

    BinaryData

    Durata

    CPU

    Letture

    Operazioni di scrittura

    Nome applicazione

    Utente NT nome

    DBUserName


    per SQL Server 7.0

    Ora di inizio

    Ora di fine

    Connessione ID

    SPID

    Classe di evento

    Testo

    Valore integer Data

    Dati binari

    Durata

    CPU

    Letture

    Operazioni di scrittura

    Nome applicazione

    Utente NT nome

    Nome utente SQL

Per informazioni sull'utilizzo di SQL Profiler, vedere SQL Server 7.0 e documentazione in linea di SQL Server 2000.


2. Utilizzare Performance Monitor per acquisire Windows NT e SQL Server contatori. Per effettuare questa operazione, attenersi alla seguente procedura:
  1. Avviare Windows NT Performance Monitor.
  2. Nel menu Visualizza , fare clic su log .
  3. Nel menu Opzioni , fare clic su log .
  4. Specificare un file e un percorso in cui registrare i contatori delle prestazioni. ╚ possibile modificare l'intervallo di aggiornamento secondo le necessitÓ.
  5. Nel menu Modifica , fare clic su Aggiungi per registro .
  6. Aggiungere tutti gli oggetti. Sia Windows NT e SQL Server gli oggetti.
  7. Per avviare il registro, dal menu Opzioni , fare clic su Registro e quindi fare clic sul pulsante Start Log .

Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
150934Creazione di un file registro di Performance Monitor per la risoluzione dei problemi di Windows NT

3. Il controllo per il blocco.

Per verificare se il blocco Ŕ che si verificano, eseguire il sp_who stored procedure di sistema:
exec sp_who
L'output conterrÓ una colonna di blk . Esaminare l'output per le voci di diverso da zero per indicare che il blocco Ŕ in corso. Eseguire questa procedura periodicamente in tutto l'intervallo di tempo quando si verifica il rallentamento delle prestazioni.

Nota Esecuzione di stored procedure Ŕ un controllo per verificare se il blocco del sistema di sp_who esistente. In genere, non Ŕ informazioni sufficienti per risolvere completamente un problema di blocco. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
251004INF: How controllare il blocco di SQL Server 7.0

Eseguire l'applicazione in tipica di carico

In teoria, Ŕ preferibile acquisire il SQL Profiler, Performance Monitor e l'output di blocco durante il periodo stesso. Questo intervallo di tempo deve includere un'ora quando le prestazioni dell'applicazione passa da ottimali a degradate. La combinazione di queste informazioni consente di ottenere una panoramica chiara di in cui Ŕ in corso il rallentamento delle prestazioni.


Interpretazione dei risultati

  1. Controllo per il blocco.

    Se la colonna blk l'output di sp_who Ŕ diverso da zero, significa che il blocco Ŕ in corso nel sistema. Se i processi si bloccano reciprocamente, i processi che vengono bloccati possono verificarsi pi¨ lunghi tempi di esecuzione. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
    224453INF: Informazioni e risoluzione dei problemi blocco di SQL Server 7.0 o 2000
  2. Esaminare l'output di SQL Profiler.

    Visualizzazione in modo efficiente i dati di SQL Profiler Ŕ estremamente utile nella risoluzione dei problemi di prestazioni. La cosa pi¨ importante per realizzare consiste nel dover esaminare tutto ci˛ che Ŕ stato acquisito. Essere selettivi. SQL Profiler fornisce funzionalitÓ per garantire efficienza visualizzare i dati acquisiti. Nelle schede di ProprietÓ (scegliere ProprietÓ dal menu file ), SQL Profiler consente di limitare i dati visualizzati rimuovendo colonne di dati o eventi, raggruppando (ordinamento) le colonne di dati e applicando filtri. ╚ possibile cercare la traccia intera o solo una colonna specifica per valori specifici (dal menu Modifica , scegliere Trova ). ╚ inoltre possibile salvare i dati di SQL Profiler in una tabella SQL Server (scegliere Salva con nome dal menu file , scegliere Tabella di traccia ) e quindi eseguire query SQL su di essa.

    Prestare attenzione a eseguire il filtro solo su un file di traccia salvato in precedenza. Se si esegue questa procedura su una traccia attiva, si rischia di perdere i dati registrati dal momento in cui Ŕ stata avviata la traccia. Salvare una traccia attiva in un file o la prima tabella (dal menu file scegliere Salva con nome ) e quindi riaprirlo (scegliere Apri dal menu file ) prima di continuare. Quando si lavora su un file di traccia salvato, il filtro non permanente rimuove i dati che sono stato escluso; sufficiente non viene visualizzato. Per definire meglio la ricerca, Ŕ possibile aggiungere e rimuovere eventi e colonne di dati.

    Il primo passaggio in analisi di file di traccia SQL Profiler per i casi le prestazioni Ŕ determinare in cui i diversi tipi di eventi si verificano sul server.

    gruppo traccia dalla classe di evento :

    a. scegliere ProprietÓ dal menu file .

    b. nella scheda Colonne di dati , utilizzare il pulsante UP per spostare Event Class sotto l'intestazione Groups e il pulsante DOWN per rimuovere tutte le altre colonne sotto l'intestazione gruppi .

    c. fare clic su OK .

    Raggruppamento in base alla colonna di classe di evento viene visualizzato il tipo di eventi si verificano in SQL Server e con quale frequenza. Cercare in questa colonna i seguenti eventi:

    SP:RECOMPILE

    Questo evento indica che una stored procedure Ŕ stata ricompilata durante l'esecuzione. Numerosi eventi di ricompilazione indicano che SQL Server Ŕ dedicare risorse alla compilazione della query anzichÚ l'esecuzione di query.

    Per ulteriori informazioni sulla risoluzione dei problemi di ricompilazione delle stored procedure, fare clic numero articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
    243586INF: Troubleshooting ricompilazione delle stored procedure


    attenzione

    Questo evento indica che un client ha annullato una query. Si tratta generalmente a causa di uno dei due cause:

    L'utente in modo esplicito annullata la query o terminata l'applicazione.

    - oppure -

    ╚ stato superato un timeout di query.

    Se viene visualizzato segnali di attenzione, ci˛ potrebbe indicare che determinate query vengono eseguite lentamente.

    Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
    243589HOW TO: Troubleshoot lente a esecuzione query in SQL Server 7.0 o versione successiva
    Per identificare la query che ha ricevuto il segnale di attenzione, modificare la traccia in modo che non Ŕ raggruppato qualsiasi colonna di dati e filtrare il sistema ID di processo (SPID) che ricevuto (nella scheda filtri , impostare SPID = x ). L'evento SQL:StmtStarting , SQL: BatchStarting o SP: StmtStarting precede il segnale di attenzione Ŕ la query che ha ricevuto il timeout o annullare. ╚ possibile cercare l'evento di attenzione per individuare facilmente la colonna Event Class (dal menu Modifica , scegliere Trova ).

    PREPARE SQL ed EXEC PREPARED SQL

    L'evento di Prepare SQL indica che in un'applicazione ODBC, OLE DB o DB-Library sono state preparate un'istruzione, o pi¨ istruzioni per l'utilizzo. L'evento Exec Prepared SQL indica che l'applicazione si Ŕ effettuato istruzione per eseguire un comando preparata di utilizzo di un'esistente.

    Verificare quante volte si sono verificati questi due eventi. In teoria, un'applicazione deve preparare un'istruzione SQL una sola volta e l'esecuzione pi¨ volte. In questo modo si evita che l'utilitÓ di ottimizzazione compili un nuovo piano ogni volta che si esegue l'istruzione. Di conseguenza, il numero di eventi Exec Prepared SQL deve essere molto pi¨ il numero di eventi Prepare SQL grande. Se il numero di eventi Prepare SQL Ŕ approssimativamente al numero di eventi Exec Prepared SQL , potrebbe significare che l'applicazione non esegue buona utilizzare il modello di preparazione/esecuzione. ╚ preferibile non preparare un'istruzione che solo sta per essere eseguito una sola volta. Per ulteriori informazioni sulla preparazione di istruzioni SQL, vedere l'argomento di "Preparazione di istruzioni SQL" nella documentazione in linea di SQL Server 7.0.

    Se il numero di eventi Exec Prepared SQL non Ŕ tre a cinque volte maggiore del numero di eventi Prepare SQL , l'applicazione potrebbe non eseguire un utilizzo efficiente del modello di preparazione/esecuzione. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
    243588HOW TO: Troubleshoot le prestazioni di query ad Hoc

    In SQL Server 2000, le comunicazioni eccessivo per preparare, eseguire verranno eliminati, pertanto il rapporto 3-5 non Ŕ come restrittivi. Tuttavia, pu˛ essere comunque una buona regola, per tentare di riutilizzare il piano preparato pi¨ volte.

    colonna mancante statistiche

    Questo evento indica che non erano disponibili le informazioni statistiche che avrebbero dovuto essere utilizzate dall'utilitÓ di ottimizzazione per generare un migliore piano della query. Indica inoltre che la query non dispone di indici utili almeno in una delle tabelle richieste. Oltre a non hanno un indice utile, SQL Server non Ŕ necessario anche i dati statistici sulle colonne necessari per prendere una decisione consapevole per un piano di query. Il risultato Ŕ che il piano della query generato potrebbe non essere quello ottimale. In presenza di questi eventi, esaminare la query e il piano di esecuzione generato e quindi vedere il seguente articolo della Microsoft Knowledge Base per la procedura da intraprendere per migliorare le prestazioni della query:
    243589HOW TO: Troubleshoot lente a esecuzione query in SQL Server 7.0 o versione successiva

    Quando si visualizzano gli eventi Missing Column Statistics , lo stato attivo innanzitutto sul quelli che si verificano in associazione a query con esecuzione prolungata. Alcuni eventi possono essere generati e risolti automaticamente in SQL Server con la funzione di creazione automatica delle statistiche e potrebbero non richiedere l'intervento dell'utente. Di conseguenza, la strategia migliore Ŕ di concentrarsi prima sulle query con durata estesa, come illustrato pi¨ avanti in questo articolo e una Nota Se sono presenti eventi Missing Column Statistics associati.

    Se non viene visualizzato di istanze di queste classi di evento, il passaggio successivo consiste nel determinare dove tempo trascorso.

    gruppo di output della traccia per durata :

    a. scegliere ProprietÓ dal menu file .

    Nella scheda Colonne di dati , utilizzare il pulsante UP per spostare Duration sotto l'intestazione Groups e il pulsante DOWN per rimuovere tutte le altre colonne sotto l'intestazione gruppi .

    c. nella scheda eventi , rimuovere tutti i gruppi tranne TSQL e stored procedure .

    d. fare clic su OK .

    Il raggruppamento su durata, Ŕ possibile visualizzare facilmente quali istruzioni SQL, batch o procedure sono in esecuzione la minima. ╚ molto importante osservare non solo in quale momento si verifica il problema, ma ottenere anche una linea di base delle prestazioni ottimali per effettuare un confronto. ╚ possibile filtrare ora di inizio per suddividere la traccia in sezioni durante buone prestazioni e una sezione separata per quando Ŕ stata una riduzione delle prestazioni. Verificare quali query richiedevano tempi di esecuzione pi¨ lunghi nel periodo di prestazioni soddisfacenti. ╚ molto probabile che siano proprio queste query la causa del problema. Se prestazioni complessive del sistema sono ridotto, buona anche query possibile visualizzare le durate lunghe come in attesa di risorse di sistema.

    Se si rileva un numero limitato di query con tempi di esecuzione lunghi, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    243589HOW TO: Troubleshoot lente a esecuzione query in SQL Server 7.0 o versione successiva
    Se si nota che la durata delle singole query Ŕ breve, ma esistono numerosi di questi e il contatore SQL Compilations/sec in Monitor di sistema Ŕ elevato output (descritto pi¨ avanti), vedere il seguente articolo della Microsoft Knowledge Base riportato di seguito:
    243588HOW TO: Troubleshoot le prestazioni di query ad Hoc
    esaminare le restanti colonne di dati :

    Ulteriori informazioni sulla natura del problema di prestazioni possono essere ottenute visualizzando le altre colonne di dati nel file di traccia. Qui vengono indicate alcune possibili da prendere in considerazione:

    Se l'utilizzo della CPU Ŕ elevato, raggruppare per CPU per verificare quali query sono gli utenti pi¨ grandi del tempo di CPU. Cercare la colonna di testo per "hash" o "merge" per trovare il piano di esecuzione query utilizza questi tipi di join. Sono pi¨ CPU e memoria elevato rispetto a un join di ciclo nidificato, che Ŕ in genere I/O intensivo.

    Se il collo di bottiglia Ŕ causato dall'I/O su disco, raggruppare i dati per letture e scritture. Visualizzare i campi Nome applicazione , NTUserName e Sqlusername consente di isolare l'origine di una query a esecuzione prolungata.

    Nella colonna <b>Integer Data</b> dell'evento di eccezione saranno presenti gli eventuali errori restituiti al client. Per trovare il testo del messaggio di errore, cercare il numero corrispondente nella documentazione in linea di SQL Server 7.0.

    Il campo ID connessione Ŕ utile per assicurarsi che si sta esaminando le stesse sessioni per un client specifico. Uno SPID non garantisce, un utente potrebbe sono disconnessi e un nuovo utente connesso e ha ricevuto lo stesso SPID.

    Il vantaggio che derivato da questi campi pu˛ variare a seconda dello scenario, ma deve essere esaminati se i campi ovvi precedenti in questo articolo non forniscono una risposta.
  3. Esaminare l'output di Performance Monitor.

    In Performance Monitor Ŕ possibile visualizzare tutti i colli di bottiglia a livello di sistema. ╚ possibile che le prestazioni di SQL Server e dell'applicazione siano quelle previste, ma che il computer sia sottoalimentato, che non disponga di memoria sufficiente o di altre risorse. Inoltre, determinati contatori possono indicare problemi relativi alla modalitÓ di esecuzione dell'applicazione e di SQL Server. Come minimo, controllare i seguenti contatori:

  • Oggetto: processo

    Contatore: processore

    Istanza: SQL Server

  • Oggetto: processore

    Contatore: % Processor Time

    Istanza: Controlla ciascuna istanza del processore

  • Oggetto: Disco fisico

    Coda del disco Media contatore: Lunghezza

    Istanza: Controlla ciascuna istanza di disco fisico

  • Oggetto: Statistiche SQL: SQL Server

    Contatore: SQL Compilations/sec
Cercare una tendenza attraverso l'intervallo di tempo da quando le prestazioni Ŕ passato da ottimali a degradate: che cosa incrementati per primi? Il computer Ŕ limitato dalla CPU o dell'I/O su disco? Queste informazioni, con l'output di Profiler in precedenza in questo articolo consente di restringere le aree del problema. Un numero elevato di problemi relativi alla CPU potrebbe indicare quantitÓ elevate di ricompilazioni di stored procedure, di compilazioni di query ad hoc o un uso intensivo di join hash e merge. Gli articoli a cui fa riferimento pi¨ indietro in questo articolo devono essere seguiti per determinare l'azione corretta. Code del disco particolarmente lunghe potrebbero inoltre indicare la necessitÓ di una maggiore quantitÓ di memoria o di un sottosistema del disco migliore.

ProprietÓ

Identificativo articolo: 224587 - Ultima modifica: venerdý 26 ottobre 2007 - Revisione: 4.3
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 7.0 Standard Edition
Chiavi:á
kbmt kbproductlink kbhowtomaster kbhowto kbinfo KB224587 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 224587
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com