One of my friends
asks me about the scripts related to finding the Size of the table objects,
index size. He thought that his DB is growing unnaturally and he want to
monitor each table (User define) objects size.
So in this
article I am providing a stored procedure that display all the table size and related
things in the current database.
You can supply
the table name as the parameter to see the size of the table or just blank to
see the entire user define table size of the current database. The stored
procedure is ready to use.
/*
To check the DB Size and DB Object Size Like
Table Size /Index Size etc.
Note : U must Specify the @P_TBLNAME as the
DESIRED table name
Version: 1.00
Date: 30-March-2012
by : joydeep Das
EXEC up_RUN_SIZOMEETER
@P_TBLNAME='MY_TABLE'
*/
IF EXISTS (SELECT *
FROM
sysobjects WHERE
type = 'P'
AND
name = 'up_RUN_SIZOMEETER')
BEGIN
DROP PROCEDURE up_RUN_SIZOMEETER
END
GO
CREATE Procedure [dbo].[up_RUN_SIZOMEETER]
(
@P_TBLNAME VARCHAR(MAX) = NULL
)
AS
DECLARE @v_TblName VARCHAR(MAX)
DECLARE @v_TRBL TABLE
(Tblname VARCHAR(MAX),
TblRows INT,
TblRese VARCHAR(MAX),
Tbldata VARCHAR(MAX),
TblIndx VARCHAR(MAX),
TblUnused VARCHAR(MAX))
BEGIN
-- Cursor
Declerations
IF ISNULL(@P_TBLNAME,'')=''
BEGIN
DECLARE
db_cursor CURSOR FOR
SELECT
name
FROM sys.sysobjects
WHERE xtype='U'
AND name LIKE @P_TBLNAME+'%'
END
ELSE
BEGIN
DECLARE db_cursor CURSOR
FOR
SELECT
name
FROM sys.sysobjects
WHERE xtype='U'
AND name = @P_TBLNAME
END
-- Cursor
Open
OPEN
db_cursor
-- Fatching
the Cursor
FETCH
NEXT FROM db_cursor
INTO
@v_TblName
WHILE @@FETCH_STATUS =
0
BEGIN
INSERT
INTO @v_TRBL
EXEC ('sp_spaceused '+
@v_TblName)
FETCH
NEXT FROM db_cursor
INTO @v_TblName
END
CLOSE
db_cursor
DEALLOCATE db_cursor
SELECT Tblname
name,
TblRows [rows],
TblRese [reserved],
Tbldata [data],
TblIndx [Index Size],
TblUnused
[Unused]
FROM @v_TRBL
END
GO
To Execute the Stored procedure
EXEC
up_RUN_SIZOMEETER
@P_TBLNAME='MY_TABLE'
OR
EXEC
up_RUN_SIZOMEETER
@P_TBLNAME=''
Hope you like
that.
Posted
by: MR. JOYDEEP DAS
No comments:
Post a Comment