gurbelunder
SQL-Guru
- Beiträge
- 136
Hallo an alle,
ich habe gerade ein Problem aus meinem DB Unterricht von der Uni. Wir haben heute das Berechnen einer Datenbankgröße gemacht. Ich selber war leider nicht anwesend wegen Krankheit. Und wie es üblich ist: keiner meiner Kommilitonen kann es mir vernünftig erläutern. Also hoffe ich auf euch. Folgendermaßen mal zu einer Aufgabe:
"Eine DB hat 4 Tabellen. Jede Tabelle hat eine Spalte smallint, 3 Spalten varchar(30), 1 x datetime, 1x money.
Die erste Tabelle hat 200.000 Datensätze. Die anderen Tabellen sind folgendermaßen gefüllt:
2. Tabelle 85% der 1. Tabelle
3. Tabelle 55% der 1. Tabelle
4. Tabelle 35% der 1. Tabelle
VarcharSpalten sind alle gefüllt.
Berechnen Sie: Gesamtzeilenlänge und die Zeilen pro Seite, anfängliche Größe der Datenbank."
Folgende Sachen sind mir bekannt:
smallint = 2 Byte, money und datetime = 8 Byte, varchar ist hier 10 Byte wegen der Angabe in ().
Eine Seite kann 8KByte fassen.
Meine feste Datengröße müssten alle Datentypen mit festgelegten Bytegrößen sein, hier also smallint, money und datetime. Pro Zeile sind das also: 18 Byte/Zeile
Die variable Datengröße bezieht sich hier auf den varchar Datentyp, dazu habe ich folgende Formel:
variable_datasize = 2 + (num_var_col * 2) + max_var_size
In dieser Betrachtung müssten "num_var_col" und "max_var_size" ja beide 10 Byte groß sein, oder? Das heißt dann: variable Datengröße = 32 Byte. Das klingt nur irgendwie "viel", denn der nächste Schritt wäre nun die Datengröße für die Zeile:
Nullbitmap und Seitenheader ist hier auf 4 Byte festgelegt
Zeilengröße = feste Datengröße + variable Datengröße + Nullbitmap + Seitenheader
= 18 + 32 + 4 + 4 = 58 Byte / Zeile
Wenn ich also nun schauen will, wie viele Seiten mit meinen 200.000 Datensätzen belegt werden, rechne ich das ins Verhältnis:
von der Gesamtgröße der Seite (8KByte) gehen 96 Byte(weis nicht, was die sind) weg, somit 8096 Byte Fassung pro Seite:
Zeilen pro Seite = 8096 / (58Byte + 2 Byte (irgendwie Anfang und Ende jeder Zeile))
= 134,93333333333333 = 135
Bei 200.000 Datensätzen / Zeilen sind das dann:
200.000 / 134,93333333 = 1482,213439
= 1483 Seiten, (sollen nicht geteilt werden)
Somit weis ich also, die Datenbank würde (theoretisch) 1483 Seiten gebrauchen. Nun meine Frage: Stimmt das so, was ich da gemacht habe?
Wäre super, wenn ihr mir dazu was sagen und evtl. sogar erläutern könntet.
Vielen Dank schonmal an euch und entschuldigt, wenn was nicht verständlich ist. Mir raucht auch die Rübe. Sonst fragt nochmal. Vielleicht kann ich dann nochmal was zu meinen Aufzeichnungen sagen.
Danke euch im vorraus
David
ich habe gerade ein Problem aus meinem DB Unterricht von der Uni. Wir haben heute das Berechnen einer Datenbankgröße gemacht. Ich selber war leider nicht anwesend wegen Krankheit. Und wie es üblich ist: keiner meiner Kommilitonen kann es mir vernünftig erläutern. Also hoffe ich auf euch. Folgendermaßen mal zu einer Aufgabe:
"Eine DB hat 4 Tabellen. Jede Tabelle hat eine Spalte smallint, 3 Spalten varchar(30), 1 x datetime, 1x money.
Die erste Tabelle hat 200.000 Datensätze. Die anderen Tabellen sind folgendermaßen gefüllt:
2. Tabelle 85% der 1. Tabelle
3. Tabelle 55% der 1. Tabelle
4. Tabelle 35% der 1. Tabelle
VarcharSpalten sind alle gefüllt.
Berechnen Sie: Gesamtzeilenlänge und die Zeilen pro Seite, anfängliche Größe der Datenbank."
Folgende Sachen sind mir bekannt:
smallint = 2 Byte, money und datetime = 8 Byte, varchar ist hier 10 Byte wegen der Angabe in ().
Eine Seite kann 8KByte fassen.
Meine feste Datengröße müssten alle Datentypen mit festgelegten Bytegrößen sein, hier also smallint, money und datetime. Pro Zeile sind das also: 18 Byte/Zeile
Die variable Datengröße bezieht sich hier auf den varchar Datentyp, dazu habe ich folgende Formel:
variable_datasize = 2 + (num_var_col * 2) + max_var_size
In dieser Betrachtung müssten "num_var_col" und "max_var_size" ja beide 10 Byte groß sein, oder? Das heißt dann: variable Datengröße = 32 Byte. Das klingt nur irgendwie "viel", denn der nächste Schritt wäre nun die Datengröße für die Zeile:
Nullbitmap und Seitenheader ist hier auf 4 Byte festgelegt
Zeilengröße = feste Datengröße + variable Datengröße + Nullbitmap + Seitenheader
= 18 + 32 + 4 + 4 = 58 Byte / Zeile
Wenn ich also nun schauen will, wie viele Seiten mit meinen 200.000 Datensätzen belegt werden, rechne ich das ins Verhältnis:
von der Gesamtgröße der Seite (8KByte) gehen 96 Byte(weis nicht, was die sind) weg, somit 8096 Byte Fassung pro Seite:
Zeilen pro Seite = 8096 / (58Byte + 2 Byte (irgendwie Anfang und Ende jeder Zeile))
= 134,93333333333333 = 135
Bei 200.000 Datensätzen / Zeilen sind das dann:
200.000 / 134,93333333 = 1482,213439
= 1483 Seiten, (sollen nicht geteilt werden)
Somit weis ich also, die Datenbank würde (theoretisch) 1483 Seiten gebrauchen. Nun meine Frage: Stimmt das so, was ich da gemacht habe?
Wäre super, wenn ihr mir dazu was sagen und evtl. sogar erläutern könntet.
Vielen Dank schonmal an euch und entschuldigt, wenn was nicht verständlich ist. Mir raucht auch die Rübe. Sonst fragt nochmal. Vielleicht kann ich dann nochmal was zu meinen Aufzeichnungen sagen.
Danke euch im vorraus
David