ログサーバーから取得したすべてのサーバーのWindowsイベントログを含む単一のテーブルがありました。構造の整った大規模なSQLデータベースの作成
最初はこれで大丈夫でしたが、データを追加するほど遅くなりました...現在は数百万行にもなります。
だから私はそれが自分のテーブルに各サーバーを細分化して、より速く特定のクエリを作成する方が良いと思った。
問題は、すべてのサーバーでイベントを検索するとどうなりますか?
ここでは、テーブルを正しく設定する方法についていくつかアドバイスをしています。
以下は、 'server1'を実際の名前に置き換えて、各テーブルの構造をコピー&ペーストする方法です。私は、サーバーからのデータの列を添付しました
USE [Events_Data] GO /****** Object: Table [dbo].[servername1] Script Date: 8/18/2017 8:48:59 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[servername1]( [Message] [nvarchar](max) NULL, [Id] [nvarchar](max) NULL, [Version] [nvarchar](max) NULL, [Qualifiers] [nvarchar](max) NULL, [Level] [nvarchar](max) NULL, [Task] [nvarchar](max) NULL, [Opcode] [nvarchar](max) NULL, [Keywords] [nvarchar](max) NULL, [RecordId] [nvarchar](max) NULL, [ProviderName] [nvarchar](max) NULL, [ProviderId] [nvarchar](max) NULL, [LogName] [nvarchar](max) NULL, [ProcessId] [nvarchar](max) NULL, [ThreadID] [nvarchar](max) NULL, [MachineName] [nvarchar](max) NULL, [UserID] [nvarchar](max) NULL, [TimeCreated] [datetime] NULL, [ActivityId] [nvarchar](max) NULL, [RelatedActivityID] [nvarchar](max) NULL, [ContainerLog] [nvarchar](max) NULL, [MatchedQueryIDs] [nvarchar](max) NULL, [Bookmark] [nvarchar](max) NULL, [LevelDisplayName] [nvarchar](max) NULL, [OpcodeDisplayName] [nvarchar](max) NULL, [TaskDisplayName] [nvarchar](max) NULL, [KeywordsDisplayNames] [nvarchar](max) NULL, [Properties] [nvarchar](max) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
は...各テーブルには、「マシン名」列を除いて非常に似ているテーブルがのイベントを保持するサーバに固有です。
Message,Id,Version,Qualifiers,Level,Task,Opcode,Keywords,RecordId,ProviderName,ProviderId,LogName,ProcessId,ThreadID,MachineName,UserID,TimeCreated,ActivityId,RelatedActivityID,ContainerLog,MatchedQueryIDs,Bookmark,LevelDisplayName,OpcodeDisplayName,TaskDisplayName,KeywordsDisplayNames,Properties Error message whatever,1000,,0,2,100,,3.60288E+16,302366,Application Error,,Application,,,servernameapp1.domain.com,,00:03.0,,,\\servernamelogs\d$\windows-logs\archive-forwardedevents-2017-04-01-05-03-29-167.evtx,,System.Diagnostics.Eventing.Reader.EventBookmark,Error,Info,Application Crashing Events,Classic,System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty System.Diagnostics.Eventing.Reader.EventProperty
私はすべてのテーブルに対してクエリを実行できるだけでなく、構造化データベースの作成上の任意の助けいただければ幸いです!
私は、それぞれのサーバーをそれ自身のテーブルに分割することをお勧めしません。何かあれば 'servers'のテーブルと' logs'のテーブルが必要です。次に、外部キー 'server_id'に基づいて' server'に 'log'出力を割り当てます。これにより、特定のサーバーのログだけを表示することができます。 –
最も重要な3つのキーワード:*データ型*、* nullable *および* index *。そして、いいえ:これをいくつかのテーブルに分割しないでください! – Shnugo
他の人が言ったように、テーブルを分割しないでください。ただし、通常は1つのサーバーのみを照会すると、これはパーティション化の典型的な使用例になります。 –