Advertisement
teknoraver

sqlite tx

Jul 12th, 2019
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 11.55 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. setup() {
  4.     iter=1000
  5.     file=$(mktemp ~/XXX.db)
  6.     sqlite3 "$file" 'CREATE TABLE numbers(base INTEGER, square INTEGER, cube INTEGER);'
  7. }
  8.  
  9. multi() {
  10.     for i in $(seq $iter); do
  11.         sqlite3 "$file" "INSERT INTO numbers(base, square, cube) VALUES($i, $((i*i)), $((i*i*i)));"
  12.     done
  13. }
  14.  
  15. single() {
  16.     for i in $(seq $iter); do
  17.         echo "INSERT INTO numbers(base, square, cube) VALUES($i, $((i*i)), $((i*i*i)));"
  18.     done |sqlite3 "$file"
  19. }
  20.  
  21. tx() {
  22.     {
  23.         echo 'BEGIN;'
  24.         for i in $(seq $iter); do
  25.             echo "INSERT INTO numbers(base, square, cube) VALUES($i, $((i*i)), $((i*i*i)));"
  26.         done
  27.         echo 'COMMIT;'
  28.     } |sqlite3 "$file"
  29. }
  30.  
  31. case "$1" in
  32. multi|single|tx)
  33.     setup
  34.     "$1"
  35.     rm -f "$file"
  36.     ;;
  37. *)
  38.     exec echo "usage: ${0##*/} [multi|single|tx]"
  39.     ;;
  40. esac
  41.  
  42. exit 0
  43.  
  44. $ time ./sqlitest multi
  45.  
  46. real    0m20,280s
  47. user    0m3,695s
  48. sys     0m1,342s
  49.  
  50. $ time ./sqlitest single
  51.  
  52. real    0m16,208s
  53. user    0m0,102s
  54. sys     0m0,521s
  55.  
  56. $ time ./sqlitest tx
  57.  
  58. real    0m0,059s
  59. user    0m0,016s
  60. sys     0m0,008s
  61.  
  62. $ strace -fc -e '!wait4' ~/sqlitest multi
  63. % time     seconds  usecs/call     calls    errors syscall
  64. ------ ----------- ----------- --------- --------- ----------------
  65.  12,98    0,138697           2     47078           mmap
  66.  10,92    0,116754           5     21035      3003 openat
  67.   8,67    0,092688           9     10009           pwrite64
  68.   8,19    0,087539          29      3003           fdatasync
  69.   7,15    0,076395           4     17019           fcntl
  70.   6,51    0,069634           3     22054           close
  71.   5,88    0,062860           2     26079           read
  72.   5,41    0,057829           2     22037      1001 fstat
  73.   4,70    0,050257           3     13029           mprotect
  74.   4,00    0,042768           4      9030      4020 stat
  75.   3,60    0,038507          38      1001           unlink
  76.   3,25    0,034777          11      3003           socket
  77.   2,41    0,025719           8      3007           munmap
  78.   2,22    0,023742           4      5737           pread64
  79.   2,11    0,022570           1     13028         3 lseek
  80.   2,09    0,022301           7      3003      3003 connect
  81.   1,71    0,018269           3      6008           getpid
  82.   1,50    0,016062          15      1004           rt_sigreturn
  83.   1,49    0,015897           2      6022           brk
  84.   1,12    0,011992          11      1004           clone
  85.   0,66    0,007067           2      3010           rt_sigaction
  86.   0,58    0,006184           3      2003      1001 ioctl
  87.   0,52    0,005550           2      2006      1005 access
  88.   0,33    0,003524           3      1001           lstat
  89.   0,33    0,003512           3      1002           geteuid
  90.   0,27    0,002937           2      1001           getcwd
  91.   0,26    0,002819           2      1002           getuid
  92.   0,22    0,002375           1      2010      1005 arch_prctl
  93.   0,22    0,002367           2      1001           prlimit64
  94.   0,21    0,002209           2      1001           rt_sigprocmask
  95.   0,20    0,002149           2      1001           set_tid_address
  96.   0,20    0,002098           2      1001           set_robust_list
  97.   0,07    0,000783           0      1005           execve
  98.   0,00    0,000042          21         2           pipe
  99.   0,00    0,000000           0         2           write
  100.   0,00    0,000000           0         2           dup2
  101.   0,00    0,000000           0         1           getgid
  102.   0,00    0,000000           0         2           getppid
  103.   0,00    0,000000           0         1           newfstatat
  104.   0,00    0,000000           0         1           unlinkat
  105. ------ ----------- ----------- --------- --------- ----------------
  106. 100.00    1,068873                251245     14041 total
  107.  
  108. $ strace -fc -e '!wait4' ~/sqlitest single
  109. % time     seconds  usecs/call     calls    errors syscall
  110. ------ ----------- ----------- --------- --------- ----------------
  111.  25,97    0,184226          18     10009           pwrite64
  112.  22,30    0,158217          52      3003           fdatasync
  113.  13,27    0,094113          10      9027           fcntl
  114.  10,99    0,077991          73      1055         6 openat
  115.  10,20    0,072388          72      1001           unlink
  116.   5,64    0,040014           9      4035      2022 stat
  117.   3,79    0,026888          24      1081         1 close
  118.   3,22    0,022830          11      2006           pread64
  119.   2,35    0,016657           8      2058         2 fstat
  120.   1,03    0,007335           7      1013           getpid
  121.   1,02    0,007205           7      1002           geteuid
  122.   0,06    0,000446           3       125           mmap
  123.   0,06    0,000433           3       124           read
  124.   0,03    0,000191           4        42           mprotect
  125.   0,01    0,000100          16         6           socket
  126.   0,01    0,000094           2        41         3 lseek
  127.   0,01    0,000080           8        10           munmap
  128.   0,01    0,000067          11         6         6 connect
  129.   0,01    0,000051           1        28           brk
  130.   0,00    0,000026           2        13           rt_sigaction
  131.   0,00    0,000022           4         5         3 ioctl
  132.   0,00    0,000016           2         8         6 access
  133.   0,00    0,000011           5         2           lstat
  134.   0,00    0,000009           4         2           getcwd
  135.   0,00    0,000009           0        12         6 arch_prctl
  136.   0,00    0,000009           4         2           set_tid_address
  137.   0,00    0,000009           4         2           prlimit64
  138.   0,00    0,000008           4         2           rt_sigprocmask
  139.   0,00    0,000008           2         3           getuid
  140.   0,00    0,000008           4         2           set_robust_list
  141.   0,00    0,000000           0      1002           write
  142.   0,00    0,000000           0         6           rt_sigreturn
  143.   0,00    0,000000           0         3           pipe
  144.   0,00    0,000000           0         4           dup2
  145.   0,00    0,000000           0         6           clone
  146.   0,00    0,000000           0         6           execve
  147.   0,00    0,000000           0         1           getgid
  148.   0,00    0,000000           0         2           getppid
  149.   0,00    0,000000           0         1           newfstatat
  150.   0,00    0,000000           0         1           unlinkat
  151. ------ ----------- ----------- --------- --------- ----------------
  152. 100.00    0,709461                 36757      2055 total
  153.  
  154. $ strace -fc -e '!wait4' ~/sqlitest tx
  155. % time     seconds  usecs/call     calls    errors syscall
  156. ------ ----------- ----------- --------- --------- ----------------
  157.  43,62    0,003797           4       903           read
  158.  32,36    0,002817           2      1004           write
  159.   3,92    0,000341           2       125           mmap
  160.   3,41    0,000297           7        42           mprotect
  161.   3,24    0,000282           5        56         6 openat
  162.   1,55    0,000135           1        82         1 close
  163.   1,53    0,000133           2        60         2 fstat
  164.   1,26    0,000110           3        36           fcntl
  165.   1,16    0,000101          16         6           socket
  166.   1,05    0,000091           4        19           pwrite64
  167.   0,85    0,000074           1        39        24 stat
  168.   0,85    0,000074           7        10           munmap
  169.   0,70    0,000061           1        41         3 lseek
  170.   0,70    0,000061          10         6         6 connect
  171.   0,67    0,000058          29         2           lstat
  172.   0,63    0,000055           6         8           pread64
  173.   0,53    0,000046           7         6           fdatasync
  174.   0,46    0,000040           2        14           getpid
  175.   0,24    0,000021           1        13           rt_sigaction
  176.   0,23    0,000020           0        28           brk
  177.   0,22    0,000019           3         5         3 ioctl
  178.   0,14    0,000012           6         2           unlink
  179.   0,10    0,000009           0        12         6 arch_prctl
  180.   0,10    0,000009           4         2           set_robust_list
  181.   0,09    0,000008           4         2           rt_sigprocmask
  182.   0,09    0,000008           4         2           getcwd
  183.   0,08    0,000007           3         2           prlimit64
  184.   0,07    0,000006           2         3           getuid
  185.   0,07    0,000006           2         3           geteuid
  186.   0,07    0,000006           3         2           set_tid_address
  187.   0,00    0,000000           0         6           rt_sigreturn
  188.   0,00    0,000000           0         8         6 access
  189.   0,00    0,000000           0         3           pipe
  190.   0,00    0,000000           0         4           dup2
  191.   0,00    0,000000           0         6           clone
  192.   0,00    0,000000           0         6           execve
  193.   0,00    0,000000           0         1           getgid
  194.   0,00    0,000000           0         2           getppid
  195.   0,00    0,000000           0         1           newfstatat
  196.   0,00    0,000000           0         1           unlinkat
  197. ------ ----------- ----------- --------- --------- ----------------
  198. 100.00    0,008704                  2573        57 total
  199.  
  200. $ perf stat ~/sqlitest multi
  201.  
  202.  Performance counter stats for '/home/matteo/sqlitest multi':
  203.  
  204.           4.988,83 msec task-clock:u              #    0,239 CPUs utilized          
  205.                  0      context-switches:u        #    0,000 K/sec                  
  206.                  0      cpu-migrations:u          #    0,000 K/sec                  
  207.            236.329      page-faults:u             #    0,047 M/sec                  
  208.      1.681.863.847      cycles:u                  #    0,337 GHz                    
  209.      2.227.529.857      instructions:u            #    1,32  insn per cycle        
  210.        424.428.941      branches:u                #   85,076 M/sec                  
  211.         20.166.807      branch-misses:u           #    4,75% of all branches        
  212.  
  213.       20,832574432 seconds time elapsed
  214.  
  215.        3,668548000 seconds user
  216.        1,561489000 seconds sys
  217.  
  218.  
  219. $ perf stat ~/sqlitest single
  220.  
  221.  Performance counter stats for '/home/matteo/sqlitest single':
  222.  
  223.             596,11 msec task-clock:u              #    0,037 CPUs utilized          
  224.                  0      context-switches:u        #    0,000 K/sec                  
  225.                  0      cpu-migrations:u          #    0,000 K/sec                  
  226.                819      page-faults:u             #    0,001 M/sec                  
  227.         83.695.687      cycles:u                  #    0,140 GHz                    
  228.         39.930.046      instructions:u            #    0,48  insn per cycle        
  229.          8.706.299      branches:u                #   14,605 M/sec                  
  230.          1.183.653      branch-misses:u           #   13,60% of all branches        
  231.  
  232.       16,330267488 seconds time elapsed
  233.  
  234.        0,101328000 seconds user
  235.        0,605390000 seconds sys
  236.  
  237.  
  238. $ perf stat ~/sqlitest tx
  239.  
  240.  Performance counter stats for '/home/matteo/sqlitest tx':
  241.  
  242.              20,00 msec task-clock:u              #    0,368 CPUs utilized          
  243.                  0      context-switches:u        #    0,000 K/sec                  
  244.                  0      cpu-migrations:u          #    0,000 K/sec                  
  245.                826      page-faults:u             #    0,041 M/sec                  
  246.         15.823.939      cycles:u                  #    0,791 GHz                    
  247.         33.241.555      instructions:u            #    2,10  insn per cycle        
  248.          7.149.309      branches:u                #  357,389 M/sec                  
  249.             74.997      branch-misses:u           #    1,05% of all branches        
  250.  
  251.        0,054352832 seconds time elapsed
  252.  
  253.        0,020880000 seconds user
  254.        0,000000000 seconds sys
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement