Nous rencontrons des problèmes de performances majeurs lorsque SELECT interroge l'une de nos bases de données. Veuillez voir la procédure simple et le code associé ci-dessous.ODP.Net Problèmes de performances des procédures stockées sur les jeux de données volumineux
Dans le code, la méthode ExecuteReader() s'exécute en 10 secondes environ sur une requête renvoyant 30K enregistrements. Itérer le lecteur prend 2 minutes (même si je ne pomperai pas les données dans un autre objet). 2 minutes pour un ensemble de données de 30k lignes sont inacceptables pour nous, car nous attendons des millions de données.
Y at-il quelque chose ici qui se démarque à l'un de vous? En espérant que votre expérience avec ODP.NET et PL/SQL pourrait aider.
create or replace PROCEDURE TRACKING_FETCH (
p_tracking_id IN NUMBER,
p_parent_id IN NUMBER,
p_media_id IN NUMBER,
p_custodian_id IN NUMBER,
p_return_cursor OUT SYS_REFCURSOR)
AS
BEGIN
OPEN p_return_cursor FOR
SELECT
*
FROM
tracking
WHERE
(tracking_id = p_tracking_id OR p_tracking_id = 0)
AND (parent_id = p_parent_id OR p_parent_id = 0)
AND (media_id = p_media_id OR p_media_id = 0)
AND (custodian_id = p_custodian_id OR p_custodian_id = 0);
END TRACKING_FETCH;
-
using (DataFactory command
= new DataFactory(dbConnection,
DatabaseType.Oracle,
CommandType.StoredProcedure,
"TRACKING_FETCH"))
{
command.AddInParameter("p_tracking_id", DbType.Int32, trackingid);
command.AddInParameter("p_parent_id", DbType.Int32, parentid);
command.AddInParameter("p_media_id", DbType.Int32, mediaid);
command.AddInParameter("p_custodian_id", DbType.Int32, custodianid);
using (var dr = command.ExecuteReader())
{
while (dr.Read())
{
//Do Things...
}
}
}
sera grandement appréciée Toute orientation.
Même si vous aviez raison au sujet de la latence qui nous tue, je n'ai pas réalisé que chaque lecture du lecteur de données était un aller-retour. Nous avons résolu ce problème en définissant le champ 'FetchSize' sur OracleDataReader, qui indique au lecteur le nombre de données à ramener à chaque aller-retour. Merci pour votre aide. – mattdlong