У меня проблема с тайм-аутом сценария, в то время как выборка данных формирует запрос на большой таблице.Тайм-аут соединения по запросу на большой таблице
В таблице 9,521,457 строк.
Запрос Я пытаюсь Заготовку:
SELECT *
FROM `dialhistory`
WHERE `customerId` IN (22606536, 22707251, 41598836);
Этот запрос работает без проблем на HeidiSQL и занимает около 171 секунд и возвращает 434 строк.
Но когда я запускаю свой сценарий на C#, это истекает после 161 строки.
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.
Вот код
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; не работает :(он по-прежнему отключен – Androme 2010-11-30 16:20:59
@DoomStone В вашей базе данных может быть установлен тайм-аут, когда вы запрашиваете таймаут с помощью команды commandTimeout, это может быть переопределено конфигурацией базы данных. В моем случае это сработало для меня, но в вашем случае это может быть проблема, с которой вам нужно работать с вашим DBA .. (для будущих читателей .. очевидно, ваша проблема была годами извините) – Chris 2013-12-18 19:50:09