tpcc-mysql预热阶段的操作

工作中遇到疑问:tpcc-mysql预热阶段具体干了什么?
先上答案:预热阶段与正式测试时进行的操作是一样的
结果很惊人,探索过程如下:
网上找不到解答,研究了下代码,记录如下:

lampup_time

首先,确定了一下记录预热时间的变量:lampup_time,并以此为关键词进行检索,发现以下代码:

  printf("\nRAMP-UP TIME.(%d sec.)\n",lampup_time);
  fflush(stdout);
  sleep(lampup_time);
  printf("\nMEASURING START.\n\n");
  fflush(stdout);

与使用时的输出吻合。但没有获得有用信息。

线程数组

之后将重点放到研究其线程数组t上,猜测具体预热操作在其中完成:

 for( t_num=0; t_num < num_conn; t_num++ ){
    thd_arg[t_num].port= port;
    thd_arg[t_num].number= t_num;
    pthread_create( &t[t_num], NULL, (void *)thread_main, (void *)&(thd_arg[t_num]) );
  }

点进thread_main函数,其主体内容为mysql资源的初始化和释放,夹在中间有一句:

r = driver(t_num);

猜测具体sql操作在其中,点进去。咱来细品driver这个函数:

int driver (int t_num)
{
    int i, j;
    /* Actually, WaitTimes are needed... */
    while( activate_transaction ){
      switch(seq_get()){
      case 0:
	do_neword(t_num);
	break;
      case 1:
	do_payment(t_num);
	break;
      case 2:
	do_ordstat(t_num);
	break;
      case 3:
	do_delivery(t_num);
	break;
      case 4:
	do_slev(t_num);
	break;
      default:
	printf("Error - Unknown sequence.\n");
      }
    }
    return(0);
}

它用一个switch语句选择五种操作,刚好与tpcc的五种操作相对应:

  • do_neword:New-Order
  • do_payment:Payment
  • do_ordstat:Delivery
  • do_delivery:Order-Status
  • do_slev:Stock-Level
    再去看了下seq_get()函数,它里面主要是用随机函数生成一个数组,根据数组值来决定采用上文的哪种操作方式。随机函数里的一些操作保证了五种操作的占比适当。
    那么问题来了,预热操作呢,遍寻该文件也找不到,再结合这句意味深长的注释“Actually, WaitTimes are needed…”,妈耶作者是偷懒压根没写预热操作诶!结合main中的代码sleep(lampup_time); 搁这预热操作和正式测试阶段操作是一样的
    !!??
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值