Lentezza query su linked server remoto

martedì 09 giugno 2009 - 16.05

donza Profilo | Newbie

Ciao a tutti,

è la prima volta che scrivo in questo forum, e volevo sarepere una cosa rigurdo il linked server di sql.
Cercherò di spiegarvi la situazione nel migliore dei modi.

Innanzi tutto ho 2 server che chiamerò :
SERVER_DATI (server non pubbliato, interno)
SERVER_WEB (server pubblicato internet)

Il SERVER_WEB è in DMZ ! Ma ho aperto le porte dei SQL 1433 per far "vedere" i 2 server.

Sul SERVER_WEB risiede il mi sito (IIS pagine ASPX) e il database web è in SQL EXPRESS.
Mentre sul SERVER_DATI il database è in SQL 2000.

Ho aggiunto su entrambi gli SQL server un LINKED SERVER, rispettivamente:
sul SERVER_DATI ho aggiunto il SERVER_WEB
sul SERVER_WEB ho aggiutno il SERVER_DATI

Tutto be fin qui i 2 server si "vedono", riesco a fare le query su entrambi, ecc...

C'è una cosa che non ho capito però :

ho un SP che lancio da una pagina web che su un server (quello sul quale risiede SERVER_DATI) è veloce (3 sec.) mentre se la lancio dal SERVER_WEB ci mette un sacco di tempo (35 sec.).
Perchè?????
come faccio a sapere che giro fanno i dati ??? passano da internet, sul dns???

fatemi chiarezza per favore

grazie

Ciao,
Marco






lbenaglia Profilo | Guru

>ho un SP che lancio da una pagina web che su un server (quello
>sul quale risiede SERVER_DATI) è veloce (3 sec.) mentre se la
>lancio dal SERVER_WEB ci mette un sacco di tempo (35 sec.).
>Perchè?????

Perché la prima query è eseguita localmente all'istanza di backend, mentre la seconda è una query distribuita eseguita dall'istanza di frontend che necessita di connettersi a quella di backend per recuperare i dati.
Ora, hai provato ad utilizzare la funzione OPENQUERY per eseguire una query pass-through?
http://msdn.microsoft.com/en-us/library/ms188427.aspx

>come faccio a sapere che giro fanno i dati ??? passano da internet,
>sul dns???
Se il server di backend non è esposto su internet (come è giusto che sia) potrà comunicare esclusivamente tramite la rete di backend, quindi non è possibile che gli accessi ad esso passino "da internet".

>grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

donza Profilo | Newbie

>Ora, hai provato ad utilizzare la funzione OPENQUERY per eseguire
>una query pass-through?
>http://msdn.microsoft.com/en-us/library/ms188427.aspx

grazie per la delucidazione.
ora sto provando ad usare la OPENQUERY, su una tabella oppure vista funziona, ma io devo eseguire uns SP
SELECT * FROM OPENQUERY([SERVER_DATI], 'EXEC WEBSP_PROVA ''DATO'',020080609,1,0,0,0');

Eseguendo questa però mi da il seguente errore:
Il provider OLE DB "SQLNCLI" per il server collegato "SERVER_DATI" indica che l'oggetto non ha colonne o che l'utente corrente non dispone delle autorizzazioni necessarie.

La SP ritorna comunque delle colonne ...

scusa, ho capito cosa non andava... ho dovuto aggiungere SET FMTONLY

SELECT * FROM OPENQUERY([SERVER_DATI], 'SET FMTONLY EXEC WEBSP_PROVA ''DATO'',020080609,1,0,0,0');

in questo modo va !!!

>>come faccio a sapere che giro fanno i dati ??? passano da internet,
>>sul dns???
>Se il server di backend non è esposto su internet (come è giusto
>che sia) potrà comunicare esclusivamente tramite la rete di backend,
>quindi non è possibile che gli accessi ad esso passino "da internet".

Passano da rete interna tramite DMZ, in quanto io ho collegato il SERVER_WEB con l'indirizzo della macchina interno non con quello pubblico


>>grazie
>Prego.
>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

donza Profilo | Newbie

mi manca solo una cosa ora:

riuscire a passare i parametri alla SP !

secondo te è possibile?
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5