방법

데이터베이스 파일 (MDF, NDF)에 대해 초기화(Zeroing)하지 않고 즉시 생성되도록 하려면 SQL Server 서비스 시작계정에 대해 [볼륨 유지관리 작업 수행] (Perform Volume Maintenance Tasks) 권한이 부여되어 있어야 합니다.
권한을 부여해 준 후 SQL Server 서비스를 재시작해줘야 적용되며, ERRORLOG에서 권한 적용 여부를 확인할 수 있습니다

  1. 이터 파일을 생성할 컴퓨터에서 로컬 보안 정책 애플리케이션(secpol.msc)을 엽니다.
  2. 왼쪽 창에서 로컬 정책 을 확장한 다음 사용자 권한 할당 을 클릭합니다.
  3. 오른쪽 창에서 '볼륨 유지 관리 작업 수행'(Perform volumn maintenance tasks) 을 두 번 클릭합니다.
  4. 사용자 또는 그룹 추가 를 클릭하고 SQL Server 서비스를 실행하는 계정(Default: NT SERVICE\MSSQLSERVER)을 추가합니다.
  5. 적용 을 클릭한 다음 모든 로컬 보안 정책 대화 상자를 닫습니다.
  6. SQL Server 서비스를 다시 시작합니다

확인

SQLServer 재시작 이후 ERRORLOG에서 권한 적용 여부를 확인

sp_readerrorlog
Database Instant File Initialization: 사용. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

참고 자료

[https://docs.microsoft.com/ko-kr/sql/relational-databases/databases/database-instant-file-initialization?view=sql-server-ver15\]

방법 1

EXEC sp_MSforeachtable @command1="print '?' DBCC DBREINDEX ('?', '', 90)"

--update stats

방법 2

-- Index Rebuild
DECLARE @i int, @sql varchar(1000)
DECLARE @tablename varchar(1000),@ownerName varchar(1000)
SET @i = 1
DECLARE DB_Cursor CURSOR FOR
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA, TABLE_NAME
OPEN DB_Cursor
FETCH NEXT FROM DB_Cursor
INTO @ownerName, @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql='ALTER INDEX ALL ON ' + @ownerName + '.' + @tablename + ' REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90) '
EXEC (@sql)
PRINT CONVERT(VARCHAR, @i) + '__' + @ownerName + '.' + @tablename + '............ OK'
SET @i = @i + 1
FETCH NEXT FROM DB_Cursor
INTO @ownerName, @tablename
END
CLOSE DB_Cursor
DEALLOCATE DB_Cursor

PRINT N'1. Index Rebuild...';

--update stats

방법

USE master;
GO
ALTER DATABASE MyTestDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE MyTestDatabase MODIFY NAME = MyTestDatabaseCopy
GO 
ALTER DATABASE MyTestDatabaseCopy SET MULTI_USER 
GO

참고 자료

[https://docs.microsoft.com/ko-kr/sql/relational-databases/databases/rename-a-database?view=sql-server-2017]

구성 시 주의점

  • Windows Cluster 용도 VIP 1ea, 리스너 용도 VIP 1 ea 필요함
  • 구성 장비의 IP는 Static IP로 설정
    • DHCP로 IP를 할당 받을 경우 Cluster 및 리스너 VIP를 설정 할 수 없음
  • 이중화 구성 장비 간 아래 PORT의 방화벽 오픈이 필요 ( 오픈해야 하는 PORT가 많으므로 보안 이슈 확인 후 장비 간 Any 오픈 )
    • MSSQL 실행 PORT : 1433(기본포트)
    • 클러스터 서비스 : 3343(TCP, UDP)
    • RPC : 135(TCP)
    • 클러스터 어드민 : 137(UDP)
    • 랜덤 포트 : 1024 ~ 65535, 49152 ~ 65535
  • 원할한 Failover를 위해 쿼럼 서버를 추가
    • 장비가 3 ea 이상인 경우도 쿼럼 서버를 추가하는것이 안전함.
  • Active와 Standby의 DB 데이터 저장 구조(mdf, ldf Path)가 같아야함
  • EnterPrise 버전만 여러개의 DB를 AlwaysOn 구성이 가능
    • Standard 버전은 하나의 DB만 AlwaysOn 구성이 가능
  • 안정적인 AlwaysOn 운영을 위해 클러스터 장비 간 Heartbeat Network 구성이 필요
  • Remote Registry Service 사용
  • 로컬 보안 설정의 ‘네트워크에서 이 컴퓨터로 엑세스’ 속성에 “Authenticated Users”가 포함되어야 함)
  • 클러스터 구성 시 스토리지를 공유해서 사용하지 않도록 설정
    • 스토리지 공유 : MSCS(Microsoft Cluster Service)방식 이중화
    • 스토리지 공유 하지 않음 : AlwaysOn 방식 이중화
  • AlwaysOn 구성 후, Alwayon Group의 OwnerNode와 클러스터 그룹의 OwnerNode 그룹이 일치 해야함
    • powerShell의 ‘get-Cluster-Group’ 명령어로 확인 가능
    • Node 이동은 Failover Clustering의 ‘추가 작업’ -> 코어 클러스터 리소스 이동 -> 노드 선택 메뉴로 변경 가능
  • 일반적으로 AlwaysOn 구성 시, 처리 속도는 20% ~ 30% 느려질 수 있음
    • 처리 지연이 발생하는 경우 mdf, ldf 모두 고성능 SSD로 변경하거나, 동기화 간 암호화 로직을 제거하는 방법이 있음.

참고 자료

[https://docs.entcloud.swisscom.com/guide/managed-services/managed-os/technical-description/windows-server-failover-cluster/#network]


to Top