| 

.NET C# Java Javascript Exception

0
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.
News:
01.03.2011
Torsten Weber 691 1 8
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!
Torsten Weber 09.03.2011
2 Antworten
2
Hi,


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.

5. sp_estspace has a different purpose.

Quelle
01.03.2011
KHoffmann 939 6
3
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.
4 + 20 = 24 Byte/Zeile
8060/24 = 335,8 = 335 Zeilen Pro Seite
100000/335 = 298,5 = 299 Seiten
299 * 8096(8KB) = 2420704B = 2,4 MB

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')
02.03.2011
MStrasser 342 1 8

Stelle deine Mssql-Frage jetzt!