Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
해당되는 게시물 10건
  SQL Server CPU Performance Problem 01 
작성일시 : 2008.09.22 20:00 | 분류 : SQL Server/Administration | 태그 : CPU, cpu performance, performance problem, problem, SQL Server, SQL Server 2005

원문 : http://technet.microsoft.com/en-us/magazine/cc137784.aspx

- CPU 하이퍼 쓰래딩은 일반적으로 Disable 하는 것이 좋다.

- CPU 가 DB의 Page을 읽을 때 Access 속도는 Physical Memory (RAM) 의 경우 약 0.5ms 가 Disk 일 경우 2~4ms (최적의 경우) 에서 4~10ms가 소요 된다. 결과적으로 Physical Memory의 데이터를 읽는 것이 성능상 가장 큰 이점이 있다.
설명 : Physical Memory에서 page를 read 하는 것을 soft page fault 라 하고 Disk에서 page를 읽는 것을 hard page fault 라 한다.

하나! 작업 부하 증가

%Processor Time 이 80%가 지속적으로 상회하고 있으면 CPU에 성능 로드가 있다고 봐도 무방하다. 이와 동시에 System\Processor Queue Length 를 확인해야 한다. SQL Server 는 하나의 논리 CPU에 하나의 Thread를 할당한다. 일반적으로 5배가 넘을 경우 성능에 문제가 있는 것으로 볼 수 있으며, 2배가 되더라도 성능에 문제가 있을 수 있다.

다만 해당 서버가 DBMS 외 다른 Role을 추가로 가지고 있다면 Processor Time 및 Context Switches/sec를 동시에 검토하여 서버 분산 여부를 판별 할 수 있다. 즉 Processor Time이 높고 동시에 Context Switches가 많이 발생 하게 되면 Role들 사이에 CPU 자원에 대한 경합이 일어나는 것으로 볼 수 있다. 이러한 현상이 지속적으로 발생하고 있다면 Role 분산을 통해 문제 현상을 해결 할 수 있다. 특히 Exchange 서버 Role이 동시에 운영되게 된다면 각 Role은 Physical Memory를 쓰고자 하고 이로 인해 극심한 Context Switching 동시에 Memory의 Hard Page Fault가 발생하게 된다. Context Switching운 논리 CPU 당 5000번 이상 발생 할 경우 일경우 성능에 문제를 발생 시키는 것으로 볼 수 있다.

높은 CPU 사용률과 함께 대기중인 큐가 많은 경우 SQL Server:SQL Statistics 성능 개체에 있는 Compilations/sec와 Re-Compilations/sec 카운터를 검토하는 것이 좋다. 쿼리 계획 컴파일 및 재컴파일은 CPU 사용률을 높힌다. Re-Compilations 값은 0에 가까워야 하지만, 시스템의 추세를 주의 깊게 검토하여 서버의 일반적인 동작과 정상적인 컴파일 수를 판단하는 것이 좋다. SQL Server:SQL Statistics 성능 개체에 있는 Batch Requests/sec를 검토하여 실제로 요청되는 쿼리와 해당 쿼리가 재컴파일 되는 빈도를 비교할 수 있다.

둘 ! 메모리 부족

SQLServer:Buffer Manager\Buffer Cache Hit Ratio 가 97% 미만 인 경우 메모리가 부족을 의심 할 수 있다.
또한 PLE (SQLServer:Buffer Manager\Page Life Expectancy)가 300초 미만 일 경우 해당 데이터 페이지는 자주 플러쉬 되고 있는 것으로 볼 수 있다. 다만 Checkpoint가 발생한 경우에는 버퍼 케쉬를 정상적으로 디스크에 플러쉬 함에 따라 일시적으로 PLE 값이 감소 할 수 있다.

Physical Memory (RAM)이 부족할 경우 버퍼 캐시 및 프로시저 캐시를 디스크로 플러시 해서 부족한 메모리를 확보해야 한다. 리소스 모니터는 플러쉬할 페이지를 결정하는 SQL Server 프로세스로써, RAM 부족할 경우 빈번하게 발생하게 된다. SQL Server: Buffer Manager\Lazy Writes/sec 카운터를 통해 확인 할 수 있다.

셋! 쿼리 성능

SQL Server로 새 쿼리가 제출될 때 쿼리 계획이 평가, 최적화 및 컴파일되어 프로시저 캐시에 저장된다. 서버로 쿼리가 제출될 때마다 요청과 일치하는 쿼리 계획이 있는지 확인하기 위해 프로시저 캐시가 검토된다. 일치하는 쿼리 계획이 없으면 SQL Server에서 새 쿼리 계획을 만들게 되는데 이 경우 비용이 들 수 있다.
SQLServer:Plan Cache\Cache Hit Ratio: SQL Plans 가 70% 미만인 경우 쿼리에 문제 있는 것으로 대략적인 판별은 가능하다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  DB내 모든 테이블의 SPACE 정보를 확인하는 쿼리 
작성일시 : 2008.07.16 15:51 | 분류 : SQL Server/Administration | 태그 : data, Index_Size, Reserved, Rows, sp_spaceused, SQL Server, table, table information, Unused, 테이블 정보

아래 쿼리는 임시로 #tblSize 를 만들고 이 table에 각 table의 Rows, Reserved, Data, Index_Size, Unused 를 저장하여 보여줍니다.

DECLARE @objname varchar(750)

CREATE TABLE #tblSize (
       Name nvarchar (128),
       Rows char (11),
       Reserved varchar (18),
       Data varchar (18),
       Index_Size varchar (18),
       Unused varchar (18)
)

DECLARE TabNameCur CURSOR FOR
       SELECT name
       FROM dbo.sysobjects
       WHERE xtype = 'u'
       ORDER BY name

OPEN TabNameCur
FETCH TabNameCur INTO @objname

WHILE @@FETCH_STATUS = 0
BEGIN
       insert #tblSize EXEC sp_spaceused @objname

FETCH NEXT FROM TabNameCur INTO @objname
END

CLOSE TabNameCur
DEALLOCATE TabNameCur

SELECT * FROM #tblSize

[결과]

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  데이터 페이지 들여다 보기 
작성일시 : 2008.05.19 14:45 | 분류 : SQL Server/Kernel | 태그 : dbcc page, page, SQL Server

본 글의 주 출처는 정원혁 선생님의 SQL Server 튜닝 및 inside SQL Server 입니다.

목차
Database 기본기 다지기
1. 선언적 데이터 무결성(Declarative Data Integrity)
2. 트랜잭션 프로세싱

트랜잭션 로그와 데이터 복원
1. 데이터 파일 쓰기
2. 로그 파일 쓰기
3. 트랜잭션 로그를 통한 데이터 복구

트랜잭션 로그 파일과 데이터 파일
1. 트랜잭션 로그 파일
2. 데이터 파일

내부 저장소
1. 데이터 형식 이해하기 (일반 데이터 형식 생략)
2. System View (SQL 2000의 System Table)
3. 데이터 페이지
4. 데이터 페이지 들여다 보기

use tempdb

create table fixed(
    col1 char(4) null
,    col2 int not null
)

insert fixed values ('a', 1)

-- DBCC page시 정확한 결과 반환을 위한 설정
dbcc traceon(3604)

-- DBCC Page ({dbid | dbname}, filenum, pagenum [printopt])
-- 옵션 설명
-- 0 : 버퍼 헤더와 페이지 헤더 출력
-- 1 : 버퍼 헤더, 페이지 헤더, 각 행들, 행 오프셋 테이블
-- 2 : 버퍼 및 페이지 헤더와 페이지 전체와 오프셋 테이블
-- 3 : 버퍼 헤더, 페이지 헤더, 각 행들, 행 오프셋 테이블 출력

--
select * from sysindexes
    where id = object_id('fixed')

-- first : 0x720000000100
-- first 칼럼 값을 스와핑 하여 읽는다.
-- 01 00 : 파일 번호 > 1
-- 72 00 00 00 : 페이지 번호 > 72 > 10진수 변환 시 114

dbcc page (tempdb, 1, 114, 0)
dbcc page (tempdb, 1, 114, 1)
dbcc page (tempdb, 1, 114, 2)
dbcc page (tempdb, 1, 114, 3)

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  데이터 페이지 
작성일시 : 2008.05.19 13:51 | 분류 : SQL Server/Kernel | 태그 : data page, dbcc page, SQL Server

정말 오랫만에 공부를 하는거 같네요...^^

목차
Database 기본기 다지기
1. 선언적 데이터 무결성(Declarative Data Integrity)
2. 트랜잭션 프로세싱

트랜잭션 로그와 데이터 복원
1. 데이터 파일 쓰기
2. 로그 파일 쓰기
3. 트랜잭션 로그를 통한 데이터 복구

트랜잭션 로그 파일과 데이터 파일
1. 트랜잭션 로그 파일
2. 데이터 파일

내부 저장소
1. 데이터 형식 이해하기 (일반 데이터 형식 생략)
2. System View (SQL 2000의 System Table)
3. 데이터 페이지

데이터 페이지

•페이지 헤더
–PageId, LSN, tornBits 등의 페이지의 정보가 기록된다.
–tornBits : 손상된 페이지에 대한 쓰기 감지를 위한 Bit (sp_dboption 의 torn page detection 옵션을 통해 조정 가능)

•데이터 행
–데이터 행이 기록된다. (모든 행은 1 Page의 데이터 행 8060byte를 넘어갈 수 없다.)
–Text, ntext, image의 경우 8060 이내일 경우 page 안에 저장한다.

•행 오프셋 배열
–2byte로 구성되어 있으며, 각 행의 논리적 순서를 말한다.
–SQL Server는 행을 구분하기 위해 파일번호 + 페이지 번호 + 페이지 슬롯 번호 를 이용한다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  복제가 정말 정말 안지워지십니까? 
작성일시 : 2008.05.15 10:50 | 분류 : SQL Server/Administration | 태그 : Delete, menual remove, Remove, Replication, sp_removedbreplication, SQL Server

별 짓을 다해봐도 복제가 안지워 지십니까?

방법 1 : http://msdn.microsoft.com/ko-kr/library/ms152757.aspx
방법 2: http://support.microsoft.com/kb/324401

1번과 2번 모두 써 보셨습니까?
마지막으로 희망을 하나 걸어 보세요.
sp_removedbreplication : 모든 복제 관련 개체를 삭제 합니다.

먼저 다음 쿼리를 이용하여 복제 구성이 잘 삭제 됐는지 확인 합니다.
select replinfo, * from sysobjects where replinfo=0 인 녀석을 찾으면 됩니다.

[구문]
sp_removedbreplication [ [ @dbname = ] 'dbname' ] [ , [ @type = ] type ]

[인수]
@dbname= 'dbname'데이터베이스의 이름입니다. dbnamesysname이며 기본값은 NULL입니다. NULL인 경우 현재 데이터베이스를 사용합니다.

@type = type
데이터베이스 개체를 제거 중인 복제의 유형입니다. typenvarchar(5)이며 다음 값 중 하나일 수 있습니다.
tran : 트랜잭션 복제 게시 개체를 제거합니다.
merge : 병합 복제 게시 개체를 제거합니다.
both(기본값) : 모든 복제 게시 개체를 제거합니다.

[참고]
http://msdn.microsoft.com/ko-kr/library/ms188734.aspx

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  MS SQL Express 버전에서 Standard / Enterprise 로 업그레이드 하기 
작성일시 : 2008.03.25 00:41 | 분류 : SQL Server/Administration | 태그 : enterprise, Express, skuupgrade, SQL Server, Standard, Upgrade

MS SQL 의 Express 버젼은 무료라는 장점이 있긴 하지만 4G의 DB 파일 한계가 있죠... 그래서 보통 데이터가 증가하면 SQL Server를 구입하게 되는데... 이때 버전 업을 해야하는 경우가 있습니다.
가장 간단한 방법은 해당 SQL 설치 파일이 있는 폴더로 이동하여 "setup.exe skuupgrade=1"을 타이핑하여 setup을 실행시키는 것 입니다.

다만 이때 클라이언트 구성 요소는 직접 설치하는 것이 여러 모로 효율 적인거 같습니다.
왜냐구요? Express에서는 SSIS 같은 도구는 설치가 되지 않았기 때문이죠...^^

그리고 중요한 한 가지!
"SELECT @@version" 을 통한 버전 확인이 중요합니다...^^

참고 : http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=55

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  SQL Server 열에 Caption (Commant, Description)을 달자 
작성일시 : 2008.03.13 15:51 | 분류 : SQL Server/Development | 태그 : caption, Column, commant, SQL Server, table

Oracle의 경우 Table 생성 시 각 열에 맞게 commant를 달아 줄 수 있습니다.







SQL Server 또한 동일한 주석을 달아 줄 수 있는데, 이는 Table 생성 이후에 달 수 있습니다.
다음 예제는 AdventureWorks 데이터베이스의 Address 테이블의 PostalCode 열에 Caption을 다는 것입니다.
USE AdventureWorks;
GO
EXEC sp_addextendedproperty
@name = N'Caption', @value = 'Postal code is a required column.',
@level0type = N'Schema', @level0name = Person,
@level1type = N'Table', @level1name = Address,
@level2type = N'Column', @level2name = PostalCode;
GO
참고 : 확장 속성을 관리하는 저장 프로시저

sp_addextendedproperty
sp_updateextendedproperty
sp_dropextendedproperty
fn_listextendedproperty()

출처 : http://technet.microsoft.com/ko-kr/library/ms180047.aspx
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  왜 Windows Ent와 SQL Server Std/Ent를 구입하고 클러스터를 구성 하지 않을까? 
작성일시 : 2008.01.28 22:58 | 분류 : SQL Server/Administration | 태그 : Migration, mscs, SQL Server

왜 Windows Ent와 SQL Server Std/Ent를 구입하고 클러스터를 구성 하지 않을까?

한가지 Tip을 알려드립니다.

원래 MSCS 구성은 두 노드간의 H/W이 완벽하게 같아야 함을 원칙으로 하지만 실제 구성해보면 차이가 있더라도 구성이 가능합니다. (Fail over 까지 가능) 자 그렇다면 Migration 할때 간단하게 업그래이드된 서버를 노드로 추가 하고 Fail over 한 이후 이전 노드를 지워 주면 됩니다. 또한 서버의 PM 작업이 필요할 경우 (보안 패치 설치 및 기타 Down Time이 필요) 노드 추가 후 서비스를 fail over 시키고 작업 종료 후 다시 fail over 시킨 후 기존 node를 삭제하면 됩니다.

[선행 조건]
- 동일 CPU 기반 (x86, x64, ia64)
- SAN 환경
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  SQL Server 버전 확인 방법 
작성일시 : 2007.12.08 20:25 | 분류 : SQL Server/Administration | 태그 : SQL 2005, SQL Server, 버전 확인

간단하 쿼리를 통해 알아 볼 수 있습니다. (물론 DB 엔진 속성을 통해서도 알 수 있음)

SELECT
           SERVERPROPERTY('productversion'),
           SERVERPROPERTY ('productlevel'),
           SERVERPROPERTY ('edition')

SELECT @@version

SQL Server 버전 표

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  DB Migration infomix to SQL Server 
작성일시 : 2007.07.26 16:25 | 분류 : SQL Server/Administration | 태그 : informix, Migration, SQL Server

최근에 Infomix 에서 SQL로 DB를 Migration 하는 작업을 진행하게 됐습니다.

뭐 그리 뽀족한 수가 있나 없나 찾아봤지만... 어쩔 수 없더군요...
MSDN, TechNet 열나게 뒤져 봤습니다.

그래서 내린 결론은 하나...
걍 DB 생성 스크립트 받아서 직접 수정한다... (무식 그 자체...)

작업 순서는 다음과 같습니다.

1. Database 생성 스크립트 취합 (Infomix에서 취합 함)
2. SQL Server 맞게 해당 스크립트 노가다로 수정 (제약 조건에 유의한다.)
3. Infomix DB 내용을 unl 파일로 받기 (SQL의 cvs파일 과 비슷한 파일)
4. BCP 및 Integration Service, DTS를 이용해 Data 밀어 넣기
5. Test 한다.

두 DB 간의 차이점은 다음 문서를 참조하세요...^^

Migrating Informix Databases to Microsoft SQL Server 2000
http://www.microsoft.com/technet/prodtechnol/sql/2000/deploy/infmxsql.mspx
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
 Prev   1   Next 

티스토리 툴바