关于zdb最大连接数的相关配置

来源:互联网 发布:枪林弹雨软件刷金币 编辑:程序博客网 时间:2024/05/01 14:54

一,一个简单的程序:

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
#include<sys/types.h>  
#include<zdb/zdb.h>  
#include<zdb/Exception.h>  
#include<zdb/Connection.h>  
#include<zdb/URL.h>  
int main(int agc,char** argv)  
{  
    URL_T url = URL_new("mysql://127.0.0.1/test?user=root&password=123456");  
    if(url==NULL)  
    {  
        printf("URL parse ERROR!\n");  
        return 0;  
    }  
    ConnectionPool_T pool = ConnectionPool_new(url);  
    //设置初始化连接数目  (默认为5)
    ConnectionPool_setInitialConnections(pool,5);

    //设置最大连接数(默认为20)
    ConnectionPool_setMaxConnections(pool,20);

    //设置连接超时时间(默认为30s)
    ConnectionPool_setConnectionTimeout(pool,5);  
    //开启线程池  
    ConnectionPool_start(pool); 

    //从线程池中取出连接(活动连接数+1)  
    Connection_T con[10];
    for(int i = 0;i <10;i++)
    {
        con[i] = ConnectionPool_getConnection(pool);
        if(con[i] == NULL)
        {
             printf("connect error!\n");
        }   
       //输出全部连接数目  
       printf("ALL NUMBE:%d\n",ConnectionPool_size(pool));  
       //输出活动连接数目  
       printf("ACTIVE NUMBER:%d\n",ConnectionPool_active(pool));
       printf("max:%d\n",ConnectionPool_getMaxConnections(pool));  
    } 
    //关闭连接(活动连接-1)
    for(int i = 0;i < 10;i++)
    {  
        if(con[i] == NULL)  continue;
        Connection_close(con[i]);
   
    } 
    printf("ALL NUMBE:%d\n",ConnectionPool_size(pool));
    printf("ACTIVE NUMBER:%d\n",ConnectionPool_active(pool));
    printf("max:%d\n",ConnectionPool_getMaxConnections(pool)); 
    //将连接池与数据库分离  
    ConnectionPool_stop(pool);  
    ConnectionPool_free(&pool);    
    URL_free(&url);   
    return 0;  
}  

二,编译方式及结果展示:

1.编译方式:g++ test.cpp -I /usr/local/include/zdb/ -o test -lzdb

2.结果展示:

(1)直接运行上述代码编译程序,结果如下:

ALL NUMBE:5
ACTIVE NUMBER:1
max:20
ALL NUMBE:5
ACTIVE NUMBER:2
max:20
ALL NUMBE:5
ACTIVE NUMBER:3
max:20
ALL NUMBE:5
ACTIVE NUMBER:4
max:20
ALL NUMBE:5
ACTIVE NUMBER:5
max:20
ALL NUMBE:6
ACTIVE NUMBER:6
max:20
ALL NUMBE:7
ACTIVE NUMBER:7
max:20
ALL NUMBE:8
ACTIVE NUMBER:8
max:20
ALL NUMBE:9
ACTIVE NUMBER:9
max:20
ALL NUMBE:10
ACTIVE NUMBER:10
max:20
ALL NUMBE:10
ACTIVE NUMBER:0
max:20

(2)ConnectionPool_setMaxConnections(pool,5),将最大连接数设置为5(注意最大连接数必须大于等于初始化连接数),结果如下:

ALL NUMBE:5
ACTIVE NUMBER:1
max:5
ALL NUMBE:5
ACTIVE NUMBER:2
max:5
ALL NUMBE:5
ACTIVE NUMBER:3
max:5
ALL NUMBE:5
ACTIVE NUMBER:4
max:5
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
ALL NUMBE:5
ACTIVE NUMBER:0
max:5

3.结果分析:

(1)ConnectionPool_setInitialConnections(pool,5)只是设置初始化连接数目为5,当连接数超过该设置数时,会自动扩大该值,而不会连接出错;

(2)虽然连接数目会自动扩增,但是不会超过设置的最大连接数;

(3)当连接数目超过设置的最大连接数时,会出现连接数据库失败,而与数据库当前是否有可用连接数无关;

原创粉丝点击