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
{
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
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 |这是我的数据库连接
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 100 |
+-----------------+-------+
1 row in set (0.00 sec)mysql>这个max_connections 是你的MYSQL允许的最大连接数。
{
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;
}
}
很显然,99% 这个 GetPoolSize() 并没有返回你需要的值。
show variables like 'max_connections'
是在数据库中。你测试一下你的代码,分步显示相关变量内容是什么