una tamaño tablas tabla saber registros registro por numero las generar fila datos consecutivo como cantidad calcular cada sql-server tsql

sql-server - tablas - tamaño de indices sql server



cómo encontrar el tamaño de filas en la tabla (4)

Esto le dará una lista de filas por tamaño, simplemente configure @table y @ idcol en consecuencia (como está escrito, se ejecutará con la muestra Northwind)

declare @table varchar(20) declare @idcol varchar(10) declare @sql varchar(1000) set @table = ''Employees'' set @idcol = ''EmployeeId'' set @sql = ''select '' + @idcol +'' , (0'' select @sql = @sql + '' + isnull(datalength('' + name + ''), 1)'' from syscolumns where id = object_id(@table) set @sql = @sql + '') as rowsize from '' + @table + '' order by rowsize desc'' exec (@sql)

Uno de mis DB se ha acercado al tamaño permitido.

Para averiguar la tabla que contiene los datos máximos, utilicé la siguiente consulta:

exec sp_MSforeachtable @command1="print ''?'' exec sp_spaceused ''?''"

Devolvió la tabla culpable que comprende los datos máximos.

Como siguiente paso, quiero limpiar las filas según el tamaño. Para esto, me gustaría ordenar las filas según el tamaño.

¿Cómo lograr esto usando una consulta? ¿Hay alguna herramienta para hacer esto?


Tal vez algo así funcionará

delete table where id in ( select top 100 id from table order by datalength(event_text) + length(varchar_column) desc )

(Dado que se trata de una tabla de eventos, es probable que sea una columna de texto que está buscando ordenar, por lo que el comando datalength sql es la clave aquí)


También puede usar esto para obtener el tamaño de los índices y las claves: (editar: lo siento por el muro de texto, no puedo conseguir que el formato funcione)

WITH table_space_usage ( schema_name, table_name, index_name, used, reserved, ind_rows, tbl_rows ) AS ( SELECT s.Name , o.Name , coalesce(i.Name, ''HEAP'') , p.used_page_count * 8 , p.reserved_page_count * 8 , p.row_count , case when i.index_id in ( 0, 1 ) then p.row_count else 0 end FROM sys.dm_db_partition_stats p INNER JOIN sys.objects as o ON o.object_id = p.object_id INNER JOIN sys.schemas as s ON s.schema_id = o.schema_id LEFT OUTER JOIN sys.indexes as i on i.object_id = p.object_id and i.index_id = p.index_id WHERE o.type_desc = ''USER_TABLE'' and o.is_ms_shipped = 0 ) SELECT t.schema_name , t.table_name , t.index_name , sum(t.used) as used_in_kb , sum(t.reserved) as reserved_in_kb , case grouping(t.index_name) when 0 then sum(t.ind_rows) else sum(t.tbl_rows) end as rows FROM table_space_usage as t GROUP BY t.schema_name , t.table_name , t.index_name WITH ROLLUP ORDER BY grouping(t.schema_name) , t.schema_name , grouping(t.table_name) , t.table_name , grouping(t.index_name) , t.index_name


Un enfoque más sencillo para todos los tamaños de tabla es usar el procedimiento almacenado en este sitio . Puede modificar la instrucción de selección de ese procedimiento almacenado para:

SELECT * FROM #TempTable Order by dataSize desc

tenerlo ordenado por tamaño.

¿Cómo quieres limpiar? ¿Limpiar la fila más grande de una tabla específica? No estoy seguro de entender la pregunta.

EDITAR (respuesta al comentario)

Suponiendo que tu registro de eventos tenga el mismo diseño que el mío (registro de eventos DNN):

SELECT LEN(CONVERT(nvarchar(MAX), LogProperties)) AS length FROM EventLog ORDER BY length DESC