diff --git a/serialize.go b/serialize.go
index e217f69..827edc6 100644
--- a/serialize.go
+++ b/serialize.go
@@ -276,7 +276,101 @@
 	return r
 }
 
+func human(n int) string {
+	if n >= 10 * 1000 * 1000 * 1000 {
+		return fmt.Sprintf("%.2fGB", float32(n) / 1000 / 1000 / 1000)
+	} else if n >= 10 * 1000 * 1000 {
+		return fmt.Sprintf("%.2fMB", float32(n) / 1000 / 1000)
+	} else if n >= 10 * 1000 {
+		return fmt.Sprintf("%.2fkB", float32(n) / 1000)
+	} else {
+		return fmt.Sprintf("%dB", n)
+	}
+}
+
+func showSerializedNodesStats(nodes []*SerializableDepNode) {
+	outputSize := 0
+	cmdSize := 0
+	depsSize := 0
+	actualInputSize := 0
+	tsvSize := 0
+	filenameSize := 0
+	linenoSize := 0
+	for _, n := range nodes {
+		outputSize += len(n.Output)
+		for _, c := range n.Cmds {
+			cmdSize += len(c)
+		}
+		for _, d := range n.Deps {
+			depsSize += len(d)
+		}
+		for _, i := range n.ActualInputs {
+			actualInputSize += len(i)
+		}
+		for _ = range n.TargetSpecificVars {
+			tsvSize += 4
+		}
+		filenameSize += len(n.Filename)
+		linenoSize += 4
+	}
+	size := outputSize + cmdSize + depsSize + actualInputSize + tsvSize + filenameSize + linenoSize
+	LogStats("%d nodes %s", len(nodes), human(size))
+	LogStats(" output %s", human(outputSize))
+	LogStats(" command %s", human(cmdSize))
+	LogStats(" deps %s", human(depsSize))
+	LogStats(" inputs %s", human(actualInputSize))
+	LogStats(" tsv %s", human(tsvSize))
+	LogStats(" filename %s", human(filenameSize))
+	LogStats(" lineno %s", human(linenoSize))
+}
+
+func (v SerializableVar) size() int {
+	size := 0
+	size += len(v.Type)
+	size += len(v.V)
+	size += len(v.Origin)
+	for _, c := range v.Children {
+		size += c.size()
+	}
+	return size
+}
+
+func showSerializedVarsStats(vars map[string]SerializableVar) {
+	nameSize := 0
+	valueSize := 0
+	for k, v := range vars {
+		nameSize += len(k)
+		valueSize += v.size()
+	}
+	size := nameSize + valueSize
+	LogStats("%d vars %s", len(vars), human(size))
+	LogStats(" name %s", human(nameSize))
+	LogStats(" value %s", human(valueSize))
+}
+
+func showSerializedTsvsStats(vars []SerializableTargetSpecificVar) {
+	nameSize := 0
+	valueSize := 0
+	for _, v := range vars {
+		nameSize += len(v.Name)
+		valueSize += v.Value.size()
+	}
+	size := nameSize + valueSize
+	LogStats("%d tsvs %s", len(vars), human(size))
+	LogStats(" name %s", human(nameSize))
+	LogStats(" value %s", human(valueSize))
+}
+
+func showSerializedGraphStats(g SerializableGraph) {
+	showSerializedNodesStats(g.Nodes)
+	showSerializedVarsStats(g.Vars)
+	showSerializedTsvsStats(g.Tsvs)
+}
+
 func DeserializeGraph(g SerializableGraph) ([]*DepNode, Vars) {
+	if katiLogFlag || katiStatsFlag {
+		showSerializedGraphStats(g)
+	}
 	nodes := DeserializeNodes(g.Nodes, g.Tsvs)
 	vars := DeserializeVars(g.Vars)
 	return nodes, vars
