This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
db:sqlserver:sysmetrics [2013/10/29 21:35] haidong |
— (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ==== SysMetrics database creation ==== | ||
| - | Since I started with Windows, I will present a SQL Server database script first. Please note that metrics data is typically write-once and read-only, so column-store tables are perfect fits. InfoBright's Community Edition is a column store database engine and it is free. I recommend using it and I really doubt that we will need to purge historical metrics data if we use that. Or at a minimum, we would be able to keep that history much longer. | ||
| - | Here is the ER diagram of the SysMetrics database. For now there are only 7 tables involved under the Windows schema, so it is pretty easy to understand and query. | ||
| - | |||
| - | {{ wiki:SQLServerSysMetrics.png }} | ||
| - | |||
| - | Note that syntax highlighting is not completely correct, but the script is just fine. | ||
| - | |||
| - | <code tsql SysMetrics.sql> | ||
| - | CREATE DATABASE SysMetrics | ||
| - | GO | ||
| - | USE [SysMetrics] | ||
| - | GO | ||
| - | |||
| - | ALTER DATABASE SysMetrics SET RECOVERY SIMPLE; | ||
| - | GO | ||
| - | |||
| - | IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'Windows') | ||
| - | DROP SCHEMA [Windows] | ||
| - | GO | ||
| - | |||
| - | CREATE SCHEMA [Windows] AUTHORIZATION [dbo] | ||
| - | GO | ||
| - | |||
| - | SET ANSI_NULLS ON | ||
| - | GO | ||
| - | |||
| - | SET QUOTED_IDENTIFIER ON | ||
| - | GO | ||
| - | |||
| - | CREATE TABLE [Windows].[Host]( | ||
| - | [HostID] [int] IDENTITY(1,1) NOT NULL, | ||
| - | [HostName] [nvarchar](20) NOT NULL, | ||
| - | [Domain] [nvarchar](50) NULL, | ||
| - | [OS] [nvarchar](50) NULL, | ||
| - | [OSArchitecture] [nchar](6) NULL, | ||
| - | [OSServicePack] [nvarchar](20) NULL, | ||
| - | [OSVersionNumber] [nvarchar](20) NULL, | ||
| - | [HardwareModel] [nvarchar](50) NULL, | ||
| - | [HardwareVendor] [nvarchar](50) NULL, | ||
| - | [MemorySizeGB] [int] NULL, | ||
| - | [CPUType] [nvarchar] (50) NULL, | ||
| - | [CoreCount] [int] NULL, | ||
| - | [IsActive] [nchar](1) NOT NULL, | ||
| - | [LastUpdate] [datetime2] NULL | ||
| - | CONSTRAINT [PK_Host] PRIMARY KEY CLUSTERED | ||
| - | ( | ||
| - | [HostID] ASC | ||
| - | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON), | ||
| - | CONSTRAINT [UNQ_HostName] UNIQUE NONCLUSTERED | ||
| - | ( | ||
| - | [HostName] ASC | ||
| - | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) | ||
| - | ) | ||
| - | |||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Host] WITH CHECK ADD CONSTRAINT [CK_Host_IsActive] CHECK (([IsActive]='N' OR [IsActive]='n' OR [IsActive]='Y' OR [IsActive]='y')) | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Host] CHECK CONSTRAINT [CK_Host_IsActive] | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Host] ADD CONSTRAINT [DF_Host_IsActive] DEFAULT ('Y') FOR [IsActive] | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Host] ADD CONSTRAINT [DF_Host_LastUpdate] DEFAULT (getdate()) FOR [LastUpdate] | ||
| - | GO | ||
| - | |||
| - | CREATE PROCEDURE Windows.Host_Select_HostID_HostName | ||
| - | @IsActive nchar(1) = 'Y' | ||
| - | AS | ||
| - | BEGIN | ||
| - | SET NOCOUNT ON; | ||
| - | |||
| - | SELECT HostID, HostName FROM Windows.Host | ||
| - | WHERE IsActive = @IsActive; | ||
| - | END | ||
| - | GO | ||
| - | CREATE PROCEDURE Windows.Host_Update | ||
| - | @HostID int = 0 | ||
| - | , @Domain nvarchar(50) = NULL | ||
| - | , @OS nvarchar(50) = NULL | ||
| - | , @OSArchitecture nchar(6) = NULL | ||
| - | , @OSServicePack nvarchar(20) = NULL | ||
| - | , @OSVersionNumber nvarchar(20) = NULL | ||
| - | , @HardwareModel nvarchar(50) = NULL | ||
| - | , @HardwareVendor nvarchar(50) = NULL | ||
| - | , @MemorySizeGB int = NULL | ||
| - | , @CPUType nvarchar(50) = NULL | ||
| - | , @CoreCount int = NULL | ||
| - | , @IsActive nchar(1) = 'Y' | ||
| - | AS | ||
| - | BEGIN | ||
| - | SET NOCOUNT ON; | ||
| - | |||
| - | UPDATE Windows.Host SET | ||
| - | Domain = @Domain | ||
| - | , OS = @OS | ||
| - | , OSArchitecture = @OSArchitecture | ||
| - | , OSServicePack = @OSServicePack | ||
| - | , OSVersionNumber = @OSVersionNumber | ||
| - | , HardwareModel = @HardwareModel | ||
| - | , HardwareVendor = @HardwareVendor | ||
| - | , MemorySizeGB = @MemorySizeGB | ||
| - | , CPUType = @CPUType | ||
| - | , CoreCount = @CoreCount | ||
| - | , IsActive = @IsActive | ||
| - | WHERE HostID = @HostID; | ||
| - | END | ||
| - | GO | ||
| - | --INSERT INTO Windows.Host (HostName) VALUES ('sql1') | ||
| - | --INSERT INTO Windows.Host (HostName) VALUES ('sql2') | ||
| - | |||
| - | |||
| - | CREATE TABLE [Windows].[Instance]( | ||
| - | [InstanceID] [int] IDENTITY(1,1) NOT NULL, | ||
| - | [HostID] [int] NOT NULL, | ||
| - | [InstanceName] [nvarchar](30) NULL, | ||
| - | [InstanceEdition] [nvarchar](50) NULL, | ||
| - | [InstanceEditionID] [bigint] NULL, | ||
| - | [InstanceVersion] [nchar](20) NULL, | ||
| - | [InstanceServicePack] [nvarchar](20) NULL, | ||
| - | [IsActive] [nchar](1) NOT NULL, | ||
| - | [LastUpdate] [datetime2] NULL | ||
| - | CONSTRAINT [PK_Instance] PRIMARY KEY CLUSTERED | ||
| - | ( | ||
| - | [InstanceID] ASC | ||
| - | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON), | ||
| - | CONSTRAINT [UNQ_InstanceName] UNIQUE NONCLUSTERED | ||
| - | ( | ||
| - | [InstanceName] ASC | ||
| - | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) | ||
| - | ) | ||
| - | |||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Instance] WITH CHECK ADD CONSTRAINT [CK_Instance_IsActive] CHECK (([IsActive]='N' OR [IsActive]='n' OR [IsActive]='Y' OR [IsActive]='y')) | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Instance] CHECK CONSTRAINT [CK_Instance_IsActive] | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Instance] ADD CONSTRAINT [DF_Instance_IsActive] DEFAULT ('Y') FOR [IsActive] | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Instance] ADD CONSTRAINT [DF_Instance_LastUpdate] DEFAULT (getdate()) FOR [LastUpdate] | ||
| - | GO | ||
| - | |||
| - | CREATE PROCEDURE Windows.Instance_Select_InstanceID_InstanceName | ||
| - | @IsActive nchar(1) = 'Y' | ||
| - | AS | ||
| - | BEGIN | ||
| - | SET NOCOUNT ON; | ||
| - | |||
| - | SELECT InstanceID, InstanceName FROM Windows.Instance | ||
| - | WHERE IsActive = @IsActive; | ||
| - | END | ||
| - | GO | ||
| - | |||
| - | CREATE PROCEDURE Windows.Instance_Insert | ||
| - | @HostID int | ||
| - | , @InstanceName nvarchar(30) | ||
| - | , @IsActive nvarchar(1) | ||
| - | AS | ||
| - | BEGIN | ||
| - | SET NOCOUNT ON; | ||
| - | |||
| - | IF NOT EXISTS (SELECT * FROM Windows.Instance WHERE InstanceName = @InstanceName) | ||
| - | INSERT INTO [Windows].[Instance] (HostID, InstanceName, IsActive) VALUES (@HostID, @InstanceName, @IsActive); | ||
| - | END | ||
| - | GO | ||
| - | |||
| - | CREATE PROCEDURE Windows.Instance_Update | ||
| - | @InstanceID int = 0 | ||
| - | , @InstanceEdition nvarchar(50) = NULL | ||
| - | , @InstanceEditionID bigint = NULL | ||
| - | , @InstanceVersion nvarchar(20) = NULL | ||
| - | , @InstanceServicePack nvarchar(20) = NULL | ||
| - | , @IsActive nchar(1) = 'Y' | ||
| - | AS | ||
| - | BEGIN | ||
| - | SET NOCOUNT ON; | ||
| - | |||
| - | UPDATE Windows.Instance SET | ||
| - | InstanceEdition = @InstanceEdition | ||
| - | , InstanceEditionID = @InstanceEditionID | ||
| - | , InstanceVersion = @InstanceVersion | ||
| - | , InstanceServicePack = @InstanceServicePack | ||
| - | , IsActive = @IsActive | ||
| - | WHERE InstanceID = @InstanceID; | ||
| - | END | ||
| - | GO | ||
| - | |||
| - | CREATE TABLE [Windows].[Storage]( | ||
| - | [RecordID] [int] IDENTITY(1,1) NOT NULL | ||
| - | , [HostID] [int] NOT NULL | ||
| - | , [DiskPath] [nvarchar](300) NOT NULL | ||
| - | , [DiskFormat] [nvarchar](25) NOT NULL | ||
| - | , [DiskLabel] [nvarchar](100) NULL | ||
| - | , [DiskSizeGB] [int] NOT NULL | ||
| - | , [DiskFreeGB] [int] NOT NULL | ||
| - | , [DiskUsedGB] AS ([DiskSizeGB]-[DiskFreeGB]) PERSISTED | ||
| - | , [CollectionDate] [datetime2] NOT NULL, | ||
| - | CONSTRAINT [pk__Storage_RecordID] PRIMARY KEY CLUSTERED | ||
| - | ( | ||
| - | [RecordID] ASC | ||
| - | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) | ||
| - | ) | ||
| - | |||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Storage] ADD DEFAULT (getdate()) FOR [CollectionDate] | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Storage] WITH CHECK ADD CONSTRAINT [fk__Storage_HostID] FOREIGN KEY([HostID]) | ||
| - | REFERENCES [Windows].[Host] ([HostID]) | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Storage] CHECK CONSTRAINT [fk__Storage_HostID] | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Storage] WITH CHECK ADD CONSTRAINT [ck__Storage_DiskSize] CHECK (([DiskUsedGB]>=(0) AND [DiskSizeGB]>=(0) AND [DiskFreeGB]>=(0))) | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[Storage] CHECK CONSTRAINT [ck__Storage_DiskSize] | ||
| - | GO | ||
| - | |||
| - | CREATE procedure [Windows].[Storage_Insert] | ||
| - | @HostID [int] | ||
| - | , @DiskPath [nvarchar](1000) | ||
| - | , @DiskFormat [nvarchar](50) | ||
| - | , @DiskLabel [nvarchar](100) | ||
| - | , @DiskSizeGB [int] | ||
| - | , @DiskFreeGB [int] | ||
| - | AS | ||
| - | |||
| - | BEGIN | ||
| - | SET NOCOUNT ON; | ||
| - | INSERT INTO Windows.Storage ( | ||
| - | HostID | ||
| - | , DiskPath | ||
| - | , DiskFormat | ||
| - | , DiskLabel | ||
| - | , DiskSizeGB | ||
| - | , DiskFreeGB) | ||
| - | VALUES ( | ||
| - | @HostID | ||
| - | , @DiskPath | ||
| - | , @DiskFormat | ||
| - | , @DiskLabel | ||
| - | , @DiskSizeGB | ||
| - | , @DiskFreeGB); | ||
| - | END | ||
| - | GO | ||
| - | |||
| - | SET ANSI_NULLS ON | ||
| - | GO | ||
| - | |||
| - | SET QUOTED_IDENTIFIER ON | ||
| - | GO | ||
| - | |||
| - | CREATE TABLE [Windows].[DbFileStats]( | ||
| - | [DbFileStatsID] [int] IDENTITY(1,1) NOT NULL, | ||
| - | [InstanceID] [int] NOT NULL, | ||
| - | [DbName] [sysname] NOT NULL, | ||
| - | [FileLogicalName] [sysname] NOT NULL, | ||
| - | [FilePhysicalName] [sysname] NOT NULL, | ||
| - | [FileGroupName] [sysname] NOT NULL, | ||
| - | [FileSizeInMB] [int] NOT NULL, | ||
| - | [FreeSizeInMB] [int] NOT NULL, | ||
| - | [Max_Size] [int] NOT NULL, | ||
| - | [Growth] [int] NOT NULL, | ||
| - | [Is_Percent_Growth] nchar(1) NOT NULL, | ||
| - | [CollectionDate] [datetime2] NOT NULL, | ||
| - | CONSTRAINT [pk__DbFileStatsID_SID] PRIMARY KEY CLUSTERED | ||
| - | ( | ||
| - | [DbFileStatsID] ASC | ||
| - | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) | ||
| - | ) | ||
| - | |||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[DbFileStats] ADD DEFAULT (getdate()) FOR [CollectionDate] | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[DbFileStats] WITH CHECK ADD FOREIGN KEY([InstanceID]) | ||
| - | REFERENCES [Windows].[Instance] ([InstanceID]) | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[DbFileStats] WITH CHECK ADD CONSTRAINT [CK_DbFileStats_Is_Percent_Growth] CHECK (([Is_Percent_Growth]='N' OR [Is_Percent_Growth]='n' OR [Is_Percent_Growth]='Y' OR [Is_Percent_Growth]='y')) | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[DbFileStats] CHECK CONSTRAINT [CK_DbFileStats_Is_Percent_Growth] | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[DbFileStats] ADD CONSTRAINT [DF_DbFileStats_Is_Percent_Growth] DEFAULT ('N') FOR [Is_Percent_Growth] | ||
| - | GO | ||
| - | |||
| - | CREATE PROCEDURE [Windows].[DbFileStats_Insert] | ||
| - | @InstanceID int | ||
| - | , @DbName sysname | ||
| - | , @FileLogicalName sysname | ||
| - | , @FilePhysicalName nvarchar(500) | ||
| - | , @FileGroupName sysname | ||
| - | , @FileSizeInMB [int] | ||
| - | , @FreeSizeInMB [int] | ||
| - | , @max_size [int] | ||
| - | , @growth [int] | ||
| - | , @is_percent_growth nchar(1) | ||
| - | AS | ||
| - | BEGIN | ||
| - | SET NOCOUNT ON; | ||
| - | |||
| - | INSERT INTO Windows.DbFileStats ( | ||
| - | InstanceID | ||
| - | , DbName | ||
| - | , FileLogicalName | ||
| - | , FilePhysicalName | ||
| - | , FileGroupName | ||
| - | , FileSizeInMB | ||
| - | , FreeSizeInMB | ||
| - | , max_size | ||
| - | , growth | ||
| - | , is_percent_growth) | ||
| - | VALUES ( | ||
| - | @InstanceID | ||
| - | , @DbName | ||
| - | , @FileLogicalName | ||
| - | , @FilePhysicalName | ||
| - | , @FileGroupName | ||
| - | , @FileSizeInMB | ||
| - | , @FreeSizeInMB | ||
| - | , @max_size | ||
| - | , @growth | ||
| - | , @is_percent_growth); | ||
| - | END | ||
| - | |||
| - | GO | ||
| - | |||
| - | CREATE TABLE [Windows].[TableStats]( | ||
| - | [TableStatsID] [int] IDENTITY(1,1) NOT NULL, | ||
| - | [InstanceID] [int] NOT NULL, | ||
| - | [DbName] [sysname] NOT NULL, | ||
| - | [SchemaName] [sysname] NOT NULL, | ||
| - | [TableName] [sysname] NOT NULL, | ||
| - | [TotalRowCount] [bigint] NOT NULL, | ||
| - | [DataSizeInMB] [int] NOT NULL, | ||
| - | [IndexSizeInMB] [int] NOT NULL, | ||
| - | [CollectionDate] [datetime2] NOT NULL, | ||
| - | CONSTRAINT [pk__TableStatsID_ID] PRIMARY KEY CLUSTERED | ||
| - | ( | ||
| - | [TableStatsID] ASC | ||
| - | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) | ||
| - | ) | ||
| - | |||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[TableStats] ADD DEFAULT (getdate()) FOR [CollectionDate] | ||
| - | GO | ||
| - | |||
| - | ALTER TABLE [Windows].[TableStats] WITH CHECK ADD FOREIGN KEY([InstanceID]) | ||
| - | REFERENCES [Windows].[Instance] ([InstanceID]) | ||
| - | GO | ||
| - | SET ANSI_NULLS ON | ||
| - | GO | ||
| - | |||
| - | SET QUOTED_IDENTIFIER ON | ||
| - | GO | ||
| - | |||
| - | CREATE procedure [Windows].[TableStats_Insert] | ||
| - | @InstanceID int, | ||
| - | @DbName sysname, | ||
| - | @SchemaName sysname, | ||
| - | @TableName sysname, | ||
| - | @TotalRowCount bigint, | ||
| - | @DataSizeInMB int, | ||
| - | @IndexSizeInMB int | ||
| - | AS | ||
| - | BEGIN | ||
| - | SET NOCOUNT ON; | ||
| - | INSERT INTO Windows.TableStats (InstanceID, DbName, SchemaName, TableName, TotalRowCount, DataSizeInMB, IndexSizeInMB) | ||
| - | VALUES (@InstanceID, @DbName, @SchemaName, @TableName, @TotalRowCount, @DataSizeInMB, @IndexSizeInMB); | ||
| - | END | ||
| - | |||
| - | GO | ||
| - | </code> | ||