用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - sql代码库

获取数据表的磁盘占用大小和行数

2017-05-16 作者:小章举报

[sql]代码库

BEGIN TRY
	SELECT a3.NAME AS [schemaname]
		,a2.NAME AS [tablename]
		,a1.rows AS row_count
		,(a1.reserved + ISNULL(a4.reserved, 0)) * 8 AS reserved
		,a1.data * 8 AS data
		,(
			CASE 
				WHEN (a1.used + ISNULL(a4.used, 0)) > a1.data
					THEN (a1.used + ISNULL(a4.used, 0)) - a1.data
				ELSE 0
				END
			) * 8 AS index_size
		,(
			CASE 
				WHEN (a1.reserved + ISNULL(a4.reserved, 0)) > a1.used
					THEN (a1.reserved + ISNULL(a4.reserved, 0)) - a1.used
				ELSE 0
				END
			) * 8 AS unused
		,CASE 
			WHEN a1.data = 0
				THEN 0
			ELSE (
					CASE 
						WHEN (a1.reserved + ISNULL(a4.reserved, 0)) > a1.used
							THEN (a1.reserved + ISNULL(a4.reserved, 0)) - a1.used
						ELSE 0
						END
					) * 10000 / (a1.reserved + ISNULL(a4.reserved, 0))
			END unusedRate
	FROM (
		SELECT ps.object_id
			,SUM(CASE 
					WHEN (ps.index_id < 2)
						THEN row_count
					ELSE 0
					END) AS [rows]
			,SUM(ps.reserved_page_count) AS reserved
			,SUM(CASE 
					WHEN (ps.index_id < 2)
						THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count)
					ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count)
					END) AS data
			,SUM(ps.used_page_count) AS used
		FROM sys.dm_db_partition_stats ps
		GROUP BY ps.object_id
		) AS a1
	LEFT OUTER JOIN (
		SELECT it.parent_id
			,SUM(ps.reserved_page_count) AS reserved
			,SUM(ps.used_page_count) AS used
		FROM sys.dm_db_partition_stats ps
		INNER JOIN sys.internal_tables it ON (it.object_id = ps.object_id)
		WHERE it.internal_type IN (
				202
				,204
				)
		GROUP BY it.parent_id
		) AS a4 ON (a4.parent_id = a1.object_id)
	INNER JOIN sys.all_objects a2 ON (a1.object_id = a2.object_id)
	INNER JOIN sys.schemas a3 ON (a2.schema_id = a3.schema_id)
	WHERE a2.type <> N'S'
		AND a2.type <> N'IT'
	ORDER BY unusedRate DESC
END TRY
 
BEGIN CATCH
	SELECT - 100 AS l1
		,1 AS schemaname
		,ERROR_NUMBER() AS tablename
		,ERROR_SEVERITY() AS row_count
		,ERROR_STATE() AS reserved
		,ERROR_MESSAGE() AS data
		,1 AS index_size
		,1 AS unused
END CATCH    


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。