WPFTableSpace (modification of post by view diff)
embed code: <script type="text/javascript" src="http://PoshCode.org/embed/994"></script>download | new post
Uses Powerboots, Visifire and SQLPSX to display a WPF graph of SQL Server table data and index space usage
- #Usage: ./WPFTableSpace.ps1 'Z002\SqlExpress' AdventureWorks
- #Note: Requires .NET 3.5, Visifire Charts (tested on v2.1.0), Powerboots (tested on v0.1), and SQLPSX (tested on v1.5)
- param($sqlserver=$(throw 'sqlserver is required.'),$dbname=$(throw 'dbname is required.'),$top=10)
- $libraryDir = Convert-Path (Resolve-Path "$ProfileDir\Libraries")
- [Void][Reflection.Assembly]::LoadFrom( (Convert-Path (Resolve-Path "$libraryDir\WPFVisifire.Charts.dll")) )
- . $libraryDir\LibrarySmo.ps1
- if (!(Get-PSSnapin | ?{$_.name -eq 'PoshWpf'}))
- { Add-PsSnapin PoshWpf }
- $qry = @"
- CREATE TABLE #spaceused
- (name nvarchar(128),
- rows char(11),
- reserved varchar(18),
- data varchar(18),
- index_size varchar(18),
- unused varchar(18));
- EXEC sp_MSforeachtable 'insert #spaceused exec sp_spaceused ''?''';
- SELECT TOP $top name
- , CAST(rows AS int) AS rows
- , CAST(SUBSTRING(reserved,0,LEN(reserved)-2) AS int) AS reserved
- , CAST(SUBSTRING(data,0,LEN(data)-2) AS int) AS data
- , CAST(SUBSTRING(index_size,0,LEN(index_size)-2) AS int) AS index_size
- , CAST(SUBSTRING(unused,0,LEN(unused)-2) AS int) AS unused
- FROM #spaceused
- ORDER BY reserved DESC;
- DROP TABLE #spaceused;
- "@
- New-BootsWindow -Async {
- $chart = New-Object Visifire.Charts.Chart
- $chart.Height = 500
- $chart.Width = 800
- $chart.watermark = $false
- $chart.Theme = "Theme2"
- $chart.View3D = $true
- $chart.BorderBrush = [System.Windows.Media.Brush]"Gray"
- $chart.CornerRadius = [System.Windows.CornerRadius]5
- $chart.BorderThickness = [System.Windows.Thickness]0.5
- $chart.AnimationEnabled = $false
- $ds1 = New-Object Visifire.Charts.DataSeries
- $ds1.RenderAs = [Visifire.Charts.RenderAs]"StackedBar"
- $ds1.LegendText = "Data"
- $ds1.LabelEnabled = $true
- $ds1.LabelText = "#YValue"
- $ds2 = New-Object Visifire.Charts.DataSeries
- $ds2.RenderAs = [Visifire.Charts.RenderAs]"StackedBar"
- $ds2.LegendText = "Index"
- $ds2.LabelEnabled = $true
- $ds2.LabelText = "#YValue"
- $ds2.RadiusX = 5
- $ds2.RadiusY = 5
- foreach ($table in Get-SqlData $sqlserver $dbname $qry)
- {
- $dp1 = new-object Visifire.Charts.DataPoint
- $dp1.AxisXLabel = $table.name
- $dp1.YValue = $table.data
- $ds1.DataPoints.Add($dp1)
- $dp2 = new-object Visifire.Charts.DataPoint
- $dp2.YValue = $table.index_size
- $ds2.DataPoints.Add($dp2)
- }
- $chart.Series.Add($ds1)
- $chart.Series.Add($ds2)
- $chart
- } -Title "Table Space"
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.
PowerShell Code Repository