8

我有一个在 Amazon Aurora RDS 中的 MySQL 数据库上执行查询的 .NET 应用程序。该数据库是 MySQL 5.6 数据库 - Aurora 附带的版本。

我对数据库(名称:SSIMLoader)中的模式(名称:flight)执行查询。我正在使用 MySQL 6.9.8.0 库。

编辑:连接字符串指向集群中的主服务器,而不是特定的服务器。

执行插入、选择和更新时会发生错误,因此没有真正的模式。即使是简单的选择语句也会随机失败。

但是,通过 MySQL 工作台执行查询时,我们没有收到此类错误。

重新启动服务器后,错误消失几天,然后返回。

我们有一些非常激烈的查询,确实会在很长一段时间内将 CPU 提高到 90%,但即使 CPU 回落到 10%,错误仍然存​​在。

有没有其他人经历过这种情况,如果有,你是如何克服的?

提前致谢。

  • 编辑: 终于再次得到错误:

    MySql.Data.MySqlClient.MySqlException (0x80004005):MySql.Data.MySqlClient.MySqlStream.ReadPacket() 的 MySql.Data.MySqlClient.NativeDriver.ReadOk 的 MySql.Data.MySqlClient.MySqlConnection 的未知数据库“飞行”(布尔读取) .ChangeDatabase(String databaseName) 在 MySql.Data.MySqlClient.MySqlConnection.Open() 在 MySql.Data.MySqlClient.MySqlConnection.Open() 在 Universal.Access.Database.BaseDatabaseConnection.EstablishFactoryConnection() 在 Universal.Access.Database.BaseDatabaseConnection .ExecuteReader(CommandType commandType, CommandText commandText) 在 Universal.Core.DataModel.ExecutableDatabaseConnection.ExecuteQuery(String sqlQuery) 在 C:\tc-projects\universal-platform\Universal.Core\DataModel\ExecutableDatabaseConnection.cs:line 65

这是正在运行的查询:

UP-DEV | Universal.Core.Data.Importer Error finding current record, SQL: SELECT aircraft_config,updated_by,asa_flight_id,atd_utc,bay,terminal,is_cancelled,flight_number,created_at,from_iata,flight_date_utc,std_local,takeoff_time_local,is_international,is_aerocare,cobt_local,customer_atd_local,takeoff_time_utc,std_utc,atd_local,asa_state,aircraft_type,customer_atd_utc,carrier_code,updated_at,gate,service_type,etd_local,cobt_utc,flight_status,etd_utc,aircraft_rego,created_by,id,flight_date,to_iata FROM flight.departure_flight WHERE carrier_code='JQ' AND flight_date_utc='2017-01-20T00:00:00' AND flight_number='57' AND from_iata='MEL'. Database returned: Unknown database 'flight'

4

2 回答 2

7

虽然我不确定是什么具体触发了该问题(似乎打开的连接可能会以某种方式在 RDS 集群端处于断开状态),但似乎激进的连接池和重用加剧了该问题客户端发生在 MySQL .NET 连接器中。

一旦问题发生,受影响的连接似乎只是留在池中,被任意从池中提取并一遍又一遍地重新使用。(很可能与您如何看待问题开始后继续随机发生有关。)

添加Connection Lifetime=x到连接字符串中,x 是连接保持活动以供重复使用的时间(以秒为单位),似乎至少可以减轻症状。

于 2017-09-27T19:29:24.887 回答
1

因此,当 Aurora 实例 cpu 为 100% 时,似乎会发生此错误。连接找不到指定的数据库,因为它无法连接到实例,因为没有剩余线程可用于建立连接。

于 2017-04-03T03:58:19.653 回答