Estoy tratando de calcular el tamaño de mi base de datos. Tendré una tabla con 3 columnas (id, int, money) Tendré 26 millones de filas con todas las columnas ocupadas. ¿Qué tan grande será mi base de datos? Además, ¿dónde puedo encontrar el tamaño de todos los tipos de datos de SQL Server?Dónde encontrar el tamaño de los tipos de datos de SQL Server
Respuesta
Su puede utilizar a continuación consulta:
SELECT * FROM sys.types
resultado de la consulta anterior es el siguiente:
name system_type_id user_type_id schema_id principal_id max_length precision scale collation_name is_nullable is_user_defined is_assembly_type default_object_id rule_object_id is_table_type
-------------------- -------------- ------------ --------- ------------ ---------- --------- ----- ----------------- ----------- --------------- ---------------- ----------------- -------------- -------------
image 34 34 4 NULL 16 0 0 NULL 1 0 0 0 0 0
text 35 35 4 NULL 16 0 0 Persian_100_CI_AI 1 0 0 0 0 0
uniqueidentifier 36 36 4 NULL 16 0 0 NULL 1 0 0 0 0 0
date 40 40 4 NULL 3 10 0 NULL 1 0 0 0 0 0
time 41 41 4 NULL 5 16 7 NULL 1 0 0 0 0 0
datetime2 42 42 4 NULL 8 27 7 NULL 1 0 0 0 0 0
datetimeoffset 43 43 4 NULL 10 34 7 NULL 1 0 0 0 0 0
tinyint 48 48 4 NULL 1 3 0 NULL 1 0 0 0 0 0
smallint 52 52 4 NULL 2 5 0 NULL 1 0 0 0 0 0
int 56 56 4 NULL 4 10 0 NULL 1 0 0 0 0 0
smalldatetime 58 58 4 NULL 4 16 0 NULL 1 0 0 0 0 0
real 59 59 4 NULL 4 24 0 NULL 1 0 0 0 0 0
money 60 60 4 NULL 8 19 4 NULL 1 0 0 0 0 0
datetime 61 61 4 NULL 8 23 3 NULL 1 0 0 0 0 0
float 62 62 4 NULL 8 53 0 NULL 1 0 0 0 0 0
sql_variant 98 98 4 NULL 8016 0 0 NULL 1 0 0 0 0 0
ntext 99 99 4 NULL 16 0 0 Persian_100_CI_AI 1 0 0 0 0 0
bit 104 104 4 NULL 1 1 0 NULL 1 0 0 0 0 0
decimal 106 106 4 NULL 17 38 38 NULL 1 0 0 0 0 0
numeric 108 108 4 NULL 17 38 38 NULL 1 0 0 0 0 0
smallmoney 122 122 4 NULL 4 10 4 NULL 1 0 0 0 0 0
bigint 127 127 4 NULL 8 19 0 NULL 1 0 0 0 0 0
hierarchyid 240 128 4 NULL 892 0 0 NULL 1 0 1 0 0 0
geometry 240 129 4 NULL -1 0 0 NULL 1 0 1 0 0 0
geography 240 130 4 NULL -1 0 0 NULL 1 0 1 0 0 0
varbinary 165 165 4 NULL 8000 0 0 NULL 1 0 0 0 0 0
varchar 167 167 4 NULL 8000 0 0 Persian_100_CI_AI 1 0 0 0 0 0
binary 173 173 4 NULL 8000 0 0 NULL 1 0 0 0 0 0
char 175 175 4 NULL 8000 0 0 Persian_100_CI_AI 1 0 0 0 0 0
timestamp 189 189 4 NULL 8 0 0 NULL 0 0 0 0 0 0
nvarchar 231 231 4 NULL 8000 0 0 Persian_100_CI_AI 1 0 0 0 0 0
nchar 239 239 4 NULL 8000 0 0 Persian_100_CI_AI 1 0 0 0 0 0
xml 241 241 4 NULL -1 0 0 NULL 1 0 0 0 0 0
sysname 231 256 4 NULL 256 0 0 Persian_100_CI_AI 0 0 0 0 0 0
CalculatedCreditInfo 243 257 9 NULL -1 0 0 NULL 0 1 0 0 0 1
udt_QoutaDetail 243 258 21 NULL -1 0 0 NULL 0 1 0 0 0 1
BeforeUpdate 243 259 22 NULL -1 0 0 NULL 0 1 0 0 0 1
udt_StoreInventory 243 260 26 NULL -1 0 0 NULL 0 1 0 0 0 1
udt_WKFHistory 243 261 32 NULL -1 0 0 NULL 0 1 0 0 0 1
IDTable 243 262 1 NULL -1 0 0 NULL
puede utilizar max_length para el tamaño de cada tipo de datos.
esto no muestra el tamaño. por ejemplo, el tamaño de una variable vacía XML es 5, ¿dónde lo dice allí? –
puede ver un buen complemento (si no es una mejor opción) para esta respuesta [aquí] (http://dba.stackexchange.com/questions/147296/where-to-find-the-size-of-sql-server -data-types/147315 # 147315) –
nvarchar tiene 2 bytes de ancho. entonces sys.columns.max_length = 44. pero la longitud real es 22. ¿dónde se mostraría el tamaño real del tipo de datos? No es el tamaño máximo que puede tener una columna de ese tipo. – TamusJRoyce
http://msdn.microsoft.com/en-us/library/ms187752.aspx
Money : 8 bytes
int : 4 bytes
id - depends on what you mean.
+ otra tara de fila como 'NULL_BITMAP' y bit de estado de versión de estado posible si se habilitó el aislamiento de instantánea. –
Si la tabla especificada en la cláusula where contiene un nvarchar, esta consulta le dará la cantidad de caracteres que hay para esa columna correctamente.
Esto detecta si la columna es "amplia" y esencialmente se divide en 2. Más amplia que solo nvarchar.
SELECT c.name, (CASE WHEN LEFT(ts.name, 1) = 'n' AND ts.[precision] = 0 AND ts.[scale] = 0 THEN c.max_length/ts.[bytes] ELSE c.max_length END) AS [length]
FROM sys.columns AS c
INNER JOIN sys.tables AS t
ON t.object_id = c.object_ID
INNER JOIN
(
SELECT *, (CASE WHEN [bits] = -1 THEN -1 ELSE ([bits] + 7)/8 END) AS [bytes]
FROM (
SELECT *, (CASE WHEN max_length >= 256 THEN (CASE WHEN LEFT(name, 1) = 'n' AND [precision] = 0 AND [scale] = 0 THEN 16 ELSE 8 END) ELSE max_length END) AS [bits]
FROM sys.types AS iits
) AS its
) AS ts
ON ts.user_type_id = c.user_type_id
WHERE t.name LIKE 'tb_tablename' -- LIKE is case insensitive
Por supuesto, sólo puede dividir en max_length sys.columns por 2 si conoce la columna es un nvarchar. Esto es más para descubrir el esquema de tabla de una manera que parece mejor si se introducen nuevos tipos de datos sql en el futuro. Y tú eliges actualizar a él. Caja de borde bastante pequeña.
Edite y corrija esta respuesta si encuentra una caja marginal donde bytes y bits son incorrectos.
Detalles:
-- ([bits] + 7)/8 means round up
--
-- Proof:
-- o (1 bit + 7 = 8)/8 = 1 byte used
-- o ((8 + 8 + 1 = 17 bytes) + 7 = 24)/8 = 3 byes used
-- o ((8 + 8 + 7 = 23 bytes) + 7 = 30)/8 = 3.75 = integer division removes decimal = 3
SELECT *, (CASE WHEN [bits] = -1 THEN -1 ELSE ([bits] + 7)/8 END) AS [bytes]
FROM (
SELECT *, (CASE WHEN max_length >= 256 THEN (CASE WHEN LEFT(name, 1) = 'n' AND [precision] = 0 AND [scale] = 0 THEN 16 ELSE 8 END) ELSE max_length END) AS [bits]
FROM sys.types AS its
) AS ts
Si alguien sabe que SQL Server almacena los tamaños de bits y bytes para cada tipo de datos. O una mejor manera de obtener el tamaño de sys.columns, ¡por favor deje un comentario!
- 1. Encontrar los tipos de datos de una tabla temporal SQL
- 2. ¿Dónde guarda el Agente de SQL Server los trabajos?
- 3. ¿Dónde encuentro los metadatos del servidor SQL para los tipos de datos de columna?
- 4. Encontrar el tamaño de múltiples bases de datos en SQL Server 2005
- 5. ¿Cómo enumero los tipos definidos por el usuario en una base de datos de SQL Server?
- 6. ¿Los tipos de datos deben ser tamaños de potencias de 2 en SQL Server?
- 7. Dónde encontrar el procedimiento almacenado msdb.dbo.sp_send_dbmail en SQL Server
- 8. SQL Server: tipos de datos más comúnmente utilizados?
- 9. ¿Cómo devuelvo los tipos de datos SQL de mi consulta?
- 10. Sql Server 2008 - Diferencia entre los tipos de intercalación
- 11. ¿Cómo encontrar los tipos de columna derivados de una vista en SQL Server 2005?
- 12. ¿Dónde ver los registros de inicio/detención de SQL Server?
- 13. ¿Qué tan geniales son los tipos de datos definidos por el usuario en SQL Server?
- 14. ¿Dónde se registran los intentos de conexión de SQL Server?
- 15. Cómo puedo administrar el tamaño de registro de SQL Server
- 16. ¿Dónde almacena SQL Server el código de procedimiento almacenado?
- 17. Averigüe el tamaño completo de la base de datos de SQL Server
- 18. SQL 2008 - varchar (max) vs tipos de datos de texto
- 19. Cómo comparar los datos entre los dos tipos de tabla en diferentes bases de datos utilizando SQL Server 2008?
- 20. Consulta de SQL Server para encontrar todos los nombres de bases de datos actuales
- 21. ¿Dónde se guarda el archivo .bak de la base de datos desde SQL Server Management Studio?
- 22. ¿Tamaño máximo de Javascript para los tipos?
- 23. SQL Server - ¿dónde está "sys.functions"?
- 24. Determinar el tamaño de la base de datos de SQL Server
- 25. ¿Cómo encontrar los objetos más grandes en una base de datos de SQL Server?
- 26. ¿Dónde guarda SQL Server 2005 los archivos .mdf?
- 27. tamaño de columna Alterar en SQL Server
- 28. SQL Server Tamaño máximo de fila
- 29. ¿Dónde están todos los lugares Sql Reporting Server Logs Errors?
- 30. SQL Encontrar el tamaño del resultado de la consulta
Probablemente sea un buen comienzo: http://msdn.microsoft.com/en-us/library/ms175991.aspx –
¿Se da cuenta de que debe saber MUCHO acerca de las partes internas de DB para llegar a un número preciso? Probablemente sea más fácil crear una tabla de ese tamaño con datos ficticios con la configuración que desee, y luego verificar el tamaño. Hay un centenar de preocupaciones de bajo nivel que pueden sumar o restar del número de bytes necesarios. – delnan