⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 space_used.tcl

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 TCL
字号:
# Run this TCL script using "testfixture" in order get a report that shows# how much disk space is used by a particular data to actually store data# versus how much space is unused.## Get the name of the database to analyze#if {[llength $argv]!=1} {  puts stderr "Usage: $argv0 database-name"  exit 1}set file_to_analyze [lindex $argv 0]# Open the database#sqlite db [lindex $argv 0]set DB [btree_open [lindex $argv 0]]# Output the schema for the generated report#puts \{BEGIN;CREATE TABLE space_used(   name clob,        -- Name of a table or index in the database file   is_index boolean, -- TRUE if it is an index, false for a table   payload int,      -- Total amount of data stored in this table or index   pri_pages int,    -- Number of primary pages used   ovfl_pages int,   -- Number of overflow pages used   pri_unused int,   -- Number of unused bytes on primary pages   ovfl_unused int   -- Number of unused bytes on overflow pages);}# This query will be used to find the root page number for every index and# table in the database.#set sql {  SELECT name, type, rootpage FROM sqlite_master  UNION ALL  SELECT 'sqlite_master', 'table', 2  ORDER BY 1}# Initialize variables used for summary statistics.#set total_size 0set total_primary 0set total_overflow 0set total_unused_primary 0set total_unused_ovfl 0# Analyze every table in the database, one at a time.#foreach {name type rootpage} [db eval $sql] {  set cursor [btree_cursor $DB $rootpage 0]  set go [btree_first $cursor]  set size 0  catch {unset pg_used}  set unused_ovfl 0  set n_overflow 0  while {$go==0} {    set payload [btree_payload_size $cursor]    incr size $payload    set stat [btree_cursor_dump $cursor]    set pgno [lindex $stat 0]    set freebytes [lindex $stat 4]    set pg_used($pgno) $freebytes    if {$payload>238} {      set n [expr {($payload-238+1019)/1020}]      incr n_overflow $n      incr unused_ovfl [expr {$n*1020+238-$payload}]    }    set go [btree_next $cursor]  }  btree_close_cursor $cursor  set n_primary [llength [array names pg_used]]  set unused_primary 0  foreach x [array names pg_used] {incr unused_primary $pg_used($x)}  regsub -all ' $name '' name  puts -nonewline "INSERT INTO space_used VALUES('$name'"  puts -nonewline ",[expr {$type=="index"}]"  puts ",$size,$n_primary,$n_overflow,$unused_primary,$unused_ovfl);"  incr total_size $size  incr total_primary $n_primary  incr total_overflow $n_overflow  incr total_unused_primary $unused_primary  incr total_unused_ovfl $unused_ovfl}# Output summary statistics:#puts "-- Total payload size: $total_size"puts "-- Total pages used: $total_primary primary and $total_overflow overflow"set file_pgcnt [expr {[file size [lindex $argv 0]]/1024}]puts -nonewline "-- Total unused bytes on primary pages: $total_unused_primary"if {$total_primary>0} {  set upp [expr {$total_unused_primary/$total_primary}]  puts " (avg $upp bytes/page)"} else {  puts ""}puts -nonewline "-- Total unused bytes on overflow pages: $total_unused_ovfl"if {$total_overflow>0} {  set upp [expr {$total_unused_ovfl/$total_overflow}]  puts " (avg $upp bytes/page)"} else {  puts ""}set n_free [expr {$file_pgcnt-$total_primary-$total_overflow}]if {$n_free>0} {incr n_free -1}puts "-- Total pages on freelist: $n_free"puts "COMMIT;"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -