Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296

    Mistero su query con order by che inchioda il server

    Ciao tutti,

    oggi ho scoperto che la query

    "SELECT numerofatt FROM fatture ORDER BY numerofatt DESC"

    eseguita su un DB access mi faceva inchiodare IIS (sia la versione 6 W2003 che la 7 W2008).

    Controllando dal performance monitor, vedevo crescere il numero Totale Utenti Anonimi e di conseguenza delle richieste in coda fino ad arrivare a rendere il sito irraggiungibile.

    La query di per se eseguita in access ovviamente non crea alcun problema.

    Se sostituita con :

    "SELECT max(numerofatt) as numerofattura FROM fatture"

    Funziona benissimo è da un risultato immediato (l'obiettivo era in realtà ottenere l'ultimo numero di fattura emessa).

    L'unica spiegazione che ho saputo darmi è stata che l'accesso al DB access effettutato tramite ODBC, in presenza di una query con ORDER BY di fatto blocca l'accesso al DB da parte di altri utenti, creando una spece di coda che poi IIS non riesce a smaltire.
    Non riesco comunque a capire come mai l'esecuzione della query sulla tabella da circa 5000 record non venga portata a termine, mentre la query con il max() sia istantanea (il campo è ordinato).

    Un problema di Recordset troppo grande????

    Vi posto il codice.

    Mi piacerebbe capire se c'è un errore di codice. Grazie a tutti.

    codice:
    Set MyConn = Server.CreateObject("ADODB.Connection")
    ConnectionString = "DSN=gestionale"
    MyConn.Open ConnectionString, "", ""
    
    'VA IN ERRORE
    sqlT = "SELECT numerofatt FROM fatture ORDER BY numerofatt DESC"
    Set RT = MyConn.Execute(SQLT)
    numerofatt = RT("numerofatt")
    Set RT = Nothing
    
    
    'CORRETTA
    'sqlT = "SELECT max(numerofatt) as numerofattura FROM fatture"
    'Set RT = MyConn.Execute(SQLT)
    'numerofatt = RT("numerofattura")
    'Set RT = Nothing
    
    
    numerofatt = numerofatt + 1
    
    Response.Write "
    Query numerofatt OK " & numerofatt
    %>

  2. #2
    perché sei uno sprecone! perché devi ingolfare il server leggendo TUTTI i record quando te ne basta 1?

    puoi usare

    SELECT max(numerofatt) as numerofattura FROM fatture

    oppure

    SELECT TOP 1 numerofatt as numerofattura FROM fatture ORDER BY numerofatt DESC

    la prima è più performante

  3. #3
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296
    Si. Ma questo non risolve il dubbio amletico.

    Infatti quando ho riletto il codice mi è venuto subito in mente che era una query inutile/sbagliata. Per questo l'ho sostituita.

    Cio' non toglie che il problema persiste. Se avessi avuto veramente bisogno dell'elenco delle fatture?


    Idee????

  4. #4

  5. #5
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296
    yes.

  6. #6
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296
    La tabella del DB ha 5400 record il campo è indicizzato.
    La tabella ha molti campi, una 30ina.
    La query pero' fa riferimento ad un campo solo di tipo numerico.


    Il DB è compattato e ripristinato.

    Il Driver ODBC è quello presente su un W2008 aggiornato all'ultima patch senza software installato sopra.

    Il DSN è un DSN di sistema che punta ad un area esterna alla www root.
    Sul DB tutti i permessi sono ok infatti tramite altre pagine leggo aggiorno, cancello, ecc.
    Solo lettura ed esclusivo nelle proprietà del DSN NON sono flaggati



    Il problema potrebbe a mio avviso essere legato alla grandezza del recordset o all'uso eslcusivo del DB che accumula le query eseguite da altri utenti.

  7. #7
    che db usi? perché ODBC e non un driver diretto?

  8. #8
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296
    Perchè è fuori dalla root e per abitudine, sicurezza e comodità, uso sempre il DSN, se possibile.


    Il DB è Access, avevo dimenticato di scriverlo.

  9. #9
    forse ODBC introduce dei passaggi supplementari che bloccano il tutto...

  10. #10
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296
    Provo con una chiamata diretta e ti faccio sapere.

    Resta comunque il fatto che è una cosa abbastanza curiosa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.