Connection open error 返回

SqlSugar
23 181

English Message : Connection open error . Authentication to host 'xxx.xxx.xxx.xxx' for user 'xxx' using method 'caching_sha2_password' failed with message: Reading from the stream has failed.

MySQL大并发插入  有时候会报这个错误,请问怎么解决?

热忱回答23

  • 提供API 测试用例 

    0 回复
  • public class DaoMysql

    {

    //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.

    static readonly string _connstr = ConfigurationManager.ConnectionStrings["mysqlconn"].ConnectionString;

    //数据库实例

    private readonly SqlSugarScope _db;

    /// <summary>

    /// 数据库连接

    /// </summary>

    public DaoMysql()

    {

    _db = new SqlSugarScope(

    new ConnectionConfig()

    {

    ConnectionString = _connstr,//数据库连接

    DbType = DbType.MySql,//数据库类型

    //IsAutoCloseConnection = false,//

    IsAutoCloseConnection = true,//自动释放数据事务

    InitKeyType = InitKeyType.Attribute//从实体特性中读取主键列自增信息

    }

    );

    }

    #region 结果集管理

    /// <summary>

    /// 插入合成数据指标到tb_target

    /// </summary>

    /// <param name="TaskID"></param>

    /// <param name="TaskKey"></param>

    /// <param name="paramJson"></param>

    /// <returns></returns>

    public int InsertTarget(GtTargetModel model,string tablename)

    {

    return _db.Insertable(model).AS(tablename).ExecuteCommand();

    }

    #endregion

    }

    static DaoMysql dao = new();

    static void Main(string[] args)

    {

    List<Task> taskItems = new();

    for(int i = 0; i<1000000;i++)

    {

    Task.Factory.StartNew(() => dao.UpdateServer(mServerModel));

    taskItems.Add(Task.Factory.StartNew(() => dao.InsertTarget(GtTargetModel,"tablename")));

    }

    Task.WaitAll(taskItems.ToArray());

    }



    大致就是这样

    0 回复
  • @兔子先森: 用法错误

    0 回复
  • 这个是正确的用法 https://www.donet5.com/Home/Doc?typeId=2349 

    0 回复
  • 注意点

    1、关闭自动释放,使用手动 db.colse释放

    2、异步方法   Task.WhenAll

    3、db是同一个

    4、连接字符串加上 MultipleActiveResultSets=True

    5、使用完关闭连接

    6、考虑一下你的数据库处理能力


    0 回复
  • @fate stay night:Mysql 没有MultipleActiveResultSets=True

    0 回复
  • 拿我的例子直接去跑,直接复制就行了

    0 回复
  • 经过验证 MYSQL Task.WaitAll 执行时间长了就会报你刚才的错误

    0 回复
  • MYSQL.DATA 8.0.26 会比一般版本好些

    0 回复
  • https://blog.csdn.net/luokn1995/article/details/103605870/ 你可以看看相关配置 ,这个性能和SQLSEVER没办法比

    0 回复
  • SQLSERVER正常1000条只要1-2秒, MYSQL时间很长感觉像表锁住一样

    0 回复
  • Task.WaitAll 手动释放模式,目前就 SQLSEREVR 和 SQLITE 达到预期效果, ORACLE 其次,其他都不行 

    0 回复
  • 你可以换原生方法测试一下

    0 回复
  • @fate stay night:我用的是mysql8.0.21  像这种是不是没办法彻底解决了呢

    0 回复
  • @兔子先森:你用原生测试看看,像SQLITE SQERVER都秒级的, MYSQL并发请求好像锁表了等待时间就长了  感觉比同步都慢 

    0 回复
  • 如果用原生ADO也这样可能就需要查些资料了 ,是MYSQL需要配置还是本身这块支持就不好

    0 回复
  • @fate stay night:我换sqlserver 是不会出现这个问题了吗?

    0 回复
  • @兔子先森: SQLSEVER 1秒并发请求1000 可以处理 我这边测试下来

    0 回复
  • @fate stay night:好的,我试试


    0 回复
  • @兔子先森:经过测试 SqlSugarCore.MySqlConnector  异步并发性能要比 MYSQL.DATA高很多 基本接近ORACLE ,达到同步请求性能  

    0 回复
  • 离SQLSEVER和SQLITE差太多

    0 回复
  • 我这边是 MYSQL 5.7 的库,你也可以用高版本测试一下,至少我这个低版本 Task When ALL 性能确实不如人意

    0 回复
  • @fate stay night:好的好的,我试试。谢谢!

    0 回复