
Έχω ένα ερώτημα που τρέχει πολύ γρήγορο όταν εκτελείται στον επεξεργαστή SQL (Oracle): 1ms.


Το ίδιο ερώτημα (όπως αποθηκευμένη διαδικασία), όταν εκτελείται από έναν DataSet-TableAdapter διαρκεί 2 δευτερόλεπτα. Είμαι απλά ανάκτηση 20rows.


Επειδή είμαι χρησιμοποιώντας ένα TableAdapter, οι τιμές επιστροφή αποθηκεύονται σε μια διαιτητή δρομέα.


Αν ήμουν γοητευτικός 2'000 σειρές θα μπορούσα να καταλάβω ότι κάποια στιγμή χρειάζεται για την κατασκευή του συνόλου δεδομένων, εκτός από 2 δευτερόλεπτα μόνο 20 γραμμές φαίνεται πάρα πολύ για μένα.


Υπάρχει ένας καλύτερος τρόπος για να εκτελέσει SP στο μαντείο και αυτός είναι ο μόνος τρόπος; Τι θα μπορούσε να προσπαθώ να κάνω για να βελτιώσει τις επιδόσεις;


Ευχαριστώ για τη βοήθειά σου!




---


Αναζήτηση στο google, φαίνεται ότι το πρόβλημα είναι με το refcursor. Άλλοι άνθρωποι που αντιμετωπίζουν το ίδιο πρόβλημα απόδοσης, αλλά καμία λύση παρέχεται.

 
Κλήση Oracle SP με TableAdapter πολύ αργή
=========================================



Εντάξει. Βρήκα αυτό είναι το πρόβλημα.


Στην αρχή νόμιζα ότι ήταν ένα πρόβλημα της DataProvided, αλλά ότι δεν ήταν. Ανακάλυψα το ίδιο θέμα σε SQLServer 2000 ....


Ψάχνοντας στο google βρήκα κάτι σχετικά με το σχέδιο εκτέλεσης. Λαμβάνοντας αυτό τον τρόπο, θα ενισχυθεί η απόδοση του ερωτήματος του 50%.


Σύντομο βιογραφικό του προβλήματος είναι ότι κατά την εκτέλεση SP με κωδικό, το ΣΔΒΔ έχει κάποιο πρόβλημα με το σχέδιο εκτέλεσης, και δεν χρησιμοποιεί τους δείκτες ...


Η καλύτερη απάντηση είναι σε αυτή τη θέση:
 [Παράμετρος Sniffing (ή πλαστογράφηση) σε SQL Server](https://stackoverflow.com/questions/211355/parameter-sniffing-or-spoofing-in-sql-server)


Ελπίζω ότι αυτό θα σας βοηθήσει.

 

Ποια υπηρεσία παροχής δεδομένων χρησιμοποιείτε; 


Έχετε System.Data.OracleClient αναφορά ή να κάνετε χρησιμοποιείτε odp.net (πάροχος δεδομένων της Oracle για τη σύνδεση .NET εφαρμογές με Oracle) ή να κάνετε χρήση (παλαιότερα γνωστή ως Corelab) πάροχος DEVART του. 


Έχω καλές εμπειρίες με odp.net σε συνδυασμό με την Oracle 9. Μπορείτε να κατεβάσετε odp.net δωρεάν στην ιστοσελίδα μαντείο. Δείτε: <http://www.oracle.com/technology/tech/windows/odpnet/index.html> 


Μπορείτε να χρησιμοποιήσετε την τελευταία έκδοση (11.1.0.6.20) για να συνδεθείτε με μια βάση δεδομένων Oracle 9. 

 

Βεβαιωθείτε ότι η ρύθμιση του `CommandType`σε `CommandType.StoredProcedure`.


Για παράδειγμα (από [MSDN](http://msdn.microsoft.com/en-us/library/ms971506.aspx) ):



```
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;

```
 

Πόσο καιρό χρειάζεται όταν χρησιμοποιείτε ένα DataReader αντί για TableAdaptor; Θα προσπαθήσουμε το DataReader. Ποτέ δεν αντιμετώπισαν προβλήματα με το DataReader.

 