ADODatabase *CDBConPool::GetDBConnect(int Index)
{
CADODatabase *pDatabase = NULL;
for (int i = 0;i < m_ConnectList.size(); i++)
{
if (m_ConnectList[i]->m_Tag == Index)
{
pDatabase = m_ConnectList[i];
break;
}
}
if (!pDatabase)
{
for (int i = 0;i < m_ConnectList.size(); i++)
{
if (m_ConnectList[i]->m_Tag == 0)
{
m_ConnectList[i]->m_Tag = Index;
pDatabase = m_ConnectList[i];
break;
}
}
} if (!pDatabase)
{
if (GetPoolSize() < m_MaxPoolSize)
{
pDatabase = AddDBConnect(Index);
}
else
{
if (GetPoolSize()) pDatabase = m_ConnectList[0];
}
} if (pDatabase)
{
if (!pDatabase->IsOpen())
{
if(!pDatabase->Open(m_ConnectString.GetBuffer(), m_UserName.GetBuffer(), m_Password.GetBuffer()))
{
pDatabase = NULL;
} m_ConnectString.ReleaseBuffer();
m_UserName.ReleaseBuffer();
m_Password.ReleaseBuffer();
}
}
return pDatabase;
}
我的程序中采用线程池的方式处理,每个线程中都调用GetDBConnect(threadId)获取数据库连接,然后进行数据库操作,我设置的数据库最小值 同最大值分别为10,20,为什么我用 show processlist查询数据库连接数时,发现我的数据库连接数大于30

解决方案 »

  1.   

    | 27157 | DBAdmin | 121.9.212.54:4720   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27158 | DBAdmin | 121.9.212.54:4721   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27159 | DBAdmin | 121.9.212.54:4722   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27160 | DBAdmin | 121.9.212.54:4723   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27161 | DBAdmin | 121.9.212.54:4724   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27162 | DBAdmin | 121.9.212.54:4725   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27163 | DBAdmin | 121.9.212.54:4726   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27164 | DBAdmin | 121.9.212.54:4727   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27165 | DBAdmin | 121.9.212.54:4728   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27166 | DBAdmin | 121.9.212.54:4729   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27167 | DBAdmin | 121.9.212.54:4730   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27168 | DBAdmin | 121.9.212.54:4731   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27169 | DBAdmin | 121.9.212.54:4732   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27170 | DBAdmin | 121.9.212.54:4733   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27171 | DBAdmin | 121.9.212.54:4734   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27172 | DBAdmin | 121.9.212.54:4735   | playerjumpcs16             | Sleep   |
     13639 |       | NULL             |
    | 27173 | DBAdmin | 121.9.212.54:4861   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27174 | DBAdmin | 121.9.212.54:4862   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27175 | DBAdmin | 121.9.212.54:4863   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27176 | DBAdmin | 121.9.212.54:4864   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27177 | DBAdmin | 121.9.212.54:4865   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27178 | DBAdmin | 121.9.212.54:4866   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27179 | DBAdmin | 121.9.212.54:4867   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27180 | DBAdmin | 121.9.212.54:4868   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27181 | DBAdmin | 121.9.212.54:4869   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27182 | DBAdmin | 121.9.212.54:4870   | playerjumpcs16             | Sleep   |
     13628 |       | NULL             |
    | 27192 | DBAdmin | 121.9.212.54:4874   | playerjumpcs16             | Sleep   |
       696 |       | NULL             |这是我的数据库连接
      

  2.   

    mysql> show variables like 'max_connections';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | max_connections | 100   |
    +-----------------+-------+
    1 row in set (0.00 sec)mysql>这个max_connections 是你的MYSQL允许的最大连接数。
      

  3.   

    可是我程序里设置的是,最大数据库连接数是 20if (GetPoolSize() < m_MaxPoolSize) 

    pDatabase = AddDBConnect(Index); 
    } CADODatabase *CDBConPool::AddDBConnect(int Index)
    {
    CADODatabase *pDatabase = new CADODatabase;
    if (pDatabase && pDatabase->Open(m_ConnectString.GetBuffer(), m_UserName.GetBuffer(), m_Password.GetBuffer()))
    {
    pDatabase->m_Tag = Index;
    m_ConnectList.push_back(pDatabase);
    return pDatabase;
    }
    else
    {
    m_ConnectString.ReleaseBuffer();
    m_UserName.ReleaseBuffer();
    m_Password.ReleaseBuffer();
    return NULL;
    }
    }
      

  4.   

    那就调试看一下你的 GetPoolSize()  和 m_MaxPoolSize 的值到底是什么。
      

  5.   

    m_MaxPoolSize是我写死的 一个值20GetPoolSize() 是返回 AddDBConnect(Index); 列表中数据库连接的数目  
      

  6.   

    调试中看一下 GetPoolSize() 返回的是不是!
    很显然,99% 这个 GetPoolSize() 并没有返回你需要的值。
      

  7.   

    要取得最大连接数:
    show variables like 'max_connections'
    是在数据库中。你测试一下你的代码,分步显示相关变量内容是什么