איך לבצע Sizing DB ב-Datacenter בארגונך בקלות (חלק א') - ilDBA Portal

איך לבצע Sizing DB ב-Datacenter בארגונך בקלות (חלק א')

15/07/2015 | פורסם על ידי

כחלק מהטמעות מוצרי IT תשתיתיים (כגון FWDB, מוצרי גיבוי, חוות Storage, מוצרי שו"ב ועוד…) בארגוני, אנו נדרשים המון פעמים לענות על שאלות לספקים כגון : מה גודל הכולל של ה –  Datacenter  ? מה חלוקת גודל ה –DB  בסביבות השונות (פיזי/וירטואלי/DR) ? / בספקי ה –Storage   השונים ? בספקי ה – DBMS   השונים וכו'…

כמובן, לענות על שאלות אלו דורש כל פעם חישוב מחדש וגוזל המון זמן, לכן החלטתי ליישם פתרון קבוע שייתן מענה עדכני לדרישות אלו.

במאמר זה אציג פתרון שנעשה באמצעות SSIS & SSRS. SSIS לטובת איסוף נתונים מכלל השרתים, וב-SSRS נכתב דוח להצגת הנתונים.

האתגר הגדול שעמד בפניי היה יישום פתרון גנרי לאיסוף הנתונים ממקורות DBMS שונים הנמצאים בארגוני (ORACLE, SQL Server, SQL Anywhere).

התוצר הסופי יהיה דוח אשר יציג את חלוקת המידע על נפחי גודל ה – DB הכולל ה –Datacenter  בארגוני בחתכים שונים.

תיאור הפתרון

חלק א' –  בניית סכמה :

  • טבלה המכילה את שמות שרתי ה – DB ותיאורם (שם שרת DB, סביבה, DBMS Vendor, Storage Type , Site וכו'…) :

SID יצוין במידה ומדובר בשרת ORACLE.

Site מציין את מיקום הפיזי של השרת.

-- Create New Database [DBA_Rep]
Create Database [DBA_Rep]
GO

-- Create table of list of DB Servers
CREATE TABLE [dbo].[SrvList_Size](
       [Server] [nvarchar](40) NOT NULL,
       [Type] [nvarchar](40) NOT NULL,
       [Connect] [smallint] NOT NULL CONSTRAINT [DF_ServerList_SSIS_Connect_4]  DEFAULT ((0)),
       [Version] [smallint] NULL,
       [Holds_DBA_Rep] [bit] NOT NULL CONSTRAINT [DF_ServerList_SSIS_Holds_Repository4]  DEFAULT ((0)),
       [Environment] [nvarchar](10) NULL,
       [virtually] [bit] NULL,
       [SID] [nvarchar](40) NULL,
       [Storage] [nvarchar](20) NULL,
       [Site] [nvarchar](20) NULL
) ON [PRIMARY]

GO
  • טבלת Sizing שבה נשמור מידע על גדלי ה – DB Files :
USE [DBA_Rep]
GO

CREATE TABLE [dbo].[Srv_Info_DataFile_Size](
       [Server] [nvarchar](128) NULL,
       [TotalSizeMB] [int] NULL,
       [SID] [nvarchar](128) NULL
) ON [PRIMARY]


GO
  • טבלת Sizing שבה נשמור על גדלי הגיבויים :
USE [DBA_Rep]
GO

CREATE TABLE [dbo].[Srv_Info_Backup_Size](
       [Server] [nvarchar](128) NULL,
       [TotalSizeMB] [decimal](13, 2) NULL,
       [SID] [nvarchar](128) NULL
) ON [PRIMARY]

GO

חלק ב' – מהלך ETL לאיסוף הנתונים:

נכתב מהלך באמצעות SSIS (SQL Server Integration Services) אשר מתחבר לכל שרת DB המופיע בטבלה [dbo].[SrvList_Size] ואוסף נתונים על גדלי ה – DB + גיבויים.

במהלך לפני ריקון הטבלאות [srv_Info_Backup_size] & [srv_info_Datafile_size]  מתבצע שמירה של נתוני הטבלאות לטבלאות זמניות. במקרה שהמהלך ייפול נאכלס חזרה את הנתונים בטבלאות מהטבלאות הזמניות.

consolidation_01

consolidation_02

במהלך אני משתמש ברכיב ForEach Loop Container עבור כל קבוצה של שרתים, כל קבוצה מוגדרת לפי DBMS_Vendor וגרסה :

  • קבוצה אחת מכילה רשימה של שרתי SQL Server 2005.
  • קבוצה שנייה מכילה רשימה של שרתי SQL Server 2008 ומעלה (יש הפרדה בין גרסאות שונות של SQL Server מכיוון שמגרסת 2008 קיים Compress Backup).
  • קבוצה שלישית מכילה רשימה של שרתי ORACLE.

בדוגמא הבאה רצים ב –LOOP   על Result Set של השאילתה הבאה (DBMS של SQL Server בגרסת 2008 ומעלה) :

SELECT     LTRIM(RTRIM(Server)) AS servername
FROM        [dbo].[SrvList_Size]
WHERE     (Connect = 1) and ([Type] like 'SQL Server') and (Version>9) and ([Holds_DBA_Rep]=0)
order by LTRIM(RTRIM(Server)) Desc

ע"פ ערך שדה Holds_DBA_Rep ייקבע אם לאסוף נתונים על אותו שרת

שאילתה לאיסוף נתוני גודל Compress DB Backup בשרת  SQL Server  2008ומעלה :

-- script for SQL 2008,2012,2014

Declare @FromDate as datetime
-- Specify the from date value
set @FromDate = GETDATE() -1

SELECT
   @@SERVERNAME AS SQLServerName,  
   cast(sum((msdb.dbo.backupset.compressed_backup_size/1024/1024))as decimal(13, 2)) AS 'Compress Backup Size in MB'
FROM   msdb.dbo.backupmediafamily  
   INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
WHERE
CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= @FromDate
AND msdb.dbo.backupset.backup_size > 0

שאילתה לאיסוף נתוני גודל DB :

select cast(@@SERVERNAME as nvarchar(100)) AS SQLServerName, sum(size*8/1024) as sizeMB
from sys.master_files

חישוב גודל DB בסביבת ORACLE :

select HOST_NAME,instance_name,MBYTE FROM
(select sum(a.bytes)/1024/1024 as MBYTE 
from v$datafile a) 
cross join
(select instance_name, HOST_NAME  
from v$instance b)

בשרתי אורקל חושב גודל הגיבוי כגודל ה – FRA (Fast Recovery Area) שע"פ המלצות ORACLE מוגדר ככפול פי 2.5 מסה"כ גודל ה –DataFiles  :

SELECT [Server]
      ,[TotalSizeMB]*2.5 as [TotalSizeMB]
      ,[SID]
  FROM [DBA_Rep].[dbo].[Srv_Info_DataFile_Size]
 where [SID] is not null

יצוין, כי ניתן לקבוע את תדירות ריצת המהלך ע"פ הצורך במידע עדכני שנדרש.  *

חלק ג' – כתיבת דוח להצגת הנתונים :

הופק דוח ב – SSRS (SQL Server Reporting Services) אשר מציג את חלוקת גדלי ה –DB  בחתכים שונים.

הגודל המחושב כולל  DataBase Files + שטח גיבויים בפועל בכל שרת DB.

הדוח מציג Sizing בחתכים שונים לפי :

  • : Storage VendorHITACHI, NETAPP…
  • סוג שרת : וירטואלי, פיזי.
  • DBMS Vendor : ORACLE, SQL SERVER…
  • Site : מיקום פיזי של השרת.
  • סביבות : PROD, TEST, DR.

consolidation_03
[image3]

הרשאות נדרשות ליישום הפיתרון :

  • עבור שליפת נתונים על גודל ה –DB וגיבויים ב – SQL Server נדרשות הרשאות התחברות וקריאה בלבד על טבלאות ה -BackupSet  ב –MSDB .
  • עבור שליפת מידע גודל ה –DB והגיבוי בסביבת ORACLE  נדרשות הרשאות התחברות וקריאה ל – Dictionary DATA  בלבד :
GRANT SELECT ANY DICTIONARY TO xxx;
  • להרצת הדוח נדרשת הרשאת קריאה בלבד על ה –DB המשמש כ – Repository

*ככלל נעשה שימוש בהרשאות מינימאליות.

פעולות תחזוקה בהקמת שרת DB חדש ב –  Datacenter :

  • הוספת רשומה לטבלה [dbo].[SrvList_Size] המכילה את פרטי שרת ה – DB החדש.
  • הוספת הרשאות מתאימות בשרת ה – DB בחדש ע"פ מה שצוין לעיל.

סיכום:

במאמר זה אני הצגתי פתרון ספציפי שהיה נדרש בארגוני לקבלת מידע אודות גודלי ה – DB ממאות שרתים. יותר חשוב זה הקונספט לאיסוף והצגת מידע וחיוני משרתים מרוחקים אותם אנו מנהלים. מן המידע הזה, אנו צריכים ללמוד להפיק את התובנות. כמובן שאפשר לקחת את זה לכיוונים נוספים כגון : תחקור IOPS, Latency, צריכת CPU, איסוף Extended properties, צריכת זיכרון, Waits Events וכו'…

במאמר הבא אציג תוספת לפתרון עבור שמירת מידע היסטורי של גודל DB וצפי היערכות ומגמות גדילה DB.

The following two tabs change content below.

אביעד כהן

DBA אפליקטיבי ותשתיתי של SQL Server, Oracle, MySQL בעל ניסיון של למעלה מ – 5 שנים. מתמחה בשיפור ביצועים וכוונון שאילתות, שרידות, יתירות, רפלקציה, Mirroring, Spatial, T - SQL, PowerShell ו – Business Intelligence (SSIS, SSRS, SSAS).

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

מבוא

מבוא לבעיות ביצועים באורקל

The following two tabs change content below.BioLatest Posts עודד רז עודד רז, מנכ"ל חברת בריליקס ומייסד אתר זה. עודד הוא Oracle ACE Director ואחד מה-DBA-ים הבכירים ביותר בישראל, עם מעל 15 שנות ניסיון כ-DBA תשתיתי ואפליקטיבי. לעודד [...]

ה-SQL Performance Analyzer ב-Real Application Testing

בפוסט הקודם הזכרתי בקצרה את ה-SQL Performance Analyzer, בפוסט הזה אני אציג את ה-SPA, יתרונות וחסרונות של המוצר ואיך כדאי להשתמש [...]

מבוא ל- Real Application Testing

הפעם רציתי לסקור feature שלם שנקרא RAT (או בשמו המלא Real Application Testing). ה- feature הזה הוא database option של Oracle Enterprise Edition והוא לא חדש בכלל. הוא הוצג ב- 11gR1 וגם נמצא בשימוש לא מועט בעולם. משום מה, אצלנו בארץ לא יוצא [...]
Copyright 2017 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: