рднрд╛рдЧ 2: рд░рд┐рдкреЛрд░реНрдЯ
рдирдорд╕реНрдХрд╛рд░,
рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЬреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдПрдХ рдмрд╛рд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИред
рдЕрдм, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрдИ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдПрдВрдЧреЗ (рдореИрдВрдиреЗ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЛрд░реНрдЯ рдмрд┐рд▓реНрдбрд░ 2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛)ред
рд╡рд╛рд░реНрдо рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрд▓ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рдЯреАрдПрдордЬреА рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд╝рд░реЗ:
use tmg select (SUM(bytesrecvd)/1024)/1024 as ' ', (sum(bytessent)/1024)/1024 as ' ', ((SUM(bytesrecvd) + sum(bytessent))/1024)/1024 as ' ' from dbo.report where logTime >= @FromDate AND logTime <= @ToDate
рдЙрд╕ рд╕рдордп рдХреА рд▓рдВрдмрд╛рдИ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЪрд░ рдмрдирд╛рдП @FromDate рдФрд░ @ToDate (рдмрд┐рд▓реНрдбрд░ 2.0 рдореЗрдВ рдЪрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдЪрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рджрд┐рдирд╛рдВрдХ (рд╕рдордп, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ)ред
рдпрд╣ рдмрд┐рд▓реНрдбрд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЗрд╕ рддрд░рд╣ рддреИрдпрд╛рд░ рд░рд┐рдкреЛрд░реНрдЯ рджрд┐рдЦрддреА рд╣реИ:

рдЕрдм рдХрдВрдкрдиреА рдХреЗ рдХреБрдЫ рд╡рд┐рднрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рдЦрдкрдд рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд┐рднрд╛рдЧ рд╕реЗ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рднрд╛рдЧ рдХреЗ OU рдореЗрдВ рд╕рднреА sAMAccountName рдХреА рдЦреЛрдЬ рдХрд░рдиреА рдереА (AD рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЛрдореЗрди рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдПрдХ рд▓рд┐рдВрдХреНрдб рд╕рд░реНрд╡рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛)ред
рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ:
use tmg declare @tbl table(name varchar(256)) insert @tbl select '< >\' + sAMAccountName from openquery ( ADSII,'SELECT sAMAccountName FROM ''LDAP://< >'' WHERE objectCategory = ''Person'' AND objectClass = ''user'' ') select clientusername, (SUM(bytessent)/1024)/1024 as ' M', (sum(bytesrecvd)/1024)/1024 as ' ', ((SUM(bytesrecvd) + sum(bytessent))/1024)/1024 as ' ' from dbo.report where ClientUserName in ( SELECT name from @tbl) and (logTime >= @FromDate AND logTime <= @ToDate) group by clientusername
рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕реЗ рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдПрдХ рдЕрдиреНрдп рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рдирд╛рдо, рдФрд░ рдЯреЙрдбреЗрдЯ, рдЯреЙрдбреЗрдЯ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдкрд░ рдмрд╛рдж рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ, рд╣рдо рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕рдиреЗ рдХрд┐рди рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдореЗрдВ рдЙрд╕рдиреЗ рдЙрдирд╕реЗ рдХрд┐рддрдирд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛, рд╣рдо рдПрдХ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
use tmg select top (30) percent ClientUserName, destinationhost,(SUM(bytesrecvd)/1024)/1024 as ' ', (sum(bytessent)/1024)/1024 as ' M', ((SUM(bytesrecvd) + sum(bytessent))/1024)/1024 as 'total' from (select CASE WHEN ISNUMERIC(replace(destinationhost, '.', '') )=1 THEN destinationhost ELSE dbo.ParseUrl(destinationhost) END destinationhost, bytesrecvd, bytessent, clientusername, logtime from dbo.report )report2 where (clientusername like @Name) and (logTime >= @FromDate AND logTime <= @ToDate) group by clientusername, destinationhost order by total desc
рдЗрд╕ рдЕрдиреБрд░реЛрдз рдореЗрдВ, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдбреЗрд╕реНрдЯрд╣реЛрд╕реНрдЯ рдПрдХ рдПрдлрдХреНрдпреВрдбреАрдПрди рд╣реИ, рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рд╣рдо рдЗрд╕реЗ рдкрд╛рд░реНрд╕реБрд░рд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
Parseurl рд╕рдорд╛рд░реЛрд╣:
USE [TMG] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[parseURL] ( @url varchar(128) ) RETURNS varchar(128) AS BEGIN declare @s varchar(128), @i int IF (@url is null) RETURN @url SET @s = REVERSE(@url) SET @i = CHARINDEX('.', @s) IF (0 = @i) RETURN @url SET @i = CHARINDEX('.', @s, @i + 1) IF (0 = @i) RETURN @url RETURN REVERSE(SUBSTRING(@s, 1, @i - 1)) END GO
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреВрд╕рд░реЗ рд╕реНрддрд░ рд╕реЗ рдиреАрдЪреЗ рдХреЗ рдЙрдк-рдбреЛрдореЗрди рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ:

рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЧреИрд░-рд╕рдВрдХреБрд▓ рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬреЛ рдореЗрд░реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
USE [TMG] GO CREATE NONCLUSTERED INDEX [dateindex2] ON [dbo].[REPORT] ( [logTime] ASC ) INCLUDE ( [ClientUserName], [bytesrecvd], [bytessent]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO
рдирд┐рд╖реНрдХрд░реНрд╖:
1 - "рд╕реНрд╡рдЪреНрдЫ" рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
2 - рдПрд╕рдХреНрдпреВрдПрд▓ рдиреМрдХрд░реА, рдЬреЛ рдПрдХ рд╕рд╛рдл рдЯреЗрдмрд▓ рдкрд░ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддреА рд╣реИ, рдФрд╕рддрди 30 рд╕реЗрдХрдВрдб рдЪрд▓рддреА рд╣реИред
3 - рд░рд┐рдкреЛрд░реНрдЯ 5 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрдиреА рд╣реИрдВред
4 - рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ
рдкреБрдирд╢реНрдЪ: рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдкрд╛рд░реНрд╕рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред