Database Journal
MS SQL Oracle DB2 Access MySQL PostgreSQL Sybase PHP SQL Etc SQL Scripts & Samples Links Database Forum

» Database Journal Home
» Database Articles
» Database Tutorials
MS SQL
Oracle
DB2
MS Access
MySQL
» RESOURCES
Database Tools
SQL Scripts & Samples
Links
» Database Forum
» Sitemap
Free Newsletters:
DatabaseDaily  
News Via RSS Feed


follow us on Twitter
Database Journal |DBA Support |SQLCourse |SQLCourse2
 

Featured Database Articles

MS SQL

Posted Nov 14, 2008

SQL Server: Measuring Space Allocation and Index Distribution

By DatabaseJournal.com Staff

by Shaunt Khaldtiance

One of the housekeeping challenges DBAs face is to keep track of their databases' growth and how much space is being used by each table and index in those databases. To meet this challenge, I wrote a stored procedure, SpaceUsedAnalyzer, that extends the functionality of the spaceused system stored procedure to present information that is more detailed.

SpaceUsedAnalyzer is particularly helpful for finding out how much space is being used by indexes. As Figure 1 shows, you can use the stored procedure to reveal such details as how much space is being used by clustered and non-clustered indexes and their type of space allocation.

Click for larger image
you can use the stored procedure to reveal such details as how much space is being used by clustered and non-clustered indexes

Figure 1

You can simply run this stored procedure on the SQL Server 2008 or SQL Server 2005 machine for which you want to evaluate database disk-space usage. SpaceUsedAnalyzer won't work with SQL Server 2000 or earlier because it uses system tables that are available only in SQL Server 2005 and later.

As the following syntax shows, SpaceUsedAnalyzer takes two parameters:

EXEC usp_SpaceUsedAnalyzer
  {summary|details},
  {n1 [Desc|Asc][,n2 [Desc|Asc],...]}

You use the first parameter to specify whether you want to display data at the table level (summary) or the index level (details). You use the second parameter to specify how you want that data sorted. When you use summary for the first parameter, you can sort the returned data by the following columns in descending (Desc) or ascending (Asc) order:

  • Table Name. This column, which is represented by n2, specifies the name of each table.
  • Schema. This column, which is represented by n1, identifies the schema for each table.
  • Number of Rows. This column, which is represented by n3, notes how many rows are in each table.
  • Reserved Space (MB). This column, which is represented by n4, shows the amount of space that's reserved for each table.
  • Data Space (MB). This column, which is represented by n5, contains the amount of space used by the data in each table.
  • Index Size (MB). This column, which is represented by n6, specifies the total amount of space used by all of the indexes in each table.
  • Unused Space (MB). This column, which is represented by n7, reveals the amount of available space in each table.

When you use details for the first parameter, you can sort the returned data by the following columns in descending or ascending order:

  • Table Name. This column, which is represented by n1, specifies the name of each table.
  • Schema Name. This column, which is represented by n2, identifies the schema for each table.
  • Index Name. This column, which is represented by n3, provides the name of each index in each table.
  • Index ID. This column, which is represented by n4, contains the ID of each index.
  • No. Pages. This column, which is represented by n5, specifies the number of pages in each index.
  • index_type_desc. This column, which is represented by n6, notes whether each index is clustered or non-clustered.
  • alloc_unit_type_desc. This column, which is represented by n7, identifies the type of space allocation for each index.
  • Used Space (MB). This column, which is represented by n8, reveals how much space each index is using.

For example, the statement

EXEC usp_SpaceUsedAnalyzer 'summary','6 desc'

Displays the table-related data that's sorted in descending order by the total amount of space used by each table's indexes. If you want to find the tables with the most data, you'd run the query

EXEC usp_SpaceUsedAnalyzer 'summary','5 desc'

The following query highlights the non-clustered indexes that take the most amount of space:

EXEC usp_SpaceUsedAnalyzer 'details','6 desc,8 desc'

As you can see, the SpaceUsedAnalyzer stored procedure provides the disk-space usage details you need to manage disk space more efficiently. For instance, you can use SpaceUsedAnalyzer to identify indexes that are taking a lot of space. If any of those indexes aren't being used, you can remove them to free up some space.

Download usp_SpaceUsedAnalyzer.sql.



MS SQL Archives

Comment and Contribute

 


(Maximum characters: 1200). You have characters left.

 

 




Latest Forum Threads
MS SQL Forum
Topic By Replies Updated
SQL 2005: SSIS: Error using SQL Server credentials poverty 3 August 17th, 07:43 AM
Need help changing table contents nkawtg 1 August 17th, 03:02 AM
SQL Server Memory confifuration bhosalenarayan 2 August 14th, 05:33 AM
SQL Server Primary Key and a Unique Key katty.jonh 2 July 25th, 10:36 AM


















Thanks for your registration, follow us on our social networks to keep up-to-date