diff options
author | dan miller | 2007-10-20 02:49:29 +0000 |
---|---|---|
committer | dan miller | 2007-10-20 02:49:29 +0000 |
commit | e36d23a85ebff914d74bb541558c2b6082b78edb (patch) | |
tree | 54b58fdf162e78af64055282a6035c8d2443389d /libraries/sqlite/unix/sqlite-3.5.1/tool/space_used.tcl | |
parent | * Fixed an issue whereby avatar chat distances were being calculated against ... (diff) | |
download | opensim-SC_OLD-e36d23a85ebff914d74bb541558c2b6082b78edb.zip opensim-SC_OLD-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.gz opensim-SC_OLD-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.bz2 opensim-SC_OLD-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.xz |
sqlite source (unix build) added to libraries
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/tool/space_used.tcl')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/tool/space_used.tcl | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/tool/space_used.tcl b/libraries/sqlite/unix/sqlite-3.5.1/tool/space_used.tcl new file mode 100644 index 0000000..2044aa3 --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/tool/space_used.tcl | |||
@@ -0,0 +1,111 @@ | |||
1 | # Run this TCL script using "testfixture" in order get a report that shows | ||
2 | # how much disk space is used by a particular data to actually store data | ||
3 | # versus how much space is unused. | ||
4 | # | ||
5 | |||
6 | # Get the name of the database to analyze | ||
7 | # | ||
8 | if {[llength $argv]!=1} { | ||
9 | puts stderr "Usage: $argv0 database-name" | ||
10 | exit 1 | ||
11 | } | ||
12 | set file_to_analyze [lindex $argv 0] | ||
13 | |||
14 | # Open the database | ||
15 | # | ||
16 | sqlite db [lindex $argv 0] | ||
17 | set DB [btree_open [lindex $argv 0]] | ||
18 | |||
19 | # Output the schema for the generated report | ||
20 | # | ||
21 | puts \ | ||
22 | {BEGIN; | ||
23 | CREATE TABLE space_used( | ||
24 | name clob, -- Name of a table or index in the database file | ||
25 | is_index boolean, -- TRUE if it is an index, false for a table | ||
26 | payload int, -- Total amount of data stored in this table or index | ||
27 | pri_pages int, -- Number of primary pages used | ||
28 | ovfl_pages int, -- Number of overflow pages used | ||
29 | pri_unused int, -- Number of unused bytes on primary pages | ||
30 | ovfl_unused int -- Number of unused bytes on overflow pages | ||
31 | );} | ||
32 | |||
33 | # This query will be used to find the root page number for every index and | ||
34 | # table in the database. | ||
35 | # | ||
36 | set sql { | ||
37 | SELECT name, type, rootpage FROM sqlite_master | ||
38 | UNION ALL | ||
39 | SELECT 'sqlite_master', 'table', 2 | ||
40 | ORDER BY 1 | ||
41 | } | ||
42 | |||
43 | # Initialize variables used for summary statistics. | ||
44 | # | ||
45 | set total_size 0 | ||
46 | set total_primary 0 | ||
47 | set total_overflow 0 | ||
48 | set total_unused_primary 0 | ||
49 | set total_unused_ovfl 0 | ||
50 | |||
51 | # Analyze every table in the database, one at a time. | ||
52 | # | ||
53 | foreach {name type rootpage} [db eval $sql] { | ||
54 | set cursor [btree_cursor $DB $rootpage 0] | ||
55 | set go [btree_first $cursor] | ||
56 | set size 0 | ||
57 | catch {unset pg_used} | ||
58 | set unused_ovfl 0 | ||
59 | set n_overflow 0 | ||
60 | while {$go==0} { | ||
61 | set payload [btree_payload_size $cursor] | ||
62 | incr size $payload | ||
63 | set stat [btree_cursor_dump $cursor] | ||
64 | set pgno [lindex $stat 0] | ||
65 | set freebytes [lindex $stat 4] | ||
66 | set pg_used($pgno) $freebytes | ||
67 | if {$payload>238} { | ||
68 | set n [expr {($payload-238+1019)/1020}] | ||
69 | incr n_overflow $n | ||
70 | incr unused_ovfl [expr {$n*1020+238-$payload}] | ||
71 | } | ||
72 | set go [btree_next $cursor] | ||
73 | } | ||
74 | btree_close_cursor $cursor | ||
75 | set n_primary [llength [array names pg_used]] | ||
76 | set unused_primary 0 | ||
77 | foreach x [array names pg_used] {incr unused_primary $pg_used($x)} | ||
78 | regsub -all ' $name '' name | ||
79 | puts -nonewline "INSERT INTO space_used VALUES('$name'" | ||
80 | puts -nonewline ",[expr {$type=="index"}]" | ||
81 | puts ",$size,$n_primary,$n_overflow,$unused_primary,$unused_ovfl);" | ||
82 | incr total_size $size | ||
83 | incr total_primary $n_primary | ||
84 | incr total_overflow $n_overflow | ||
85 | incr total_unused_primary $unused_primary | ||
86 | incr total_unused_ovfl $unused_ovfl | ||
87 | } | ||
88 | |||
89 | # Output summary statistics: | ||
90 | # | ||
91 | puts "-- Total payload size: $total_size" | ||
92 | puts "-- Total pages used: $total_primary primary and $total_overflow overflow" | ||
93 | set file_pgcnt [expr {[file size [lindex $argv 0]]/1024}] | ||
94 | puts -nonewline "-- Total unused bytes on primary pages: $total_unused_primary" | ||
95 | if {$total_primary>0} { | ||
96 | set upp [expr {$total_unused_primary/$total_primary}] | ||
97 | puts " (avg $upp bytes/page)" | ||
98 | } else { | ||
99 | puts "" | ||
100 | } | ||
101 | puts -nonewline "-- Total unused bytes on overflow pages: $total_unused_ovfl" | ||
102 | if {$total_overflow>0} { | ||
103 | set upp [expr {$total_unused_ovfl/$total_overflow}] | ||
104 | puts " (avg $upp bytes/page)" | ||
105 | } else { | ||
106 | puts "" | ||
107 | } | ||
108 | set n_free [expr {$file_pgcnt-$total_primary-$total_overflow}] | ||
109 | if {$n_free>0} {incr n_free -1} | ||
110 | puts "-- Total pages on freelist: $n_free" | ||
111 | puts "COMMIT;" | ||