Tengo un problema con el tiempo de espera de un script mientras obtengo datos de una consulta en una tabla grande.Tiempo de espera de conexión en la consulta en la tabla grande
La tabla tiene 9,521,457 filas.
La consulta que estoy tratando de preformas es:
SELECT *
FROM `dialhistory`
WHERE `customerId` IN (22606536, 22707251, 41598836);
Esta consulta se ejecuta sin problemas en HeidiSQL y toma de 171 segundos y devuelve 434 filas.
Pero cuando ejecuto mi secuencia de comandos C# lo agoto el tiempo de espera después de 161 filas.
16:54:55: Row 1
...
16:54:55: Row 161
16:55:32: Error -> Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Este es el código
public MySqlDatabase(string server, string database, string username, string password)
{
ConnectionString = "SERVER=" + server + ";DATABASE=" + database + ";UID=" + username + ";PASSWORD=" + password + ";";
}
public IQueryable<DailHistory> GetHistory(IList<int> customerIds)
{
IList<DailHistory> list = new List<DailHistory>();
var connection = new MySqlConnection(ConnectionString);
connection.Open();
var command = connection.CreateCommand();
command.CommandText = "SELECT * FROM `dialhistory` WHERE `customerId` in ("+string.Join(",", customerIds.ToArray())+")";
var reader = command.ExecuteReader();
int i = 1;
while (reader.Read())
{
Console.WriteLine(DateTime.Now.ToLongTimeString() + ": Row " + i);
i++;
try
{
var d = new DailHistory();
d.CustomerId = int.Parse((string) reader["customerId"]);
d.Agent = ParseNullAbleString(reader["agent"].ToString());
d.CallBackReason = ParseNullAbleString(reader["callBackReason"].ToString());
d.CallState = ParseCallSate(reader["callState"].ToString());
d.ContactResponse = ParseNullAbleString(reader["contactResponse"].ToString());
d.DailTime = new DailTime(reader["dialStart"].ToString(), reader["dialEnd"].ToString());
d.HistoryIndex = int.Parse(reader["historyIndex"].ToString());
d.Note = ParseNullAbleString(reader["note"].ToString());
d.OldDialNo = ParseNullAbleInt(reader["oldDialNo"].ToString());
d.ProjectJob = ParseNullAbleString(reader["projectJob"].ToString());
list.Add(d);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
reader.Close();
return list.AsQueryable();
}
command.CommandTimeout = 0; no funcionó :(aún se agotó el tiempo de espera – Androme
@DoomStone Su base de datos puede tener un tiempo de espera definido, cuando solicita el tiempo de espera usando commandTimeout esto puede ser reemplazado por la configuración de la base de datos. En mi caso, funcionó, pero en su caso podría ser un problema que necesita resolver con su DBA .. (para lectores futuros ... obviamente su problema fue hace años lo siento) – Chris