MySqlDataReader.Read() "Тайм-аут" при чтении из очень большой таблицы (более 100 миллионов записей)
У меня есть большая таблица, которая содержит около 100 миллионов записей в MySQL. Я хочу прочитать все записи и обработать их в моей программе на C#/.NET, поэтому я написал такой код:
string sql = "SELECT * FROM the_table";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
//...
}
Но после запуска в течение 3 минут возникает проблема тайм-аута.
Если я изменю оператор SQL, чтобы использовать "предел":
string sql = "SELECT * FROM the_table limit 60000000" //60 million
тогда это работает хорошо. (петля while (rdr.Read())
заняло около 3,8 минуты)
Был ли тайм-аут вызван слишком большим столом?
Что здесь происходит и как мне решить проблему?
2 ответа
ОК, я наконец-то локализовал проблему! Это потому, что я использовал " " драйвер ADO.NET для MySQL (Connector/Net), который был разработан MySQL. И могут быть некоторые ошибки. Затем я перехожу на использование dotConnect, проблема исчезла. Спасибо за помощь.
Я установил тайм-аут команды на более высокое значение, и это устранило проблему.
MySqlCommand mySqlCommand = new MySqlCommand(sql_cmd);
mySqlCommand.Connection = _connection;
mySqlCommand.CommandTimeout = 3600;
Надеюсь это поможет