C # MySQL Connection - MultiThreading - Не удается подключиться

0

сначала все работает нормально. Я запускаю программу со 100 потоками, каждая из которых устанавливает соединение с базой данных. Через некоторое время я получаю следующее сообщение об ошибке:

"невозможно подключиться к любому из указанных узлов mysql" (Inner Exception: Connection Timed Out)

Сервер MySQL работает на Windows-машине (Win Server 2012).

Я установил лимит соединения mySql равным 10k, но проблема все еще возникает

using (MySqlConnection mConnection = new MySqlConnection(connectionString))
{
        mConnection.Open();

        using (MySqlCommand myCmd = new MySqlCommand("XXX"))
        {
            myCmd.CommandType = CommandType.Text;

            // DO STUFF HERE
            myCmd.Connection.Dispose();
        }

        mConnection.Close();
        mConnection.Dispose();
}
  • 0
    есть проблема в вашей строке подключения! который вы не опубликовали
  • 0
    Я думаю, вам лучше сделать свой код асинхронным и позволить планировщику задач обрабатывать потоки так, как он считает нужным. Создание потоков для работы, связанной с вводом / выводом, подобно вызовам базы данных, является пустой тратой потоков.
Показать ещё 4 комментария
Теги:
multithreading
connection
asynchronous

1 ответ

0

Возможно, это решит вашу проблему:

 using (MySqlConnection mConnection = new MySqlConnection(connectionString))
 {
     using (MySqlCommand myCmd = mConnection.CreateCommand())
     {
         mConnection.Open();
         myCmd.CommandTimeout = 60;
         myCmd.CommandType = CommandType.Text;
         myCmd.CommandText = "XXX";

         using (var reader = cmd.ExecuteReader())
         {
             while (reader.Read())
             {
                 // DO STUFF HERE
             }
         }
     }
 }

Вы можете установить значение таймаута по своему усмотрению (будьте осторожны, потому что тайм-аут находится в секундах не миллисекунды).

Вам также не нужно использовать .Close() и .Dispose() если вы используете using() {... }.

Изменить: обновить ответ в соответствии с комментариями ниже.

  • 0
    ConnectionTimeout доступен только для чтения. Мне нужно утилизировать и закрыть, потому что MySQL использует пул соединений. Использование в этом случае бесполезно.
  • 0
    Строка подключения правильная. Эта ошибка происходит только через некоторое время. Значит, прежде чем у меня есть успешные связи!
Показать ещё 17 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню