はじめに
このドキュメントは、2015年4月22日から2015年4月23日までの間に本番データベースで実行されたメンテナンスの背後にある手順、スクリプト、およびイデオロギーを記録します。詳細はアプリケーションに固有ですが、原則は本番環境で同様の操作を行う必要がある他のユーザーに役立つ場合があります。 。
背景
データベースは、テーブル EPOEventsで1.44TBを超えるまでに成長しました。 このサイズの半分以上(792GB)を消費します。過去に、このテーブルの90日以上前のエントリを削除するための努力がなされてきました。残念ながら、それは無駄であることがわかりました。これを達成するためにスケジュールされたジョブは、どのセッションでも完了できませんでした。その理由は、データベースのパフォーマンスが低いことでした。
話し合いの結果、 EPOEvents全体を削除することが決定されました。 それを切り捨てることによってテーブル。さらなる決定は、将来予想されるデータの増加に備えてデータベースを正しく準備することでした。
問題のデータベースサーバーの詳細は以下のとおりです。
サーバー名 | SVR-EPO-02 |
インスタンス名 | SVR-EPO-02 \ ENG_AVSERVER |
OSバージョン | Windows 2008 R2 Enterprise(SP1)64ビット |
DBバージョン | Microsoft SQL Server 2008 R2(SP1)64ビット |
IPアドレス | XX.XX.XX.XX |
データベース名 | ePO4_SVR-EPO-02 |
EPOEVENTSテーブル
EPOEventsを定義するスクリプト 表は付録Iに記載されています。
このテーブルのAutoID列は、テーブルHIP8_EventInfo、HIP8_IPSEventParameter、およびSCOR_EVENTSと外部キーの関係にあることに注意してください。これは、EPOEventsテーブルの切り捨てに使用されるアプローチに影響しました。要約の詳細は以下の表にあります:
この情報は、リスト1のステートメントを使用して抽出されました。
USE [ePO4_SVR-EPO-02]
GO
EXEC sp_fkeys 'EPOEvents'
手順の概要
変更中に使用された手順の概要:
- 200GBドライブを5台配備する
- EPOアプリケーションサービスを停止する
- EPOデータベースをバックアップする
- 新しいファイルグループを作成する
- テーブルEPOイベントを切り捨てる
- EPOEventsを新しいファイルグループに移動します
- 子テーブルで外部キーを再作成する
- EPOEventsテーブル定義のスクリプトを作成する
- EPOデータベースをバックアップする
- PRIMARYファイルグループのデータファイルを縮小する
- EPOデータベースをバックアップする
- EPOデータベースを削除します
- フォーマットドライブJ
- MOVEを使用してEPOデータベースを復元する
- TempDBをドライブQに再配置
- EPOアプリケーションサービスを開始する
- EPOEventsが入力されていることを確認します
200GBドライブを5台配備する
5台の新しいドライブがサーバーにデプロイされました。サーバー上のすべてのドライブの完全なリストは次のとおりです。
DRIVE | 使用 | NEW? | コメント |
C | システムドライブ | いいえ | デフォルトのクラスターサイズ(4KB) |
D | アプリケーションドライブ | いいえ | デフォルトのクラスターサイズ(4KB) |
私 | MSSQLデータ(OLD) | いいえ | デフォルトのクラスターサイズ(4KB) |
J | MSSQLログ | いいえ | SQLの推奨クラスターサイズ(64K) |
M | MSSQLデータ(FG_LARGEファイルグループ) | はい | SQLの推奨クラスターサイズ(64K) |
N | MSSQLデータ(FG_LARGEファイルグループ) | はい | SQLの推奨クラスターサイズ(64K) |
O | MSSQLデータ(FG_LARGEファイルグループ) | はい | SQLの推奨クラスターサイズ(64K) |
P | MSSQLデータ(PRIMARY FileGroup) | はい | SQLの推奨クラスターサイズ(64K) |
Q | MSSQL TempDB | はい | SQLの推奨クラスターサイズ(64K) |
すべての新しいドライブは、MS SQL Serverデータまたはログファイルを含むドライブに対してMicrosoftが推奨するように、64Kクラスターサイズを使用してフォーマットされました[1]。ドライブJも、データベースのバックアップを取った後、再フォーマットされました。
[1]完全なディスカッションには、https://msdn.microsoft.com/en-us/library/dd758814.aspx
からアクセスできます。EPOアプリケーションサービスを停止する
変更期間中にデータベースが更新されないようにするために、すべてのアプリケーションサービスが停止されました。停止した(またはダウンしたことが確認された)アプリケーションサービスは次のとおりです。
- McAfee ePolicyOrchestrator4.6.8アプリケーションサーバー
- McAfee ePolicyOrchestrator4.6.8イベントパーサー
- McAfee ePolicyOrchestrator4.6.8サーバー
EPOデータベースのバックアップ
リスト2のスクリプトを使用して、既存の構造に対してアクションが実行される前に、データベースの最初のバックアップが作成されました。
リスト2:ePO4_SVR-EPO-02データベースの最初のバックアップ
BACKUP DATABASE [ePO4_SVR-EPO-02] to
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_A10.bak'
WITH STATS = 5, COMPRESSION, NAME = N'ePO4_SVR-EPO-02 First Backup Before Purge'
新しいファイルグループを作成する
リスト3のスクリプトと同等のFG_LARGEという新しいファイルグループが作成されました。ファイルグループに追加されたすべてのファイルは、初期サイズ40GB、増分1G、最大サイズ100GBで定義されました。
リスト3:ファイルグループFG_LARGEの作成
USE [master]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILEGROUP [FG_LARGE]
GO
USE [master]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_01', FILENAME = N'M:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_01.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_02', FILENAME = N'M:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_02.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_03', FILENAME = N'N:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_03.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_04', FILENAME = N'N:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_04.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_05', FILENAME = N'O:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_05.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
ALTER DATABASE [ePO4_SVR-EPO-02] ADD FILE ( NAME = N'ePO4_SVR-EPO_FG_LARGE_06', FILENAME = N'O:\MSSQL\DATA\ePO4_SVR-EPO_FG_LARGE_06.ndf' , SIZE = 41943040KB , MAXSIZE = 104857600KB , FILEGROWTH = 1048576KB ) TO FILEGROUP [FG_LARGE]
GO
テーブルEPOイベントを切り捨てる
リスト4は、EPOEventsテーブルを正常に切り捨てるために必要なタスクの完全なセットを示しています。スクリプトには、わかりやすくするためのメモが含まれています。
注意すべき基本的な問題は、外部キー関係に親として参加しているテーブルを切り捨てることができないことです。参照整合性に違反します。外部キーは通常、ONDELETECASCADEまたはONDELETESET NULL句で定義されるため、削除は機能し、参照整合性を維持します。
リスト4:EPOEventsテーブルの切り捨てと新しいテーブルスペースへの再配置
/****** Check Foreign Keys Referencing EPOEvents ******/
USE [ePO4_SVR-EPO-02]
GO
EXEC sp_fkeys 'EPOEvents'
/****** Script Identified Foreign Keys ******/
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] WITH CHECK ADD CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS] FOREIGN KEY([EVENTID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] CHECK CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS]
GO
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[HIP8_EVENTINFO] WITH CHECK ADD CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS] FOREIGN KEY([EVENTID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[HIP8_EVENTINFO] CHECK CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS]
GO
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[SCOR_EVENTS] WITH CHECK ADD CONSTRAINT [SCOR_EVENTS_EPO_EVENTS] FOREIGN KEY([EPO_EVENT_AUTO_ID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[SCOR_EVENTS] CHECK CONSTRAINT [SCOR_EVENTS_EPO_EVENTS]
GO
/****** Backup the Child Tables ******/
USE [ePO4_SVR-EPO-02]
GO
SELECT * INTO HIP8_IPSEVENTPARAMETER_BAK FROM HIP8_IPSEVENTPARAMETER;
SELECT * INTO HIP8_EVENTINFO_BAK FROM HIP8_EVENTINFO;
SELECT * INTO SCOR_EVENTS_BAK FROM SCOR_EVENTS;
GO
/****** Truncate Child Tables ******/
USE [ePO4_SVR-EPO-02]
GO
TRUNCATE TABLE HIP8_IPSEVENTPARAMETER;
TRUNCATE TABLE HIP8_EVENTINFO;
TRUNCATE TABLE SCOR_EVENTS;
/****** Drop Foreign Keys ******/
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE HIP8_IPSEVENTPARAMETER DROP CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS];
ALTER TABLE HIP8_EVENTINFO DROP CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS];
ALTER TABLE SCOR_EVENTS DROP CONSTRAINT [SCOR_EVENTS_EPO_EVENTS];
/***** Truncate EPOEvents Table ******/
USE [ePO4_SVR-EPO-02]
GO
TRUNCATE TABLE EPOEVENTS;
EPOイベントを新しいファイルグループに移動
リスト5のスクリプトを使用して、EPOEventsテーブルをFG_LARGEファイルグループに移動しました。
リスト5:EPOEventsファイルグループFG_LARGEの移動
/***** Move EPOEvents to the New Filegroup FG_LARGE ******/
-- This is achieved by recreating the Clustered Index used by Primary Key on this table
-- First Step is to Script the Clustered Index
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [PK_EPOEvents_AutoID] PRIMARY KEY CLUSTERED
(
[AutoID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
-- Second Step is to drop and recreate the Clustered Index after changing
-- the Filegroup the Script (observe the ON Clause in the create statement below:
-- Filegroup was previously PRIMARY and is now FG_LARGE)
-- Drop Statement
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[EPOEvents] DROP CONSTRAINT [PK_EPOEvents_AutoID]
-- Create Statement
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [PK_EPOEvents_AutoID] PRIMARY KEY CLUSTERED
(
[AutoID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [FG_LARGE]
GO
子テーブルで外部キーを再作成
手順4.1.5で特定された子テーブルの外部キーは、リスト6のスクリプトを使用して再作成されました。
リスト6:EPOEventsテーブルの切り捨てと新しいファイルグループへの再配置
USE [ePO4_SVR-EPO-02]
GO
ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] WITH CHECK ADD CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS] FOREIGN KEY([EVENTID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[HIP8_IPSEVENTPARAMETER] CHECK CONSTRAINT [FK_HIP8_IPSEVENTPARAMETER_EPOEVENTS]
GO
ALTER TABLE [dbo].[HIP8_EVENTINFO] WITH CHECK ADD CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS] FOREIGN KEY([EVENTID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[HIP8_EVENTINFO] CHECK CONSTRAINT [FK_HIP8_EVENTINFO_EPOEVENTS]
GO
ALTER TABLE [dbo].[SCOR_EVENTS] WITH CHECK ADD CONSTRAINT [SCOR_EVENTS_EPO_EVENTS] FOREIGN KEY([EPO_EVENT_AUTO_ID])
REFERENCES [dbo].[EPOEVENTS] ([AUTOID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[SCOR_EVENTS] CHECK CONSTRAINT [SCOR_EVENTS_EPO_EVENTS]
GO
EPOEventsテーブル定義のスクリプト
バックアップとして、EPOEventsテーブルのDDLの抽出をスクリプト化するのに理想的でした。これは、右クリックしてオプション Script Table as> CREATE To> New Query Editor Windowを選択することで実行されました。 SSMS[1]オブジェクトエクスプローラーから。結果のスクリプトは、 .sqlに保存できます。 ファイル。
EPOデータベースのバックアップ
次の段階(データファイルの縮小)に備えるために、リスト7のスクリプトを使用してEPOデータベースの2番目のバックアップを作成しました。
リスト7:EPOデータベースの2番目のバックアップ
BACKUP DATABASE [ePO4_SVR-EPO-02] TO
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_C10.bak'
WITH STATS = 5, COMPRESSION, NAME = N'ePO4_SVR-EPO-02 Backup After Purge'
PRIMARYファイルグループのデータファイルを縮小する
EPOEventsテーブルを切り捨てて解放されたスペースを再利用するには、縮小が必要です。この場合、データファイルをより小さなドライブに再配置する必要があるため、これも重要でした。
データファイルはドライブIから再配置されました– 3 TBドライブからドライブP、200GBドライブへ。
PRIMARYファイルグループ内の3つのデータファイルは、論理的に ePO4_SVR-EPO-01という名前が付けられました。 (〜300GB)、 ePO4_SVR-EPO-02 (〜500GB)、および ePO4_SVR-EPO-03 (〜400GB)。
目標は、すべてのファイルをそれぞれ40000MBに縮小することでした。タスクには5〜7回の反復が必要であり、それぞれが50000MBを削除しました。
リスト8:PRIMARYファイルグループ内のデータファイルの縮小
USE [ePO4_SVR-EPO-02]
GO
DBCC SHRINKFILE (N'ePO4_SVR-EPO-01' , 40000)
DBCC SHRINKFILE (N'ePO4_SVR-EPO-02' , 40000)
DBCC SHRINKFILE (N'ePO4_SVR-EPO-03' , 40000)
GO
EPOデータベースのバックアップ
EPOデータベースの2番目のバックアップは、リスト5のスクリプトを使用して作成されました。 次の段階の準備をします(既存のデータベースを削除します)。スクリプトはリスト9にあります 。
リスト9:ePO4_SVR-EPO-02データベースの最初のバックアップ
BACKUP DATABASE [ePO4_SVR-EPO-02] TO
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E10.bak'
WITH STATS = 5, COMPRESSION, NAME = N'ePO4_SVR-EPO-02 Backup After Shrink'
EPOデータベースを削除します
SSMS GUIを使用してデータベースを削除しました。データベースを右クリックし、ドロップダウンメニューから[削除]オプションを選択します。同等のSQLはリスト10にあります 。
リスト10:EPOデータベースを削除する
USE [master]
GO
DROP DATABASE [ePO4_SVR-EPO-02]
GO
フォーマットドライブJ
この手順では、最適なI / OパフォーマンスのためにMicrosoftが推奨するように、64Kクラスターサイズを使用してドライブJをフォーマットします。このタスクは、以前はステップ4.1.1でデプロイされた新しいドライブで実行されていました。
図3は、[フォーマット...]ダイアログボックスで選択されたオプションを示しています。
MOVEを使用してEPOデータベースを復元する
復元操作が必要だった理由は次の3つです。
- トランザクションログファイルを含むドライブJをフォーマットするには(上記のように)。
- 縮小操作によって引き起こされた断片化を取り除くため。
- データベースを新しいドライブに再配置します。
リスト11のスクリプト 復元に役立ちます。この復元に使用されるバックアップセットは、手順4.1.8で作成された最後のバックアップであることに注意してください。また、MOVEオプションは、PRIMARYファイルグループ内のデータファイルをドライブPに再配置するのに役立つことに注意してください。
リスト11:EPOデータベースを削除する
RESTORE DATABASE [ePO4_SVR-EPO-02] FROM
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E01.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E02.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E03.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E04.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E05.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E06.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E07.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E08.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E09.bak',
DISK = 'I:\MSSQL\BACKUP\ePO4_SVR-EPO-02_22Apr2015_E10.bak'
WITH STATS = 5,
MOVE 'ePO4_SVR-EPO-02' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-02.mdf',
MOVE 'ePO4_SVR-EPO-01' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-01.ndf',
MOVE 'ePO4_SVR-EPO-03' TO 'P:\MSSQL\DATA\ePO4_SVR-EPO-03.ndf'
TempDBをドライブQに再配置
大規模なデータベースのパフォーマンスを最適化するには、専用ドライブにTempDBファイルを配置することもお勧めします。
リスト9のスクリプトを使用して、TempDBをドライブQに再配置しました。この操作中に、冗長なTempDBデータファイルが削除されたことに注意してください。 TempDBデータファイルの数は、SQLServerで使用可能な物理CPUの数と一致する必要があります。
リスト12:TempDBの再配置
-- Drop unnecessary TempDB files
-- The following script was run several times and required several restarts of the -- SQL instance
USE [tempdb]
GO
ALTER DATABASE [tempdb] REMOVE FILE [tempdev_xx]
GO
-- Relocate TempDB files
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'Q:\MSSQL\DATA\tempdev.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev_01, FILENAME = 'Q:\MSSQL\DATA\tempdev_01.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'J:\MSSQL\LOG\templog.ldf');
GO
-- Restart SQL Server
-- Confirm the location of TempDB files
SELECT name as 'File Name', physical_name as 'File Directory'
FROM sys.master_files
WHERE database_id = DB_ID('tempdb');
GO
EPOアプリケーションサービスを開始する
SQL Serverインスタンスが正常であることが確認されると、すべてのアプリケーションサービスが開始されました。開始されたアプリケーションサービスは次のとおりです。
- McAfee ePolicyOrchestrator4.6.8アプリケーションサーバー
- McAfee ePolicyOrchestrator4.6.8イベントパーサー
- McAfee ePolicyOrchestrator4.6.8サーバー
テーブルにデータが入力されていることを確認する
スクリプトはリスト13で、プロセス全体が完了した後、テーブルEPOEventsと子テーブルにデータが入力されていることを確認しています。
リスト13:TempDBの再配置
USE [ePO4_SVR-EPO-02]
GO
SELECT COUNT(*) EPOEvents_CNT FROM EPOEvents;
SELECT COUNT(*) HIP8_EventInfo_CNT FROM HIP8_EventInfo;
SELECT COUNT(*) HIP8_IPSEventParameter_CNT FROM HIP8_IPSEventParameter;
SELECT COUNT(*) SCOR_EVENTS_CNT FROM SCOR_EVENTS;
変更タスクの投稿
変更後のタスクの概要
1ジョブCustom_PurgeEPOイベント 100日以内にキャプチャされたイベントの数を維持するために作成されました。この仕事が常に成功するようにすることが重要です。
2以前にEPOデータベースサーバーに割り当てられていた余分なスペース、特にドライブI(現在は1 TB)を再利用できます。
3バックアップジョブCustom_Daily_Backup 変更中に作成されました。このジョブによって作成されたバックアップは、バックアップセットを I:/ MSSQL / Backup /にドロップします。 。ドライブIをシステムから削除する場合は、このパスを変更する必要があります。また、グループバックアップポリシーに従ってこれらのバックアップを保存する必要があります。
付録
付録I
EPOEVENTS TABLE DDL
USE [ePO4_SVR-EPO-02]
GO
/****** Object: Table [dbo].[EPOEvents] Script Date: 04/23/2015 01:40:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[EPOEvents](
[AutoID] [int] IDENTITY(1,1) NOT NULL,
[AutoGUID] [uniqueidentifier] NOT NULL,
[ServerID] [nvarchar](16) NOT NULL,
[ReceivedUTC] [datetime] NOT NULL,
[DetectedUTC] [datetime] NOT NULL,
[AgentGUID] [uniqueidentifier] NOT NULL,
[Analyzer] [nvarchar](16) NOT NULL,
[AnalyzerName] [nvarchar](64) NOT NULL,
[AnalyzerVersion] [nvarchar](20) NOT NULL,
[AnalyzerHostName] [nvarchar](128) NULL,
[AnalyzerIPV4] [int] NULL,
[AnalyzerIPV6] [binary](16) NULL,
[AnalyzerMAC] [nvarchar](16) NULL,
[AnalyzerDATVersion] [nvarchar](20) NULL,
[AnalyzerEngineVersion] [nvarchar](20) NULL,
[AnalyzerDetectionMethod] [nvarchar](128) NULL,
[SourceHostName] [nvarchar](266) NULL,
[SourceIPV4] [int] NULL,
[SourceIPV6] [binary](16) NULL,
[SourceMAC] [nvarchar](16) NULL,
[SourceUserName] [nvarchar](128) NULL,
[SourceProcessName] [nvarchar](128) NULL,
[SourceURL] [nvarchar](1024) NULL,
[TargetHostName] [nvarchar](266) NULL,
[TargetIPV4] [int] NULL,
[TargetIPV6] [binary](16) NULL,
[TargetMAC] [nvarchar](16) NULL,
[TargetUserName] [nvarchar](128) NULL,
[TargetPort] [int] NULL,
[TargetProtocol] [nvarchar](16) NULL,
[TargetProcessName] [nvarchar](128) NULL,
[TargetFileName] [nvarchar](266) NULL,
[ThreatCategory] [nvarchar](128) NOT NULL,
[ThreatEventID] [int] NOT NULL,
[ThreatSeverity] [tinyint] NOT NULL,
[ThreatName] [nvarchar](128) NOT NULL,
[ThreatType] [nvarchar](32) NOT NULL,
[ThreatActionTaken] [nvarchar](24) NOT NULL,
[ThreatHandled] [bit] NULL,
[TheTimestamp] [timestamp] NOT NULL,
CONSTRAINT [PK_EPOEvents_AutoID] PRIMARY KEY CLUSTERED
(
[AutoID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_EventID] DEFAULT (newid()) FOR [AutoGUID]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_ServerID] DEFAULT (N'SVR-EPO-02') FOR [ServerID]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_ReceivedUTC] DEFAULT (getutcdate()) FOR [ReceivedUTC]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_ThreatSeverity] DEFAULT ((1)) FOR [ThreatSeverity]
GO
ALTER TABLE [dbo].[EPOEvents] ADD CONSTRAINT [DF_EPOEvents_ThreatActionTaken] DEFAULT ('none') FOR [ThreatActionTaken]
GO
付録II
JOBCUSTOM_PURGEEPOイベント
USE [msdb]
GO
/****** Object: Job [Custom_Purge EPO Events] Script Date: 04/25/2015 19:47:51 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 04/25/2015 19:47:51 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Custom_Purge EPO Events',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'No description available.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [Step 1] Script Date: 04/25/2015 19:47:51 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'Step 1',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'DECLARE @NbLignes int ;
SELECT @NbLignes = COUNT(*) FROM EPOEvents WHERE DATEDIFF(day, DetectedUTC, GETDATE()) > ''100'';
PRINT ''Total number of lines to delete:'';
PRINT @NbLignes;
WHILE (@NbLignes > 0)
BEGIN
PRINT ''Total number of lines LEFT to delete: :'';
PRINT @NbLignes;
PRINT ''Start deleting 50000 lines'';
BEGIN TRAN DEL_SET;
DELETE TOP(500000) FROM EPOEvents WHERE DATEDIFF(day, DetectedUTC, GETDATE()) > ''100'';
COMMIT;
SET @NbLignes = @NbLignes - ''50000'';
WAITFOR DELAY ''00:05'';
END
PRINT ''End of Maintenance'' ;
',
@database_name=N'ePO4_SVR-EPO-02',
@output_file_name=N'D:\MSSQL\JOBLOG\purgeepoevents.txt',
@flags=2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @[email protected], @name=N'Purge Schedule',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=1,
@freq_recurrence_factor=0,
@active_start_date=20130312,
@active_end_date=99991231,
@active_start_time=200000,
@active_end_time=235959,
@schedule_uid=N'3d0b8826-691d-4d3c-aca9-00cb5ce246b2'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO