MySqlDataReader.Read () «Тайм-аут» при чтении из очень большой таблицы (более 100 миллионов записей) - PullRequest
1 голос
/ 30 декабря 2011

У меня есть большая таблица, которая содержит около 100 миллионов записей в MySQL. Я хочу прочитать все записи из него и обработать их в моей программе C # /. Net, поэтому я написал такой код:

string sql = "SELECT * FROM the_table";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
//...
}

Но после 3 минут работы возникает проблема тайм-аута. This is the error output:

Если я изменю оператор SQL на «limit»:

string sql = "SELECT * FROM the_table limit 60000000" //60 million

тогда все работает хорошо. (цикл while (rdr.Read()) занял около 3,8 минуты)

Был ли тайм-аут вызван слишком большим столом?

Что здесь происходит и как мне решить проблему?

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

ОК, я наконец локализовал проблему! Это потому, что я использовал драйвер * ADO.NET для MySQL (Connector / Net) который был разработан MySQL. И могут быть некоторые ошибки. Затем я переключаюсь на dotConnect , проблема исчезла. Спасибо за помощь.

0 голосов
/ 05 января 2018

Я установил для тайм-аута команды более высокое значение, и это устранило проблему.

 MySqlCommand mySqlCommand = new MySqlCommand(sql_cmd);
 mySqlCommand.Connection = _connection;
 mySqlCommand.CommandTimeout = 3600;

Надеюсь, это поможет

...