2011-12-30 2 views
1

У меня есть большая таблица, содержащая около 100 миллионов записей в MySQL. . Я хочу, чтобы прочитать все записи из него, и обрабатывать их в моем C#/Net программы, поэтому я написал код так:MySqlDataReader.Read() «Тайм-аут» при чтении из очень большой таблицы (более 100 миллионов записей)

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, чтобы использовать "предел":

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

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

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

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

+2

Почему вы пытаетесь чавкать 100million записи в память? это побеждает цель наличия базы данных и уменьшает весь SQL инфраструктуру в немую систему хранения –

+0

Как @MarcB, вероятно, правильнее, так или иначе что произойдет, если вы выберете [одно поле] из таблицы_ вместо «?», возможно, инфраструктура sql работает отлично, но ваш клиент просто не в памяти ... – rene

+0

Ну, на самом деле я встречаю проблему «тайм-аута», когда я соединяю две таблицы и выберите его часть (одна из таблиц - большая таблица, упомянутая в вопросе). Затем я обнаружил, что «тайм-аут» произошел, даже я написал «SELECT * FROM the_table». Я думаю, что если я могу исправить один, я могу исправить другое. поэтому я выбираю простой способ спросить. @MarcB – Hancy

ответ

1

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

+0

У меня точно такая же проблема. Это ошибка в соединителе MySql.NET? Вам не нужно приобретать больше программного обеспечения, чтобы это работало. – mcmillab

0

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

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

Надеется, что это помогает

 Смежные вопросы

  • Нет связанных вопросов^_^