Hallo zusammen, ich versuche gerade zu ermitteln, wieviel Speicherplatz ein Datensatz im SQL-Server effektiv belegt. Gibt es hierzu spezielle Funktionen die SQL-Server möglicherweise bereitstellt?
Ich nehme mal an, dass ich mit der reinen Addition des Speicherbedarfs der deklarierten Felder nicht wirklich weit komme, denn SQL-Server wird sich bestimmt einige Bytes mehr reservieren, als der Datensatz rechnerisch benötigt.
Sowohl die Antwort von KHoffmann als auch die von MStrasser waren sehr hilfreich. Leider kann ich nur eine der Antworten "akzeptieren". Vielen dank für eure Hilfe!
vielleicht hilft Dir dies weiter, einige Systemprocedures können helfen:
1. Use sp_spaceused, table, 1. That reports the table and each index separately. DIviding the data space used by the rowtotal will give you one value for the actual row length (not counting fragmentation, which is based on the lock scheme and activity).
2. Use sp_help table_name. That will give you another value , the intended or average row length. Using the info provided, do the simple arithmetic with the column lengths; then estimate what they will be re the Datatype changes you intend.
3. Note the variable length columns require 4 additional bytes each. * If a column is Nullable, it is stored as Var Len.
4. Now create the new table (even temporarily), with the same columns, with the new Datatypes, and repeat (2). This will confirm your estimates.
Hallo, die kleinste Verwaltungseinheit ist eine 'Seite' mit 8 KB. Im Speicher werden 8 Seite zu einem Block zusammengeführt und als solches verwaltet, dieser Block beträgt 64 KB. Wird dann Speicher für Tabellen oder Indizes benötigt, wird ein neuer Block angefordert. Als reine Nutzdaten pro Seite stehen Dir 8060 Byte zur verfügung. Wie viele Datenseiten werden nun benötigt: Tabelle mit int, varchar(20) und 100000 Datensätze.
Was hier also wichtig ist, ist die Tatsache, das man die Seitengröße bestmöglich ausnutzt. Bleiben bei einem Block, durch ungeschicktes Design der Tabelle etwa 500Byte übrig, so summiert der ungenutze Speicher bei angenommen 1.000.000 Blöcke auf 500MB, was sich auch in den Backup Kosten auswirkt.
exec sp_spaceused TabellenName
Die Zeilengröße kann man so auslesen:
select sum(length) from syscolumns where id = object_id('TabellenName')