鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Sysbench 0.5

需要先修改drv_mysql.c代码以解决高并发下初始化超时的问题,再进行编译和安装。

  1. 修改drv_mysql.c代码。

    修改drv_mysql.c代码,以解决在MIX场景512个并发线程时初始化超时的问题,该问题报错为:

    1
    FATAL: Worker threads failed to initialize within 30 seconds!
    

    具体做法是在client发起连接时增加一个timeout参数,使连接超时得以返回,然后重新发起连接。这样就能够避免初始化超时的问题,保证程序的正常运行。

    1. 打开drv_mysql.c文件。
      1
      vi /home/sysbench-0.5/sysbench/drivers/mysql/drv_mysql.c
      
    2. 在mysql_drv_real_connect函数末尾找到“return mysql_real_connect(....) == NULL;”。

    3. 按“i”进入编辑模式,并将“return mysql_real_connect(....) == NULL;”这段代码替换为如下内容。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      #if 0
        return mysql_real_connect(con,
                                  db_mysql_con->host,
                                  db_mysql_con->user,
                                  db_mysql_con->password,
                                  db_mysql_con->db,
                                  db_mysql_con->port,
                                  db_mysql_con->socket,
      #if MYSQL_VERSION_ID >= 50000
                                  CLIENT_MULTI_STATEMENTS
      #else
                                  0
      #endif
                                  ) == NULL;
      #else
        unsigned int timeout = 5;
       
        if (mysql_options(con, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&timeout)) {
          DEBUG("0x%p mysql_options MYSQL_OPT_CONNECT_TIMEOUT failed", con);
        }
        
        int ret = 0;
        int i = 0;
        for (; i < 5; i++) {
          ret = (mysql_real_connect(con,
                                  db_mysql_con->host,
                                  db_mysql_con->user,
                                  db_mysql_con->password,
                                  db_mysql_con->db,
                                  db_mysql_con->port,
                                  db_mysql_con->socket,
      #if MYSQL_VERSION_ID >= 50000
                                  CLIENT_MULTI_STATEMENTS
      #else
                                  0
      #endif
                                  ) == NULL);
          if (ret == 0) {
            DEBUG("0x%p mysql_options succeed", con);
            break;
          }
       
          DEBUG("0x%p mysql_options MYSQL_OPT_CONNECT_TIMEOUT timeout", con);
          usleep(1000);
        }
       
        return ret;
      #endif
      
    4. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  2. 进入Sysbench源码所在目录。
    1
    cd /home/sysbench-0.5
    
  3. 编译和安装。
    1
    2
    3
    4
    ./autogen.sh
    ./configure
    make -j128
    make -j128 install
    

    编译命令参数-j后面的数字表示您需要同时进行并行编译的CPU核数,此数值应设置为小于或等于CPU核数。您可以使用以下命令查看CPU核数:

    1
    cat /proc/cpuinfo | grep processor | wc -l
    
  4. 查看Sysbench版本。
    1
    sysbench --version
    

    预期结果显示为:

    1
    sysbench 0.5