多个线程执行多个查询时发生奇怪的连接错误 - Google Cloud SQL

时间:2014-07-16 05:45:34

标签: mysql google-cloud-sql

经过一些测试后,我发现google cloud sql并不是很快,我的主要问题是当我逐个执行许多查询时,不是一次,与多线程执行相比需要更长的时间。

所以,我决定通过线程同时执行许多查询,我使用此代码加载一些数据表:

    Dim T As New Threading.Thread(AddressOf loadPlacesData)
    Dim T2 As New Threading.Thread(AddressOf loadPortsData)
    Dim T3 As New Threading.Thread(AddressOf loadAgentsData)
    Dim T4 As New Threading.Thread(AddressOf loadAirlinesData)
    Dim T5 As New Threading.Thread(AddressOf loadCountriesData)
    Dim T6 As New Threading.Thread(AddressOf loadTransportCompaniesData)
    Dim T7 As New Threading.Thread(AddressOf loadHallsData)
    Dim T8 As New Threading.Thread(AddressOf loadUsersData)
    T.Start()
    T2.Start()
    T3.Start()
    T4.Start()
    T5.Start()
    T6.Start()
    T7.Start()
    T8.Start()

并且加载方法包含如下代码:

    Public Sub loadUsersData()
    Try
        Dim command As New MySqlCommand
        command.CommandType = CommandType.Text
        Dim Conn As New MySqlConnection(ConnectionString)
        command.CommandText = "Select UserID from Users"
        command.Connection = Conn
        Dim d As New MySqlDataAdapter(command)
        d.Fill(usersData)
        Conn.Dispose() : Command.Dispose()
        completed += 1
    Catch ex As MySqlException
        MsgBox(ex.Message, MsgBoxStyle.Exclamation)
    End Try
End Sub

它有时候工作得非常好而且很快,有时它不会加载任何东西并抛出这个异常:

Unable to connect to any of the specified MySQL hosts.

有什么问题?!它被随机抛出

1-我可以通过Workbench连接并执行任何查询而没有任何问题。

2-如果我不使用线程,它运作良好。

备注:

连接字符串:"Server=XX.XX.XX.XX;port=3306;Database=mydatabase;uid=root;password=mypass;SSlMode=Required;CertificateFile=C:\client-cert.pfx;certificatepassword='';pooling=true"

.Net 4.0 MySqlConnector 6.8.3

visual studio 2012

Google Cloud Sql:D1 - 512M RAM

感谢。

1 个答案:

答案 0 :(得分:0)

Cloud SQL D1实例有一个100 concurrent connection limit,也许你达到了这个限制?如果您一次多次运行此脚本,或者同事或计算机也访问该实例,则尤其如此。

如果您在实例上运行SHOW PROCESSLIST;,则可以获得打开的连接列表。