Advertisement
Guest User

Codi benchmark TPC-C

a guest
Dec 21st, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.15 KB | None | 0 0
  1. #!/usr/local/bin/tclsh8.6
  2. if [catch {package require mysqltcl} ] { error "Failed to load mysqltcl - MySQL Library Error" }
  3. global mysqlstatus
  4. #EDITABLE OPTIONS##################################################
  5. set total_iterations 1000000 ;# Number of transactions before logging off
  6. set RAISEERROR "false" ;# Exit script on MySQL error (true or false)
  7. set KEYANDTHINK "false" ;# Time for user thinking and keying (true or false)
  8. set host "127.0.0.1" ;# Address of the server hosting MySQL
  9. set port "3306" ;# Port of the MySQL Server, defaults to 3306
  10. set user "alfredu" ;# MySQL user
  11. set password "pedocaca" ;# Password for the MySQL user
  12. set db "tpcc" ;# Database containing the TPC Schema
  13. #EDITABLE OPTIONS##################################################
  14. #RANDOM NUMBER
  15. proc RandomNumber {m M} {return [expr {int($m+rand()*($M+1-$m))}]}
  16. #NURand function
  17. proc NURand { iConst x y C } {return [ expr {((([RandomNumber 0 $iConst] | [RandomNumber $x $y]) + $C) % ($y - $x + 1)) + $x }]}
  18. #RANDOM NAME
  19. proc randname { num } {
  20. array set namearr { 0 BAR 1 OUGHT 2 ABLE 3 PRI 4 PRES 5 ESE 6 ANTI 7 CALLY 8 ATION 9 EING }
  21. set name [ concat $namearr([ expr {( $num / 100 ) % 10 }])$namearr([ expr {( $num / 10 ) % 10 }])$namearr([ expr {( $num / 1 ) % 10 }]) ]
  22. return $name
  23. }
  24. #TIMESTAMP
  25. proc gettimestamp { } {
  26. set tstamp [ clock format [ clock seconds ] -format %Y%m%d%H%M%S ]
  27. return $tstamp
  28. }
  29. #KEYING TIME
  30. proc keytime { keying } {
  31. after [ expr {$keying * 1000} ]
  32. return
  33. }
  34. #THINK TIME
  35. proc thinktime { thinking } {
  36. set thinkingtime [ expr {abs(round(log(rand()) * $thinking))} ]
  37. after [ expr {$thinkingtime * 1000} ]
  38. return
  39. }
  40. #NEW ORDER
  41. proc neword { mysql_handler no_w_id w_id_input RAISEERROR } {
  42. global mysqlstatus
  43. #open new order cursor
  44. #2.4.1.2 select district id randomly from home warehouse where d_w_id = d_id
  45. set no_d_id [ RandomNumber 1 10 ]
  46. #2.4.1.2 Customer id randomly selected where c_d_id = d_id and c_w_id = w_id
  47. set no_c_id [ RandomNumber 1 3000 ]
  48. #2.4.1.3 Items in the order randomly selected from 5 to 15
  49. set ol_cnt [ RandomNumber 5 15 ]
  50. #2.4.1.6 order entry date O_ENTRY_D generated by SUT
  51. set date [ gettimestamp ]
  52. mysqlexec $mysql_handler "set @next_o_id = 0"
  53. catch { mysqlexec $mysql_handler "CALL NEWORD($no_w_id,$w_id_input,$no_d_id,$no_c_id,$ol_cnt,@disc,@last,@credit,@dtax,@wtax,@next_o_id,$date)" }
  54. if { $mysqlstatus(code) } {
  55. if { $RAISEERROR } {
  56. error "New Order : $mysqlstatus(message)"
  57. } else { puts $mysqlstatus(message)
  58. }
  59. } else {
  60. puts [ join [ mysql::sel $mysql_handler "select @disc,@last,@credit,@dtax,@wtax,@next_o_id" -list ] ]
  61. }
  62. }
  63. #PAYMENT
  64. proc payment { mysql_handler p_w_id w_id_input RAISEERROR } {
  65. global mysqlstatus
  66. #2.5.1.1 The home warehouse id remains the same for each terminal
  67. #2.5.1.1 select district id randomly from home warehouse where d_w_id = d_id
  68. set p_d_id [ RandomNumber 1 10 ]
  69. #2.5.1.2 customer selected 60% of time by name and 40% of time by number
  70. set x [ RandomNumber 1 100 ]
  71. set y [ RandomNumber 1 100 ]
  72. if { $x <= 85 } {
  73. set p_c_d_id $p_d_id
  74. set p_c_w_id $p_w_id
  75. } else {
  76. #use a remote warehouse
  77. set p_c_d_id [ RandomNumber 1 10 ]
  78. set p_c_w_id [ RandomNumber 1 $w_id_input ]
  79. while { ($p_c_w_id == $p_w_id) && ($w_id_input != 1) } {
  80. set p_c_w_id [ RandomNumber 1 $w_id_input ]
  81. }
  82. }
  83. set nrnd [ NURand 255 0 999 123 ]
  84. set name [ randname $nrnd ]
  85. set p_c_id [ RandomNumber 1 3000 ]
  86. if { $y <= 60 } {
  87. #use customer name
  88. #C_LAST is generated
  89. set byname 1
  90. } else {
  91. #use customer number
  92. set byname 0
  93. set name {}
  94. }
  95. #2.5.1.3 random amount from 1 to 5000
  96. set p_h_amount [ RandomNumber 1 5000 ]
  97. #2.5.1.4 date selected from SUT
  98. set h_date [ gettimestamp ]
  99. #2.5.2.1 Payment Transaction
  100. mysqlexec $mysql_handler "set @p_c_id = $p_c_id, @p_c_last = '$name', @p_c_credit = 0, @p_c_balance = 0"
  101. catch { mysqlexec $mysql_handler "CALL PAYMENT($p_w_id,$p_d_id,$p_c_w_id,$p_c_d_id,@p_c_id,$byname,$p_h_amount,@p_c_last,@p_w_street_1,@p_w_street_2,@p_w_city,@p_w_state,@p_w_zip,@p_d_street_1,@p_d_street_2,@p_d_city,@p_d_state,@p_d_zip,@p_c_first,@p_c_middle,@p_c_street_1,@p_c_street_2,@p_c_city,@p_c_state,@p_c_zip,@p_c_phone,@p_c_since,@p_c_credit,@p_c_credit_lim,@p_c_discount,@p_c_balance,@p_c_data,$h_date)"}
  102. if { $mysqlstatus(code) } {
  103. if { $RAISEERROR } {
  104. error "Payment : $mysqlstatus(message)"
  105. } else { puts $mysqlstatus(message)
  106. }
  107. } else {
  108. puts [ join [ mysql::sel $mysql_handler "select @p_c_id,@p_c_last,@p_w_street_1,@p_w_street_2,@p_w_city,@p_w_state,@p_w_zip,@p_d_street_1,@p_d_street_2,@p_d_city,@p_d_state,@p_d_zip,@p_c_first,@p_c_middle,@p_c_street_1,@p_c_street_2,@p_c_city,@p_c_state,@p_c_zip,@p_c_phone,@p_c_since,@p_c_credit,@p_c_credit_lim,@p_c_discount,@p_c_balance,@p_c_data" -list ] ]
  109. }
  110. }
  111. #ORDER_STATUS
  112. proc ostat { mysql_handler w_id RAISEERROR } {
  113. global mysqlstatus
  114. #2.5.1.1 select district id randomly from home warehouse where d_w_id = d_id
  115. set d_id [ RandomNumber 1 10 ]
  116. set nrnd [ NURand 255 0 999 123 ]
  117. set name [ randname $nrnd ]
  118. set c_id [ RandomNumber 1 3000 ]
  119. set y [ RandomNumber 1 100 ]
  120. if { $y <= 60 } {
  121. set byname 1
  122. } else {
  123. set byname 0
  124. set name {}
  125. }
  126. mysqlexec $mysql_handler "set @os_c_id = $c_id, @os_c_last = '$name'"
  127. catch { mysqlexec $mysql_handler "CALL OSTAT($w_id,$d_id,@os_c_id,$byname,@os_c_last,@os_c_first,@os_c_middle,@os_c_balance,@os_o_id,@os_entdate,@os_o_carrier_id)"}
  128. if { $mysqlstatus(code) } {
  129. if { $RAISEERROR } {
  130. error "Order Status : $mysqlstatus(message)"
  131. } else { puts $mysqlstatus(message)
  132. }
  133. } else {
  134. puts [ join [ mysql::sel $mysql_handler "select @os_c_id,@os_c_last,@os_c_first,@os_c_middle,@os_c_balance,@os_o_id,@os_entdate,@os_o_carrier_id" -list ] ]
  135. }
  136. }
  137. #DELIVERY
  138. proc delivery { mysql_handler w_id RAISEERROR } {
  139. global mysqlstatus
  140. set carrier_id [ RandomNumber 1 10 ]
  141. set date [ gettimestamp ]
  142. catch { mysqlexec $mysql_handler "CALL DELIVERY($w_id,$carrier_id,$date)"}
  143. if { $mysqlstatus(code) } {
  144. if { $RAISEERROR } {
  145. error "Delivery : $mysqlstatus(message)"
  146. } else { puts $mysqlstatus(message)
  147. }
  148. } else {
  149. puts "$w_id $carrier_id $date"
  150. }
  151. }
  152. #STOCK LEVEL
  153. proc slev { mysql_handler w_id stock_level_d_id RAISEERROR } {
  154. global mysqlstatus
  155. set threshold [ RandomNumber 10 20 ]
  156. mysqlexec $mysql_handler "CALL SLEV($w_id,$stock_level_d_id,$threshold)"
  157. if { $mysqlstatus(code) } {
  158. if { $RAISEERROR } {
  159. error "Stock Level : $mysqlstatus(message)"
  160. } else { puts $mysqlstatus(message)
  161. }
  162. } else {
  163. puts "$w_id $stock_level_d_id $threshold"
  164. }
  165. }
  166. #RUN TPC-C
  167. if [catch {mysqlconnect -host $host -port $port -user $user -password $password} mysql_handler] {
  168. puts "the database connection to $host could not be established"
  169. error $mysqlstatus(message)
  170. } else {
  171. mysqluse $mysql_handler $db
  172. mysql::autocommit $mysql_handler 0
  173. }
  174. set w_id_input [ list [ mysql::sel $mysql_handler "select max(w_id) from warehouse" -list ] ]
  175. #2.4.1.1 set warehouse_id stays constant for a given terminal
  176. set w_id [ RandomNumber 1 $w_id_input ]
  177. set d_id_input [ list [ mysql::sel $mysql_handler "select max(d_id) from district" -list ] ]
  178. set stock_level_d_id [ RandomNumber 1 $d_id_input ]
  179. puts "Processing $total_iterations transactions without output suppressed..."
  180. set abchk 1; set abchk_mx 1024; set hi_t [ expr {pow([ lindex [ time {if { [ tsv::get application abort ] } { break }} ] 0 ],2)}]
  181. for {set it 0} {$it < $total_iterations} {incr it} {
  182. if { [expr {$it % $abchk}] eq 0 } { if { [ time {if { [ tsv::get application abort ] } { break }} ] > $hi_t } { set abchk [ expr {min(($abchk * 2), $abchk_mx)}]; set hi_t [ expr {$hi_t * 2} ] } }
  183. set choice [ RandomNumber 1 23 ]
  184. if {$choice <= 10} {
  185. puts "new order"
  186. if { $KEYANDTHINK } { keytime 18 }
  187. neword $mysql_handler $w_id $w_id_input $RAISEERROR
  188. if { $KEYANDTHINK } { thinktime 12 }
  189. } elseif {$choice <= 20} {
  190. puts "payment"
  191. if { $KEYANDTHINK } { keytime 3 }
  192. payment $mysql_handler $w_id $w_id_input $RAISEERROR
  193. if { $KEYANDTHINK } { thinktime 12 }
  194. } elseif {$choice <= 21} {
  195. puts "delivery"
  196. if { $KEYANDTHINK } { keytime 2 }
  197. delivery $mysql_handler $w_id $RAISEERROR
  198. if { $KEYANDTHINK } { thinktime 10 }
  199. } elseif {$choice <= 22} {
  200. puts "stock level"
  201. if { $KEYANDTHINK } { keytime 2 }
  202. slev $mysql_handler $w_id $stock_level_d_id $RAISEERROR
  203. if { $KEYANDTHINK } { thinktime 5 }
  204. } elseif {$choice <= 23} {
  205. puts "order status"
  206. if { $KEYANDTHINK } { keytime 2 }
  207. ostat $mysql_handler $w_id $RAISEERROR
  208. if { $KEYANDTHINK } { thinktime 5 }
  209. }
  210. }
  211. mysqlclose $mysql_handler
  212.  
  213.  
  214.  
  215.  
  216.  
  217. POSTGRES:
  218. !/usr/local/bin/tclsh8.6
  219. if [catch {package require Pgtcl} ] { error "Failed to load Pgtcl - Postgres Library Error" }
  220. #EDITABLE OPTIONS##################################################
  221. set total_iterations 1000000 ;# Number of transactions before logging off
  222. set RAISEERROR "false" ;# Exit script on PostgreSQL (true or false)
  223. set KEYANDTHINK "false" ;# Time for user thinking and keying (true or false)
  224. set ora_compatible "false" ;#Postgres Plus Oracle Compatible Schema
  225. set host "localhost" ;# Address of the server hosting PostgreSQL
  226. set port "5432" ;# Port of the PostgreSQL Server
  227. set user "tpcc" ;# PostgreSQL user
  228. set password "tpcc" ;# Password for the PostgreSQL user
  229. set db "tpcc" ;# Database containing the TPC Schema
  230. #EDITABLE OPTIONS##################################################
  231. #RANDOM NUMBER
  232. proc RandomNumber {m M} {return [expr {int($m+rand()*($M+1-$m))}]}
  233. #NURand function
  234. proc NURand { iConst x y C } {return [ expr {((([RandomNumber 0 $iConst] | [RandomNumber $x $y]) + $C) % ($y - $x + 1)) + $x }]}
  235. #RANDOM NAME
  236. proc randname { num } {
  237. array set namearr { 0 BAR 1 OUGHT 2 ABLE 3 PRI 4 PRES 5 ESE 6 ANTI 7 CALLY 8 ATION 9 EING }
  238. set name [ concat $namearr([ expr {( $num / 100 ) % 10 }])$namearr([ expr {( $num / 10 ) % 10 }])$namearr([ expr {( $num / 1 ) % 10 }]) ]
  239. return $name
  240. }
  241. #TIMESTAMP
  242. proc gettimestamp { } {
  243. set tstamp [ clock format [ clock seconds ] -format %Y%m%d%H%M%S ]
  244. return $tstamp
  245. }
  246. #KEYING TIME
  247. proc keytime { keying } {
  248. after [ expr {$keying * 1000} ]
  249. return
  250. }
  251. #THINK TIME
  252. proc thinktime { thinking } {
  253. set thinkingtime [ expr {abs(round(log(rand()) * $thinking))} ]
  254. after [ expr {$thinkingtime * 1000} ]
  255. return
  256. }
  257. #POSTGRES CONNECTION
  258. proc ConnectToPostgres { host port user password dbname } {
  259. global tcl_platform
  260. if {[catch {set lda [pg_connect -conninfo [list host = $host port = $port user = $user password = $password dbname = $dbname ]]} message]} {
  261. set lda "Failed" ; puts $message
  262. error $message
  263. } else {
  264. if {$tcl_platform(platform) == "windows"} {
  265. #Workaround for Bug #95 where first connection fails on Windows
  266. catch {pg_disconnect $lda}
  267. set lda [pg_connect -conninfo [list host = $host port = $port user = $user password = $password dbname = $dbname ]]
  268. }
  269. pg_notice_handler $lda puts
  270. set result [ pg_exec $lda "set CLIENT_MIN_MESSAGES TO 'ERROR'" ]
  271. pg_result $result -clear
  272. }
  273. return $lda
  274. }
  275. #NEW ORDER
  276. proc neword { lda no_w_id w_id_input RAISEERROR ora_compatible } {
  277. #2.4.1.2 select district id randomly from home warehouse where d_w_id = d_id
  278. set no_d_id [ RandomNumber 1 10 ]
  279. #2.4.1.2 Customer id randomly selected where c_d_id = d_id and c_w_id = w_id
  280. set no_c_id [ RandomNumber 1 3000 ]
  281. #2.4.1.3 Items in the order randomly selected from 5 to 15
  282. set ol_cnt [ RandomNumber 5 15 ]
  283. #2.4.1.6 order entry date O_ENTRY_D generated by SUT
  284. set date [ gettimestamp ]
  285. if { $ora_compatible eq "true" } {
  286. set result [pg_exec $lda "exec neword($no_w_id,$w_id_input,$no_d_id,$no_c_id,$ol_cnt,0,TO_TIMESTAMP($date,'YYYYMMDDHH24MISS'))" ]
  287. } else {
  288. set result [pg_exec $lda "select neword($no_w_id,$w_id_input,$no_d_id,$no_c_id,$ol_cnt,0)" ]
  289. }
  290. if {[pg_result $result -status] != "PGRES_TUPLES_OK"} {
  291. if { $RAISEERROR } {
  292. error "[pg_result $result -error]"
  293. } else {
  294. puts "New Order Procedure Error set RAISEERROR for Details"
  295. }
  296. } else {
  297. puts "New Order: $no_w_id $w_id_input $no_d_id $no_c_id $ol_cnt 0 [ pg_result $result -list ]"
  298. pg_result $result -clear
  299. }
  300. }
  301. #PAYMENT
  302. proc payment { lda p_w_id w_id_input RAISEERROR ora_compatible } {
  303. #2.5.1.1 The home warehouse id remains the same for each terminal
  304. #2.5.1.1 select district id randomly from home warehouse where d_w_id = d_id
  305. set p_d_id [ RandomNumber 1 10 ]
  306. #2.5.1.2 customer selected 60% of time by name and 40% of time by number
  307. set x [ RandomNumber 1 100 ]
  308. set y [ RandomNumber 1 100 ]
  309. if { $x <= 85 } {
  310. set p_c_d_id $p_d_id
  311. set p_c_w_id $p_w_id
  312. } else {
  313. #use a remote warehouse
  314. set p_c_d_id [ RandomNumber 1 10 ]
  315. set p_c_w_id [ RandomNumber 1 $w_id_input ]
  316. while { ($p_c_w_id == $p_w_id) && ($w_id_input != 1) } {
  317. set p_c_w_id [ RandomNumber 1 $w_id_input ]
  318. }
  319. }
  320. set nrnd [ NURand 255 0 999 123 ]
  321. set name [ randname $nrnd ]
  322. set p_c_id [ RandomNumber 1 3000 ]
  323. if { $y <= 60 } {
  324. #use customer name
  325. #C_LAST is generated
  326. set byname 1
  327. } else {
  328. #use customer number
  329. set byname 0
  330. set name {}
  331. }
  332. #2.5.1.3 random amount from 1 to 5000
  333. set p_h_amount [ RandomNumber 1 5000 ]
  334. #2.5.1.4 date selected from SUT
  335. set h_date [ gettimestamp ]
  336. #2.5.2.1 Payment Transaction
  337. #change following to correct values
  338. if { $ora_compatible eq "true" } {
  339. set result [pg_exec $lda "exec payment($p_w_id,$p_d_id,$p_c_w_id,$p_c_d_id,$p_c_id,$byname,$p_h_amount,'$name','0',0,TO_TIMESTAMP($h_date,'YYYYMMDDHH24MISS'))" ]
  340. } else {
  341. set result [pg_exec $lda "select payment($p_w_id,$p_d_id,$p_c_w_id,$p_c_d_id,$p_c_id,$byname,$p_h_amount,'$name','0',0)" ]
  342. }
  343. if {[pg_result $result -status] != "PGRES_TUPLES_OK"} {
  344. if { $RAISEERROR } {
  345. error "[pg_result $result -error]"
  346. } else {
  347. puts "Payment Procedure Error set RAISEERROR for Details"
  348. }
  349. } else {
  350. puts "Payment: $p_w_id $p_d_id $p_c_w_id $p_c_d_id $p_c_id $byname $p_h_amount $name 0 0 [ pg_result $result -list ]"
  351. pg_result $result -clear
  352. }
  353. }
  354. #ORDER_STATUS
  355. proc ostat { lda w_id RAISEERROR ora_compatible } {
  356. #2.5.1.1 select district id randomly from home warehouse where d_w_id = d_id
  357. set d_id [ RandomNumber 1 10 ]
  358. set nrnd [ NURand 255 0 999 123 ]
  359. set name [ randname $nrnd ]
  360. set c_id [ RandomNumber 1 3000 ]
  361. set y [ RandomNumber 1 100 ]
  362. if { $y <= 60 } {
  363. set byname 1
  364. } else {
  365. set byname 0
  366. set name {}
  367. }
  368. if { $ora_compatible eq "true" } {
  369. set result [pg_exec $lda "exec ostat($w_id,$d_id,$c_id,$byname,'$name')" ]
  370. } else {
  371. set result [pg_exec $lda "select * from ostat($w_id,$d_id,$c_id,$byname,'$name') as (ol_i_id NUMERIC, ol_supply_w_id NUMERIC, ol_quantity NUMERIC, ol_amount NUMERIC, ol_delivery_d TIMESTAMP, out_os_c_id INTEGER, out_os_c_last VARCHAR, os_c_first VARCHAR, os_c_middle VARCHAR, os_c_balance NUMERIC, os_o_id INTEGER, os_entdate TIMESTAMP, os_o_carrier_id INTEGER)" ]
  372. }
  373. if {[pg_result $result -status] != "PGRES_TUPLES_OK"} {
  374. if { $RAISEERROR } {
  375. error "[pg_result $result -error]"
  376. } else {
  377. puts "Order Status Procedure Error set RAISEERROR for Details"
  378. }
  379. } else {
  380. puts "Order Status: $w_id $d_id $c_id $byname $name [ pg_result $result -list ]"
  381. pg_result $result -clear
  382. }
  383. }
  384. #DELIVERY
  385. proc delivery { lda w_id RAISEERROR ora_compatible } {
  386. set carrier_id [ RandomNumber 1 10 ]
  387. set date [ gettimestamp ]
  388. if { $ora_compatible eq "true" } {
  389. set result [pg_exec $lda "exec delivery($w_id,$carrier_id,TO_TIMESTAMP($date,'YYYYMMDDHH24MISS'))" ]
  390. } else {
  391. set result [pg_exec $lda "select delivery($w_id,$carrier_id)" ]
  392. }
  393. if {[pg_result $result -status] ni {"PGRES_TUPLES_OK" "PGRES_COMMAND_OK"}} {
  394. if { $RAISEERROR } {
  395. error "[pg_result $result -error]"
  396. } else {
  397. puts "Delivery Procedure Error set RAISEERROR for Details"
  398. }
  399. } else {
  400. puts "Delivery: $w_id $carrier_id [ pg_result $result -list ]"
  401. pg_result $result -clear
  402. }
  403. }
  404. #STOCK LEVEL
  405. proc slev { lda w_id stock_level_d_id RAISEERROR ora_compatible } {
  406. set threshold [ RandomNumber 10 20 ]
  407. if { $ora_compatible eq "true" } {
  408. set result [pg_exec $lda "exec slev($w_id,$stock_level_d_id,$threshold)" ]
  409. } else {
  410. set result [pg_exec $lda "select slev($w_id,$stock_level_d_id,$threshold)" ]
  411. }
  412. if {[pg_result $result -status] ni {"PGRES_TUPLES_OK" "PGRES_COMMAND_OK"}} {
  413. if { $RAISEERROR } {
  414. error "[pg_result $result -error]"
  415. } else {
  416. puts "Stock Level Procedure Error set RAISEERROR for Details"
  417. }
  418. } else {
  419. puts "Stock Level: $w_id $stock_level_d_id $threshold [ pg_result $result -list ]"
  420. pg_result $result -clear
  421. }
  422. }
  423. #RUN TPC-C
  424. set lda [ ConnectToPostgres $host $port $user $password $db ]
  425. if { $lda eq "Failed" } {
  426. error "error, the database connection to $host could not be established"
  427. } else {
  428. if { $ora_compatible eq "true" } {
  429. set result [ pg_exec $lda "exec dbms_output.disable" ]
  430. pg_result $result -clear
  431. }
  432. }
  433. pg_select $lda "select max(w_id) from warehouse" w_id_input_arr {
  434. set w_id_input $w_id_input_arr(max)
  435. }
  436. #2.4.1.1 set warehouse_id stays constant for a given terminal
  437. set w_id [ RandomNumber 1 $w_id_input ]
  438. pg_select $lda "select max(d_id) from district" d_id_input_arr {
  439. set d_id_input $d_id_input_arr(max)
  440. }
  441. set stock_level_d_id [ RandomNumber 1 $d_id_input ]
  442. puts "Processing $total_iterations transactions without output suppressed..."
  443. set abchk 1; set abchk_mx 1024; set hi_t [ expr {pow([ lindex [ time {if { [ tsv::get application abort ] } { break }} ] 0 ],2)}]
  444. for {set it 0} {$it < $total_iterations} {incr it} {
  445. if { [expr {$it % $abchk}] eq 0 } { if { [ time {if { [ tsv::get application abort ] } { break }} ] > $hi_t } { set abchk [ expr {min(($abchk * 2), $abchk_mx)}]; set hi_t [ expr {$hi_t * 2} ] } }
  446. set choice [ RandomNumber 1 23 ]
  447. if {$choice <= 10} {
  448. puts "new order"
  449. if { $KEYANDTHINK } { keytime 18 }
  450. neword $lda $w_id $w_id_input $RAISEERROR $ora_compatible
  451. if { $KEYANDTHINK } { thinktime 12 }
  452. } elseif {$choice <= 20} {
  453. puts "payment"
  454. if { $KEYANDTHINK } { keytime 3 }
  455. payment $lda $w_id $w_id_input $RAISEERROR $ora_compatible
  456. if { $KEYANDTHINK } { thinktime 12 }
  457. } elseif {$choice <= 21} {
  458. puts "delivery"
  459. if { $KEYANDTHINK } { keytime 2 }
  460. delivery $lda $w_id $RAISEERROR $ora_compatible
  461. if { $KEYANDTHINK } { thinktime 10 }
  462. } elseif {$choice <= 22} {
  463. puts "stock level"
  464. if { $KEYANDTHINK } { keytime 2 }
  465. slev $lda $w_id $stock_level_d_id $RAISEERROR $ora_compatible
  466. if { $KEYANDTHINK } { thinktime 5 }
  467. } elseif {$choice <= 23} {
  468. puts "order status"
  469. if { $KEYANDTHINK } { keytime 2 }
  470. ostat $lda $w_id $RAISEERROR $ora_compatible
  471. if { $KEYANDTHINK } { thinktime 5 }
  472. }
  473. }
  474. pg_disconnect $lda
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement