Understanding SQL Server’s DBCC SHOWCONTIG

The Results Explained

The results from the previous command will look something like the following:

DBCC SHOWCONTIG scanning ‘MyTable1′ table…
Table: ‘MyTable1′ (1556968673); index ID: 1, database ID: 16
TABLE level scan performed.
- Pages Scanned…………………………..: 18986
- Extents Scanned…………………………: 2443
- Extent Switches…………………………: 9238
- Avg. Pages per Extent……………………: 7.8
- Scan Density [Best Count:Actual Count]…….: 25.70% [2374:9239]
- Logical Scan Fragmentation ………………: 44.58%
- Extent Scan Fragmentation ……………….: 87.07%
- Avg. Bytes Free per Page…………………: 1658.7
- Avg. Page Density (full)…………………: 79.51%
DBCC execution completed. If DBCC printed error messages,
contact your system administrator.

DBCC SHOWCONTIG scanning ‘MyTable2′ table…
Table: ‘MyTable2′ (183984032); index ID: 1, database ID: 16
TABLE level scan performed.
- Pages Scanned…………………………..: 28980
- Extents Scanned…………………………: 3687
- Extent Switches…………………………: 22565
- Avg. Pages per Extent……………………: 7.9
- Scan Density [Best Count:Actual Count]…….: 16.06% [3623:22566]
- Logical Scan Fragmentation ………………: 83.05%
- Extent Scan Fragmentation ……………….: 87.44%
- Avg. Bytes Free per Page…………………: 3151.1
- Avg. Page Density (full)…………………: 61.07%
DBCC execution completed. If DBCC printed error messages,
contact your system administrator.

In the first table, MyTable1, we see that there were 18,986 pages examined to create the report. Those pages existed within 2,443 extents, indicating that the table consumed approximately 97% (7.8 pages per extent on average) of the extents allocated for it. We then see that while examining the pages for fragmentation, the server had to switch extent locations 9, 238 times. The Scan Density restates this by indicating the percentage of all pages within all extents were contiguous. In an ideal environment, the density displayed would be close to 100. The Logical Scan Fragmentation and Extent Scan Fragmentation are indications of how well the indexes are stored within the system when a clustered index is present (and should be ignored for tables that do not have a clustered index). In both cases, a number close to 0 is preferable. There is another anomaly being displayed here that is a little difficult to explain, but it is that SQL Server allows multiple tables to exist within a single extent, which further explains the 7.8 pages per extent (multiple tables may not however exist within a page).

The next items discuss a somewhat more mundane but important issue of page utilization. Again using the first table as the example, there are an average of 1659 bytes free per page, or that each page is 79.51% utilized. The closer that number gets to 100, the faster the database is able to read in records, since more records exist on a single page. However, this must be balanced with the cost of writing to the table. Since a page split will occur if a write is required on a page that is full, the overhead can be tremendous. This is exaggerated when using RAID 5 disk subsystems, since RAID 5 has a considerably slower write time compared to its read time. To account for this, we have the ability of telling SQL Server to leave each page a certain percentage full. 

DBCC REINDEX is a related tool that will reorganize your database information in much the same way Norton Defrag will work on your hard drive (see Books Online for information on how to use DBCC REINDEX). The following report displays the differences in the data after we defragmented the data using DBCC DBREINDEX. 

DBCC SHOWCONTIG scanning ‘MyTable1′ table…
Table: ‘MyTable1′ (1556968673); index ID: 1, database ID: 16
TABLE level scan performed.
- Pages Scanned…………………………..: 15492
- Extents Scanned…………………………: 1945
- Extent Switches…………………………: 2363
- Avg. Pages per Extent……………………: 8.0
- Scan Density [Best Count:Actual Count]…….: 81.94% [1937:2364]
- Logical Scan Fragmentation ………………: 15.43%
- Extent Scan Fragmentation ……………….: 20.15%
- Avg. Bytes Free per Page…………………: 159.8
- Avg. Page Density (full)…………………: 98.03%
DBCC execution completed. If DBCC printed error messages,
contact your system administrator.
 
DBCC SHOWCONTIG scanning ‘MyTable2′ table…
Table: ‘MyTable2′ (183984032); index ID: 1, database ID: 16
TABLE level scan performed.
- Pages Scanned…………………………..: 35270
- Extents Scanned…………………………: 4415
- Extent Switches…………………………: 4437
- Avg. Pages per Extent……………………: 8.0
- Scan Density [Best Count:Actual Count]…….: 99.35% [4409:4438]
- Logical Scan Fragmentation ………………: 0.11%
- Extent Scan Fragmentation ……………….: 0.66%
- Avg. Bytes Free per Page…………………: 3940.1
- Avg. Page Density (full)…………………: 51.32%
DBCC execution completed. If DBCC printed error messages,
contact your system administrator.

Here, we can see several key improvements and some examples of how proper indexing can be very important. The most glaring items for us are how well we were able to increase the scan density. Again, using the MyTable1 table as a reference, we can see that out of 1,945 extents, there were only 2363 extent switches. Notice that the number of extent switches is now a lower number than the original number of extents. This is due to the more efficient allocation of the data. And, since there is a significant reduction of the number of extent switches, searches for large quantities of contiguous data will be fulfilled much more quickly.

Continues…

Pages: 1 2 3




Related Articles :

  • No Related Articles Found

No comments yet... Be the first to leave a reply!

Software Reviews | Book Reviews | FAQs | Tips | Articles | Performance Tuning | Audit | BI | Clustering | Developer | Reporting | DBA | ASP.NET Ado | Views tips | | Developer FAQs | Replication Tips | OS Tips | Misc Tips | Index Tuning Tips | Hints Tips | High Availability Tips | Hardware Tips | ETL Tips | Components Tips | Configuration Tips | App Dev Tips | OLAP Tips | Admin Tips | Software Reviews | Error | Clustering FAQs | Performance Tuning FAQs | DBA FAQs |