zoukankan      html  css  js  c++  java
  • ADO.NET数据库连接池的性能测试——出色的DB Pool

    1、问题 

        前几天项目中遇到一个性能问题:一个有近200个子单据的单据,提交时会非常慢,甚至会出现超出最大进程数这样的错误。

    查看代码,发觉对每个子单据都启动了流程,都要单独获取session与DB交互。查看DB中的session连接数,发觉每提交单据,session都会多达250+...

    2、想法

        当时第一感觉就是认为问题应该是在这里,就有了这样的想法:改变每个单据都占用session,而共享一个session来与DB交互,以提高应用的性能。初步设定与DB得交互次数在150左右。

    3、想法验证

         共享一个session的测试

    try
                {
                    conn.Open();
                    connCount
    ++;
                    trans 
    = conn.BeginTransaction();
                    
    for (int i = 0; i < 50; i++)
                    {
                        
    string random = rdm.Next().ToString();
                        Insert(
    string.Format(insertSql1,"姓名" + random),trans);
                        Insert(
    string.Format(insertSql2,"城市" + random),trans);
                        Update(
    string.Format(updateSql,random),trans);
                    }
                    dt 
    = Query(string.Format(querySql,rdm.Next(1,500)),trans);
                    trans.Commit();
                }
                
    catch(Exception ex)
                {
                    
    if (null != trans)
                        trans.Rollback();
                    Sav2File(
    "TestConnectionWithOne exception:" + ex.Message);    
                }
                
    finally
                {
                    
    if (null != conn)
                        conn.Close();

                } 

         独占一个session的测试(每个方法里包含了获取session和释放session的操作)

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

                {
                    
    string random = rdm.Next().ToString();
                    Insert(string.Format(insertSql1,"姓名" + random));
                    Insert(string.Format(insertSql2,"城市" + random));
                    Update(string.Format(updateSql,random));
                }

                DataTable dt = Query(string.Format(querySql,rdm.Next(1,500)));

    多次测试的平均结果: 

    独占session的:718.75 ms,建立数据库连接次数: 151

    共享session的:781.25 ms,建立数据库连接次数: 1 

     这个结果确实让我很吃惊,但足以证明了ADO.NET的数据库连接池做的是相当出色的。

    个人认为:共享的慢就慢在了采用了Transaction... 

  • 相关阅读:
    触发器
    新登录用户的次日成功的留存率
    获取薪水第二多的
    找到薪水比经理高的员工
    成绩排名
    exists 和 in
    sum+case 计数
    前N个员工的salary累计和
    员工的薪水按照salary进行按照1N的排名,相同salary并列
    洛谷2678 跳石头
  • 原文地址:https://www.cnblogs.com/FallingAutumn/p/1593151.html
Copyright © 2011-2022 走看看