메타 데이터 (데이터베이스에 메타 데이터 스토리지의 관리의 기초) 우리의 데이터웨어 하우스에 중 일부는 '테이블 성장'전진했다. 데이터웨어 하우스에서는 알면 도움이 얼마나 많은 테이블과 이러한 테이블의 성장 발전입니다.
그래서 당신은 이례적인 조치를하고 적시에 최적의 성능을 기존 데이터를 통해 아카이브에 별도의 테이블에 예 수 있도록 인식할 수 있습니다. 이 문서에서는 제가 예제를 어떻게 성장 테이블을 모니터할 수 있습니다주세요.
성장 테이블 당신에게 매일을 인식 테이블의 상태의 스냅샷을 만들합니다. 존재하는 얼마나 많은 레코드를 한 테이블에서 SQL Server의 통계를 유지합니다. 당신은 테이블에 계산하지 않습니다. 당신의 SQL 인스턴스에서 모든 데이터베이스에 대해이 필요 할 수 있습니다. 그럼 당신은 테이블에있는 테이블의 상태를 쓰고 싶어, 매일.
아래 표는 당신이 통계를 작성하는 만들 수 있습니다 예제 테이블이다. 당신은 분명히 당신을 위해 열을 확장할 수 있습니다 의미가 있습니다.
[ dbo ] . [ Tablerowcount ] ( 테이블 만들기는 [dbo가]. [Tablerowcount] ( TableRowCountID ] [ VARCHAR ] ( 128 ) NOT NULL, [가] [VARCHAR]을 (128) NULL을하지 TableRowCountID RegistrationDate ] [ DATETIME ] NULL, [등록 일자] [정보 DATETIME] 제 NULL을, DatabaseName ] [ VARCHAR ] ( 64 ) NULL, [데이터베이스 이름] [VARCHAR] (64) NULL을, TableName ] [ VARCHAR ] ( 64 ) NULL, [테이블 이름] [VARCHAR] (64) NULL을, NrOfRecords ] [ INT ] NULL, [국가 NrOfRecords은, [INT가] NULL이] [ PK_Tablerowcount ] PRIMARY KEY CLUSTERED 제약 [PK_Tablerowcount] PRIMARY 키 클러스터된 ( TableRowCountID ] ASC [는 ASC를 TableRowCountID] WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [ PRIMARY ] )와 (PAD_INDEX은 = 끄기, 켜기 끄기 ALLOW_ROW_LOCKS = STATISTICS_NORECOMPUTE IGNORE_DUP_KEY = 끄기 =,, ALLOW_PAGE_LOCKS = on 일)] 켜짐 [PRIMARY ON [ PRIMARY ] )] 켜짐 [PRIMARY
그럼 우리가 테이블에있는 각 데이터베이스에 대한 통계를 작성하는 저장 프로 시저를 만듭니다. 일부 하드 코딩된이 없습니다 물건 당신이 BI2_METABASE에 삽입하기 위해 데이터베이스 이름 (으로 적응해야합니다)은 데이터베이스 이름으로 대체해야합니다.
[ dbo ] . [ sp_tablerowcount ] ( @DEBUG BIT = 0 ) 작성 절차는 [dbo가]. [Sp_tablerowcount] (@ DEBUG 비트 = 0) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 그대로 / * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~ SPC 목적 : 하루 날짜마다 데이터베이스 당 레코드의 번호를 수집 작성자 : 로널드 Kraijesteijn을 만든날짜 : 2010 3월 업데이트 : 엑스 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~ 예 EXEC의 sp_tablerowcount 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ ~ ~ * /를 하는 BEGIN 설정의 NOCOUNT 켜기 @ SQL AS NVARCHAR ( MAX ) 있는 그대로 공표할 @ SQL 데이터 nvarchar (MAX는) @DB AS VARCHAR ( 32 ) ) 32있는 그대로의 DB를 공표할 @ VARCHAR를 ( @RC AS INT INT를 RC 그대로 공표할 @ @ DATE AS INT 일자로 INT @ 공표할 @ DATE = CAST ( YEAR ( GETDATE ( ) ) * 10000 + MONTH ( GETDATE ( ) ) * 100 세트 @ 날짜 = CAST (1 년 (getdate ()) * 10000 + 달 (getdate ()) * 100 ( GETDATE ( ) ) AS VARCHAR ( 8 ) ) + 하루 (getdate ()) 그대로) VARCHAR (8) - 깨끗한 하루 등록을 기존의 최대 수를 하나의 듀얼이 없었 으면 우리가 할 일은 (오늘!) Tablerowcount 삭제 Tablerowcount로부터 CAST ( YEAR ( RegistrationDate ) * 10000 + MONTH ( RegistrationDate ) 어디 CAST (일년 (등록 일자) * 10000 + 달 (등록 일자) + DAY ( RegistrationDate ) AS VARCHAR ( 8 ) ) = @ DATE * 100 + 1 일 (등록 일자)로 날짜 VARCHAR (8)) = @ @RC = @@ROWCOUNT 세트 @ RC =에 @ @ ROWCOUNT @DEBUG = 1 @ 경우 디버그 = 1 CAST ( @RC AS VARCHAR ( 16 ) ) 도서 검색 캐스트 (@ RC 그대로) VARCHAR (16) +는 " '님의 삭제됨'때문에 이미 그들은 오늘 통계 - 데이터베이스 테이블을 검색하는 시스템 CUR_DB CURSOR 공표할 커서 CUR_DB [ name ] ]를 선택 [이름 sys. databases 시스템 기술자로부터. 데이터베이스 [ name ] NOT IN ( 'master' , 'tempdb' , 'model' , 'msdb' ) [이름] 안 어디로 ( '마스터', 'tempdb를', '모델', 'msdb를') 레코드 당 테이블의 번호 등록 - CUR_DB 오픈 CUR_DB CUR_DB INTO @DB FETCH 반했어요 @ DB를의 CUR_DB @@FETCH_STATUS = 0 0 이왕 @ @ FETCH_STATUS = 하는 BEGIN @DEBUG = 1 PRINT 'Loading table statistics to metabase for database: ' + @DB 데이터베이스 @ 1면 인쇄 "로드 테이블 통계가 메타베이스에 대한 = DEBUG : '+ @ DB를 @ SQL = 'INSERT INTO BI2_METABASE.dbo.Tablerowcount @ SQL = '삽입으로 발달 BI2_METABASE.dbo.Tablerowcount 선택 (CAST (일년 (getdate ()) * 10000 + 달 (getdate ()) * 100 + 날 (getdate ()) 그대로 + VARCHAR (8)) + '_' + '_' '+ O.name)로 TableRowCountID DB를 정보 @ , 날짜 getdate (등록)로 , @ 이름 데이터베이스 DB를 그대로 , 이름 그대로 O.name 테이블 , NrOfRecords 그대로 I.rowcnt + @DB + '.dbo.sysobjects AS O 'DB를 프로그램에서 + @'+. O를 그대로 Dbo.sysobjects + @DB 내부는 DB를 '가입 + @ + '. I.id O.id = on 일 Dbo.sysindexes 난있는 그대로 장소에 I.indid (0, 1) 그리고 O.xtype = '' u 개 " 및 O [이름)]하지 인디애나 (sysdiagrams '' '' '' ''의 dtproperties 주문 인한 사망 [이름] " TRY 시도하는 BEGIN SP_EXECUTESQL @ SQL , N '@DB AS VARCHAR(32)' , @DB = @DB EXEC sp_executesql에 정보는 @ SQL은 N '을 @ DB를있는 그대로 "VARCHAR (32), @ @ DB를 = DB를 @RC = @@ROWCOUNT 세트 @ RC =에 @ @ ROWCOUNT @DEBUG = 1 PRINT 'Records loaded: ' + CAST ( @RC AS VARCHAR ( 8 ) ) )있다면 @ DEBUG = 1 인쇄 '를 기록로드 :'+ 캐스트 (@ RC 그대로 VARCHAR (8) TRY 끝 시도 CATCH 따라가려하는 BEGIN ERROR_MESSAGE ( ) 도서 검색 Error_Message () 'Error: processing table rowcount data for database ' 정자로 '오류 : 테이블 RowCount 데이터를 데이터베이스에 대한 처리'를 + @ DB를 @ SQL 정자로 @ SQL CUR_DB 닫기 CUR_DB CUR_DB 찾습니다 CUR_DB을 처리 @RC 귀환 @ RC CATCH 끝 따라가려면 CUR_DB INTO @DB FETCH 반했어요 @ DB를의 CUR_DB 끝 CUR_DB 닫기 CUR_DB CUR_DB 찾습니다 CUR_DB을 처리 끝
참고 : 저는 디버깅에 설정되어있는 추가 옵션이 있습니다. 경우 하나의 저항 값을 저장 프로 시저를 볼 수있는 출력. 당신이 원하기 때문에 더 나아가, 그는 멀리 이미 이전에 하루에 만들어진 모든 통계를 던져 하루 스냅샷.
이것은 SQL Server 에이전트 작업 스케줄링 있도록 밤에는 자동으로 호출 수 있으며, 그러면 통해 저장 프로 시저를하고 통계를 씁니다.
메시지를 남겨주 의견이나 질문을하십시오. 잘하면 당신이 뭔가.






















태그는 