/ Hex Artifact Content
Login

Artifact f95d19fd669b68c4c38b6b475242841d47c66076:


0000: 23 21 2f 62 69 6e 2f 62 61 73 68 0a 23 0a 23 20  #!/bin/bash.#.# 
0010: 54 68 69 73 20 69 73 20 61 20 74 65 6d 70 6c 61  This is a templa
0020: 74 65 20 66 6f 72 20 61 20 73 63 72 69 70 74 20  te for a script 
0030: 75 73 65 64 20 66 6f 72 20 64 61 79 2d 74 6f 2d  used for day-to-
0040: 64 61 79 20 73 69 7a 65 20 61 6e 64 20 0a 23 20  day size and .# 
0050: 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d 6f 6e 69  performance moni
0060: 74 6f 72 69 6e 67 20 6f 66 20 53 51 4c 69 74 65  toring of SQLite
0070: 2e 20 20 54 79 70 69 63 61 6c 20 75 73 61 67 65  .  Typical usage
0080: 3a 0a 23 0a 23 20 20 20 20 20 73 68 20 72 75 6e  :.#.#     sh run
0090: 2d 73 70 65 65 64 2d 74 65 73 74 2e 73 68 20 74  -speed-test.sh t
00a0: 72 75 6e 6b 20 20 23 20 20 42 61 73 65 6c 69 6e  runk  #  Baselin
00b0: 65 20 6d 65 61 73 75 72 65 6d 65 6e 74 20 6f 66  e measurement of
00c0: 20 74 72 75 6e 6b 0a 23 20 20 20 20 20 73 68 20   trunk.#     sh 
00d0: 72 75 6e 2d 73 70 65 65 64 2d 74 65 73 74 2e 73  run-speed-test.s
00e0: 68 20 78 31 20 20 20 20 20 23 20 4d 65 61 73 75  h x1     # Measu
00f0: 72 65 20 73 6f 6d 65 20 65 78 70 65 72 69 6d 65  re some experime
0100: 6e 74 61 6c 20 63 68 61 6e 67 65 0a 23 20 20 20  ntal change.#   
0110: 20 20 66 6f 73 73 69 6c 20 74 65 73 74 2d 64 69    fossil test-di
0120: 66 66 20 2d 2d 74 6b 20 63 6f 75 74 2d 74 72 75  ff --tk cout-tru
0130: 6e 6b 2e 74 78 74 20 63 6f 75 74 2d 78 31 2e 74  nk.txt cout-x1.t
0140: 78 74 20 20 20 23 20 56 69 65 77 20 63 68 61 6e  xt   # View chan
0150: 61 67 65 73 0a 23 0a 23 20 54 68 65 72 65 20 61  ages.#.# There a
0160: 72 65 20 6d 75 6c 74 69 70 6c 65 20 6f 75 74 70  re multiple outp
0170: 75 74 20 66 69 6c 65 73 2c 20 61 6c 6c 20 77 69  ut files, all wi
0180: 74 68 20 61 20 62 61 73 65 20 6e 61 6d 65 20 67  th a base name g
0190: 69 76 65 6e 20 62 79 0a 23 20 74 68 65 20 66 69  iven by.# the fi
01a0: 72 73 74 20 61 72 67 75 6d 65 6e 74 3a 0a 23 0a  rst argument:.#.
01b0: 23 20 20 20 20 20 73 75 6d 6d 61 72 79 2d 24 42  #     summary-$B
01c0: 41 53 45 2e 74 78 74 20 20 20 20 20 20 20 20 20  ASE.txt         
01d0: 20 20 23 20 43 6f 70 79 20 6f 66 20 73 74 61 6e    # Copy of stan
01e0: 64 61 72 64 20 6f 75 74 70 75 74 0a 23 20 20 20  dard output.#   
01f0: 20 20 63 6f 75 74 2d 24 42 41 53 45 2e 74 78 74    cout-$BASE.txt
0200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
0210: 63 61 63 68 65 67 72 69 6e 64 20 6f 75 74 70 75  cachegrind outpu
0220: 74 0a 23 20 20 20 20 20 65 78 70 6c 61 69 6e 2d  t.#     explain-
0230: 24 42 41 53 45 2e 74 78 74 20 20 20 20 20 20 20  $BASE.txt       
0240: 20 20 20 20 23 20 45 58 50 4c 41 49 4e 20 6c 69      # EXPLAIN li
0250: 73 74 69 6e 67 73 20 28 6f 6e 6c 79 20 77 69 74  stings (only wit
0260: 68 20 2d 2d 65 78 70 6c 61 69 6e 29 0a 23 0a 69  h --explain).#.i
0270: 66 20 74 65 73 74 20 22 24 31 22 20 3d 20 22 22  f test "$1" = ""
0280: 0a 74 68 65 6e 0a 20 20 65 63 68 6f 20 22 55 73  .then.  echo "Us
0290: 61 67 65 3a 20 24 30 20 4f 55 54 50 55 54 46 49  age: $0 OUTPUTFI
02a0: 4c 45 20 5b 4f 50 54 49 4f 4e 53 5d 22 0a 20 20  LE [OPTIONS]".  
02b0: 65 78 69 74 0a 66 69 0a 4e 41 4d 45 3d 24 31 0a  exit.fi.NAME=$1.
02c0: 73 68 69 66 74 0a 43 43 5f 4f 50 54 53 3d 22 2d  shift.CC_OPTS="-
02d0: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52  DSQLITE_ENABLE_R
02e0: 54 52 45 45 20 2d 44 53 51 4c 49 54 45 5f 45 4e  TREE -DSQLITE_EN
02f0: 41 42 4c 45 5f 4d 45 4d 53 59 53 35 22 0a 53 50  ABLE_MEMSYS5".SP
0300: 45 45 44 54 45 53 54 5f 4f 50 54 53 3d 22 2d 2d  EEDTEST_OPTS="--
0310: 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d  shrink-memory --
0320: 72 65 70 72 65 70 61 72 65 20 2d 2d 68 65 61 70  reprepare --heap
0330: 20 31 30 30 30 30 30 30 30 20 36 34 22 0a 53 49   10000000 64".SI
0340: 5a 45 3d 35 0a 64 6f 45 78 70 6c 61 69 6e 3d 30  ZE=5.doExplain=0
0350: 0a 77 68 69 6c 65 20 74 65 73 74 20 22 24 31 22  .while test "$1"
0360: 20 21 3d 20 22 22 3b 20 64 6f 0a 20 20 63 61 73   != ""; do.  cas
0370: 65 20 24 31 20 69 6e 0a 20 20 20 20 2d 2d 72 65  e $1 in.    --re
0380: 70 72 65 70 61 72 65 29 0a 20 20 20 20 20 20 20  prepare).       
0390: 20 53 50 45 45 44 54 45 53 54 5f 4f 50 54 53 3d   SPEEDTEST_OPTS=
03a0: 22 24 53 50 45 45 44 54 45 53 54 5f 4f 50 54 53  "$SPEEDTEST_OPTS
03b0: 20 24 31 22 0a 20 20 20 20 20 20 20 20 3b 3b 0a   $1".        ;;.
03c0: 20 20 20 20 2d 2d 61 75 74 6f 76 61 63 75 75 6d      --autovacuum
03d0: 29 0a 20 20 20 20 20 20 20 20 53 50 45 45 44 54  ).        SPEEDT
03e0: 45 53 54 5f 4f 50 54 53 3d 22 24 53 50 45 45 44  EST_OPTS="$SPEED
03f0: 54 45 53 54 5f 4f 50 54 53 20 24 31 22 0a 20 20  TEST_OPTS $1".  
0400: 20 20 20 20 20 20 3b 3b 0a 20 20 20 20 2d 2d 75        ;;.    --u
0410: 74 66 31 36 62 65 29 0a 20 20 20 20 20 20 20 20  tf16be).        
0420: 53 50 45 45 44 54 45 53 54 5f 4f 50 54 53 3d 22  SPEEDTEST_OPTS="
0430: 24 53 50 45 45 44 54 45 53 54 5f 4f 50 54 53 20  $SPEEDTEST_OPTS 
0440: 24 31 22 0a 20 20 20 20 20 20 20 20 3b 3b 0a 20  $1".        ;;. 
0450: 20 20 20 2d 2d 73 74 61 74 73 29 0a 20 20 20 20     --stats).    
0460: 20 20 20 20 53 50 45 45 44 54 45 53 54 5f 4f 50      SPEEDTEST_OP
0470: 54 53 3d 22 24 53 50 45 45 44 54 45 53 54 5f 4f  TS="$SPEEDTEST_O
0480: 50 54 53 20 24 31 22 0a 20 20 20 20 20 20 20 20  PTS $1".        
0490: 3b 3b 0a 20 20 20 20 2d 2d 77 69 74 68 6f 75 74  ;;.    --without
04a0: 2d 72 6f 77 69 64 29 0a 20 20 20 20 20 20 20 20  -rowid).        
04b0: 53 50 45 45 44 54 45 53 54 5f 4f 50 54 53 3d 22  SPEEDTEST_OPTS="
04c0: 24 53 50 45 45 44 54 45 53 54 5f 4f 50 54 53 20  $SPEEDTEST_OPTS 
04d0: 24 31 22 0a 20 20 20 20 20 20 20 20 3b 3b 0a 20  $1".        ;;. 
04e0: 20 20 20 2d 2d 6e 6f 6d 65 6d 73 74 61 74 29 0a     --nomemstat).
04f0: 20 20 20 20 20 20 20 20 53 50 45 45 44 54 45 53          SPEEDTES
0500: 54 5f 4f 50 54 53 3d 22 24 53 50 45 45 44 54 45  T_OPTS="$SPEEDTE
0510: 53 54 5f 4f 50 54 53 20 24 31 22 0a 20 20 20 20  ST_OPTS $1".    
0520: 20 20 20 20 3b 3b 0a 20 20 20 20 2d 2d 77 61 6c      ;;.    --wal
0530: 29 0a 20 20 20 20 20 20 20 20 53 50 45 45 44 54  ).        SPEEDT
0540: 45 53 54 5f 4f 50 54 53 3d 22 24 53 50 45 45 44  EST_OPTS="$SPEED
0550: 54 45 53 54 5f 4f 50 54 53 20 2d 2d 6a 6f 75 72  TEST_OPTS --jour
0560: 6e 61 6c 20 77 61 6c 22 0a 20 20 20 20 20 20 20  nal wal".       
0570: 20 3b 3b 0a 20 20 20 20 2d 2d 73 69 7a 65 29 0a   ;;.    --size).
0580: 20 20 20 20 20 20 20 20 73 68 69 66 74 3b 20 53          shift; S
0590: 49 5a 45 3d 24 31 0a 20 20 20 20 20 20 20 20 3b  IZE=$1.        ;
05a0: 3b 0a 20 20 20 20 2d 2d 65 78 70 6c 61 69 6e 29  ;.    --explain)
05b0: 0a 20 20 20 20 20 20 20 20 64 6f 45 78 70 6c 61  .        doExpla
05c0: 69 6e 3d 31 0a 20 20 20 20 20 20 20 20 3b 3b 0a  in=1.        ;;.
05d0: 20 20 20 20 2d 2d 68 65 61 70 29 0a 20 20 20 20      --heap).    
05e0: 20 20 20 20 43 43 5f 4f 50 54 53 3d 22 24 43 43      CC_OPTS="$CC
05f0: 5f 4f 50 54 53 20 2d 44 53 51 4c 49 54 45 5f 45  _OPTS -DSQLITE_E
0600: 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 22 0a 20  NABLE_MEMSYS5". 
0610: 20 20 20 20 20 20 20 73 68 69 66 74 3b 0a 20 20         shift;.  
0620: 20 20 20 20 20 20 53 50 45 45 44 54 45 53 54 5f        SPEEDTEST_
0630: 4f 50 54 53 3d 22 24 53 50 45 45 44 54 45 53 54  OPTS="$SPEEDTEST
0640: 5f 4f 50 54 53 20 2d 2d 68 65 61 70 20 24 31 20  _OPTS --heap $1 
0650: 36 34 22 0a 20 20 20 20 20 20 20 20 3b 3b 0a 20  64".        ;;. 
0660: 20 20 20 2a 29 0a 20 20 20 20 20 20 20 20 43 43     *).        CC
0670: 5f 4f 50 54 53 3d 22 24 43 43 5f 4f 50 54 53 20  _OPTS="$CC_OPTS 
0680: 24 31 22 0a 20 20 20 20 20 20 20 20 3b 3b 0a 20  $1".        ;;. 
0690: 20 65 73 61 63 0a 20 20 73 68 69 66 74 0a 64 6f   esac.  shift.do
06a0: 6e 65 0a 53 50 45 45 44 54 45 53 54 5f 4f 50 54  ne.SPEEDTEST_OPT
06b0: 53 3d 22 24 53 50 45 45 44 54 45 53 54 5f 4f 50  S="$SPEEDTEST_OP
06c0: 54 53 20 2d 2d 73 69 7a 65 20 24 53 49 5a 45 22  TS --size $SIZE"
06d0: 0a 65 63 68 6f 20 22 4e 41 4d 45 20 20 20 20 20  .echo "NAME     
06e0: 20 20 20 20 20 20 3d 20 24 4e 41 4d 45 22 20 7c        = $NAME" |
06f0: 20 74 65 65 20 73 75 6d 6d 61 72 79 2d 24 4e 41   tee summary-$NA
0700: 4d 45 2e 74 78 74 0a 65 63 68 6f 20 22 53 50 45  ME.txt.echo "SPE
0710: 45 44 54 45 53 54 5f 4f 50 54 53 20 3d 20 24 53  EDTEST_OPTS = $S
0720: 50 45 45 44 54 45 53 54 5f 4f 50 54 53 22 20 7c  PEEDTEST_OPTS" |
0730: 20 74 65 65 20 2d 61 20 73 75 6d 6d 61 72 79 2d   tee -a summary-
0740: 24 4e 41 4d 45 2e 74 78 74 0a 65 63 68 6f 20 22  $NAME.txt.echo "
0750: 43 43 5f 4f 50 54 53 20 20 20 20 20 20 20 20 3d  CC_OPTS        =
0760: 20 24 43 43 5f 4f 50 54 53 22 20 7c 20 74 65 65   $CC_OPTS" | tee
0770: 20 2d 61 20 73 75 6d 6d 61 72 79 2d 24 4e 41 4d   -a summary-$NAM
0780: 45 2e 74 78 74 0a 72 6d 20 2d 66 20 63 61 63 68  E.txt.rm -f cach
0790: 65 67 72 69 6e 64 2e 6f 75 74 2e 2a 20 73 70 65  egrind.out.* spe
07a0: 65 64 74 65 73 74 31 20 73 70 65 65 64 74 65 73  edtest1 speedtes
07b0: 74 31 2e 64 62 20 73 71 6c 69 74 65 33 2e 6f 0a  t1.db sqlite3.o.
07c0: 67 63 63 20 2d 67 20 2d 4f 73 20 2d 57 61 6c 6c  gcc -g -Os -Wall
07d0: 20 2d 49 2e 20 24 43 43 5f 4f 50 54 53 20 2d 63   -I. $CC_OPTS -c
07e0: 20 73 71 6c 69 74 65 33 2e 63 0a 73 69 7a 65 20   sqlite3.c.size 
07f0: 73 71 6c 69 74 65 33 2e 6f 20 7c 20 74 65 65 20  sqlite3.o | tee 
0800: 2d 61 20 73 75 6d 6d 61 72 79 2d 24 4e 41 4d 45  -a summary-$NAME
0810: 2e 74 78 74 0a 69 66 20 74 65 73 74 20 24 64 6f  .txt.if test $do
0820: 45 78 70 6c 61 69 6e 20 2d 65 71 20 31 3b 20 74  Explain -eq 1; t
0830: 68 65 6e 0a 20 20 67 63 63 20 2d 67 20 2d 4f 73  hen.  gcc -g -Os
0840: 20 2d 57 61 6c 6c 20 2d 49 2e 20 24 43 43 5f 4f   -Wall -I. $CC_O
0850: 50 54 53 20 5c 0a 20 20 20 20 20 2d 44 53 51 4c  PTS \.     -DSQL
0860: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
0870: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 5c 0a 20 20  IN_COMMENTS \.  
0880: 20 20 2e 2f 73 68 65 6c 6c 2e 63 20 2e 2f 73 71    ./shell.c ./sq
0890: 6c 69 74 65 33 2e 63 20 2d 6f 20 73 71 6c 69 74  lite3.c -o sqlit
08a0: 65 33 20 2d 6c 64 6c 20 2d 6c 70 74 68 72 65 61  e3 -ldl -lpthrea
08b0: 64 0a 66 69 0a 53 52 43 3d 2e 2f 73 70 65 65 64  d.fi.SRC=./speed
08c0: 74 65 73 74 31 2e 63 0a 67 63 63 20 2d 67 20 2d  test1.c.gcc -g -
08d0: 4f 73 20 2d 57 61 6c 6c 20 2d 49 2e 20 24 43 43  Os -Wall -I. $CC
08e0: 5f 4f 50 54 53 20 24 53 52 43 20 2e 2f 73 71 6c  _OPTS $SRC ./sql
08f0: 69 74 65 33 2e 6f 20 2d 6f 20 73 70 65 65 64 74  ite3.o -o speedt
0900: 65 73 74 31 20 2d 6c 64 6c 20 2d 6c 70 74 68 72  est1 -ldl -lpthr
0910: 65 61 64 0a 6c 73 20 2d 6c 20 73 70 65 65 64 74  ead.ls -l speedt
0920: 65 73 74 31 20 7c 20 74 65 65 20 2d 61 20 73 75  est1 | tee -a su
0930: 6d 6d 61 72 79 2d 24 4e 41 4d 45 2e 74 78 74 0a  mmary-$NAME.txt.
0940: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
0950: 63 61 63 68 65 67 72 69 6e 64 20 2e 2f 73 70 65  cachegrind ./spe
0960: 65 64 74 65 73 74 31 20 73 70 65 65 64 74 65 73  edtest1 speedtes
0970: 74 31 2e 64 62 20 5c 0a 20 20 20 20 24 53 50 45  t1.db \.    $SPE
0980: 45 44 54 45 53 54 5f 4f 50 54 53 20 32 3e 26 31  EDTEST_OPTS 2>&1
0990: 20 7c 20 74 65 65 20 2d 61 20 73 75 6d 6d 61 72   | tee -a summar
09a0: 79 2d 24 4e 41 4d 45 2e 74 78 74 0a 73 69 7a 65  y-$NAME.txt.size
09b0: 20 73 71 6c 69 74 65 33 2e 6f 20 7c 20 74 65 65   sqlite3.o | tee
09c0: 20 2d 61 20 73 75 6d 6d 61 72 79 2d 24 4e 41 4d   -a summary-$NAM
09d0: 45 2e 74 78 74 0a 77 63 20 73 71 6c 69 74 65 33  E.txt.wc sqlite3
09e0: 2e 63 0a 63 67 5f 61 6e 6e 6f 2e 74 63 6c 20 63  .c.cg_anno.tcl c
09f0: 61 63 68 65 67 72 69 6e 64 2e 6f 75 74 2e 2a 20  achegrind.out.* 
0a00: 3e 63 6f 75 74 2d 24 4e 41 4d 45 2e 74 78 74 0a  >cout-$NAME.txt.
0a10: 69 66 20 74 65 73 74 20 24 64 6f 45 78 70 6c 61  if test $doExpla
0a20: 69 6e 20 2d 65 71 20 31 3b 20 74 68 65 6e 0a 20  in -eq 1; then. 
0a30: 20 2e 2f 73 70 65 65 64 74 65 73 74 31 20 2d 2d   ./speedtest1 --
0a40: 65 78 70 6c 61 69 6e 20 24 53 50 45 45 44 54 45  explain $SPEEDTE
0a50: 53 54 5f 4f 50 54 53 20 7c 20 2e 2f 73 71 6c 69  ST_OPTS | ./sqli
0a60: 74 65 33 20 3e 65 78 70 6c 61 69 6e 2d 24 4e 41  te3 >explain-$NA
0a70: 4d 45 2e 74 78 74 0a 66 69 0a                    ME.txt.fi.