http://ko.sunningview.com/article/5325  퍼옴.

메모리 구조를 보장하기 위해 래치 래치 일관성 경량 동기화 메커니즘 SQL Server 엔진은 무엇입니까. 이러한 인덱스, 데이터 페이지 (예 : 비 잎 수준 인덱스 페이지 등) 내부 구조 등.

< 래치는

래치는 메모리 구조를 보장하기 위해 일관성있는 경량 동기화 메커니즘 SQL Server 엔진이 무엇인지입니다. 이러한 인덱스, 데이터 페이지 (예 : 비 잎 수준 인덱스 페이지 등) 내부 구조 등. SQL Server는 I / O 래치 보호가 버퍼 풀 페이지에로드되어 있지 않은, 사용 비 버퍼 래치 보호 메모리 내부 구조와, 버퍼 래치 보호 페이지 버퍼 풀을 ​​사용합니다.
  1. 버퍼 래치 : 작업자 스레드 전에 페이지가 버퍼 풀에 액세스 할 때, 먼저이 페이지에 래치 받아야합니다. 주로 사용자 개체 및 시스템 개체 페이지를 보호하기 위해 사용된다. 근로자가 요구하는 액세스 페이지가 버퍼 풀에없는, 그것은 풀에 해당하는 페이지를로드 스토리지 시스템에서 비동기 I / O를 보낼 것입니다 : _ *
  2. I / O를 래치 형 성능 PAGELATCH을 기다립니다. 이 과정은, 해당 페이지의 I / O 래치 얻을 호환 래치 풀로 동일한 페이지를로드 다른 스레드를 방지한다. 유형 성능 PAGEIOLATCH을 기다립니다 _ *
  3. 비 버퍼 래치 : 버퍼 풀 페이지 외부에서 내부 메모리 구조를 보호하기 위해 사용. 유형 성능있는 Latch_XX을 기다립니다.
래치 인보다는 ​​전체 트랜잭션을 유지하는 로크로만 대응 페이지 또는 내부 구조의 동작 동안 유지. 예를 들어, WITH NOLOCK 테이블을 조회하여. 쿼리 프로세스는 테이블의 모든 수준에서 공유 잠금을 획득하지 않지만 데이터 페이지 전에 읽을 수 있습니다, 당신은 얻을이 페이지를 래치 할 필요가있다.
=
래치 모드
래치 잠금 장치와 함께, 그것은 SQL 서버 엔진 동시성 제어의 일부입니다. 높은 동시성의 경우 래치하는 것은 피할 수없는 경쟁 환경. SQL 서버는 다른 마무리 대상 리소스를 액세스하기 위해 래치 대상 리소스를 해제 할 때까지 기다릴 호환 개의 래치에게 요청 스레드를 강제로 호환 모드를 사용한다.
래치 모드 5 종류가 있습니다 :
  • KP - 래치 구조 기준에 의해 파괴되지 않도록 유지 SH
  • - 필요한 경우 공유 래치는 데이터 페이지를 읽고
  • UP - 업데이트 래치 데이터 변경 페이지가 필요할 때
  • EX - 필요가 데이터 페이지를 작성하는 경우 독점 래치 전용 모드가 주로 사용됩니다
  • DT - 데이터가 필요
래치 모드 호환성에 의해 참조 될 때 래치 구조적 손상을 파괴, Y는 N을 나타내고, 호환 나타냅니다 호환되지 않습니다 :
KP SH UP EX DT
Y Y Y < /td> Y N
Y Y Y N N
Y Y N < /td> N N
Y N N N N
N N N < /td> N은 N
& LT/div>
  • 래치 경합에 미치는 영향 요인
요소 SLEEP_TASK
논리적 CPU 어떤 멀티 코어의 과도한 사용을 고백 래치 경합 시스템이 나타납니다. 래치 경합은 시스템의 허용 수준, 사용 16 이상의 코어의 대부분을 초과합니다.
건축 설계 및 액세스 모드 크기 B 트리 깊이, 인덱스, 밀도 및 페이지 디자인, 데이터 액세스 모드 동작이 과도 래치 경합으로 이어질 가능성이 높다
응용 프로그램 계층 동시성 높은 래치 경합 애플리케이션 층의 가장 높은 동시 요청을 동반한다.
레이아웃 데이터베이스 논리 파일 논리 파일 배치함으로써 경쟁 래치의 정도에 영향을 미치는 레이아웃, (등 PFS, GAM, SGAM, IAM, 등) 분배 장치 구조에 영향을 미친다. 이것의 가장 유명한 예는 다음과 같습니다 자주 PFS 페이지의 tempdb의 경쟁의 결과로 작성하고 임시 테​​이블을 삭제할 때
I / O 서브 시스템의 성능 PAGEIOLATCH는 SQL 서버의 I / O 서브 시스템을 기다리는 많은 의미 기다립니다 .
더 얕은 B 트리 많은 수의. 페이지 분할을 수행 할 때, 우리는 모든 수준에서 B- 트리 EX 래치를 수정 SH 래치를 얻고 데이터의 모든 페이지에서 얻을 필요가있다. 삽입의 경우에 발생하는 B- 트리 루트 페이지 분할로 매우 높은 동시성뿐만 아니라, 매우 가능성이 리드를 삭제합니다. 루트 페이지 분할 비 버퍼 래치로 이어질 것입니다 : ACCESS_METHODS_HBOT_VIRTUAL_ROOT을.
진단 래치 경합
주요 진단 방법과 도구는 다음과 같습니다 :
  • 관측 성능 모니터 CPU 사용률 및 SQL Server 대기 시간이 있는지 두 개의 관련 결정합니다.
  • 은 DMV 래치 특정 유형의 자원 경쟁에 의해 발생하기.
  • 특정 비 버퍼 래치 경합 진단, 또한 SQL 서버 프로세스의 메모리 덤프 파일을 획득하고 분석하기 위해 함께 윈도우 디버깅 툴을 결합해야.
래치 경합 정상적인 활동이고, 래치 경합이 발생하는 자원에 대한 액세스를위한 타겟 및 기다리는 시간이 시스템 처리량에 영향을 미치지 만하면 해로운 것으로 믿어졌다. 경합의 적당한 정도를 확인하기 위해, 함께 성능, 시스템 스루풋 처리, IO 및 CPU 자원 분석의 조합을 필요로한다.
[
래치 경합으로 시간이 애플리케이션 성능에 미치는 영향
1. 페이지 래치 평균 대기 시간의 성장과 증가 시스템 처리량을 처리 계약 을 측정 기다립니다. 페이지 래치 평균 대기 시간이 시스템 처리량을 증가시키고, 특히 성장 버퍼 래치 대기 시간을 일관된 성장을 관리하는 저장 시스템의 응답 시간을 초과하는 경우
, 현재 대기중인 작업을 확인할 sys.dm_os_waiting_tasks 사용해야한다. 또한 관찰 시스템 활동 및 부하 특성의 조합을 필요로한다. 일반 공정 진단 :
  • 사용 "쿼리 세션 ID 발주 sys.dm_os_waiting_tasks"스크립트 또는 "계산 대기 시간 동안"스크립트는 현재 작업하고 평균 대기 시간 상황 래치 대기를 관찰합니다.
  • 사용 "QueryBufferDescriptorsToDetermineObjectsCausingLatch"스크립트가 경합 (인덱스 및 테이블)의 발생 위치를 결정합니다.
  • MSSQL이 % 인스턴스 이름 % StatisticsPage 래치 WaitsAverage 대기 시간 또는은 sys.dm_os_wait_stats가 관찰 된 평균 대기 시간 페이지 래치 방문 기다립니다 관찰 할 성능 카운터를 사용.
(o.name), i.name, 총 대기 시간의 비즈니스 피크 대기 시간 래치 비율 (2).
래치는 비율이 하중 증가에 따라 선형 적으로 증가 대기 시간을 경우, 경합이 성능에 영향을 래치 할 수있다, 우리는 최적화 할 필요가있다. 하여 대기 통계 성능 수는 페이지와 비 페이지 래치가 상황을 기다려야 관찰했다. 그런 다음 CPURAMIONetwork 처리량 관련 카운터와 비교. 예를 들어, 거래 / 분파 및 배치 요청 / 초를 사용하여 자원 활용도를 측정합니다. 이 마지막 인스턴스 시작 (또는 비워) 이후 기록이기 때문에
은 sys.dm_os_wait_stats는 데이터를 기다린 후, 기다리는 대기 시간의 모든 유형을 포함하지. 또한 DBCC SQLPERF을 할 수 있습니다 ( '은 sys.dm_os_wait_stats는', '클리어') 수동으로 비 웁니다. 시간은 sys.dm_os_wait_stats 데이터를 취할 피크 사업하기 전에, 다음, 비즈니스에서 피크를 취할 차이를 계산합니다.
-
3. 증가없이 시스템 처리량 처리 (또는 감소), 응용 프로그램이로드가 무거운, SQL 서버에서 사용할 수있는 CPU 증가하면서 .
높은 동시성 및 멀티 CPU 시스템에서, 클러스터 된 인덱스가 자려 동시 삽입 유사 지금 등의 종류가 발생할 것이다 : CPU는 수를 증가 및 대기 래치 페이지가 증가하면서 시스템 스루풋이 저하된다.
4. 부하의 성장을 적용 할 때 CPU 사용률이 증가하지 않았다.
CPU 사용률 성장 나타내는 SQL 서버 리소스 (래치 경합 성능)을 기다리고 애플리케이션로드와의 동시가 없을 때.
으로
쿼리 현재 래치
현재 실시간 대기 정보 볼 수 있습니다 다음 쿼리. * 및 PAGEIOLATCH_ * 버퍼 래치가 기다리고 PAGELATCH_하는 wait_type.
SELECT wt.session_id, wt.wait_type
, er.last_wait_type 그대로 last_wait_type
, wt.wait_duration_ms
, wt.blocking_session_id , wt.blocking_exec_context_id, resource_description
FROM sys.dm_os_waiting_tasks 중량
가입 바로 sys.dm_exec_sessions ES ON wt.session_id = < /span> es.session_id
가입 sys.dm_exec_requests 어 ON wt.session_id = er.session_id
여기서 es.is_user_process es.is_user_process OBJECT_ID '
1 와 wt.wait_type )) 클러스터 < /span> '
ORDER ' ' ORDER 에 o.type

wt.wait_duration_ms

DESC
OBJECT_ID '
쿼리 열을 리턴으로 설명 :
설명 의 session_id
세션 ID 작업이 속한 Wait_type
현재 대기 유형 Last_wait_type
마지막 대기 유형은 Wait_duration_ms
대기 시간 합계 (MS)의 대기 유형을 기다립니다 Blocking_session_id
현재 차단되는 세션 ID Blocking_exec_context_id
현재 발생 한다, '버퍼'순서 ID
Resource_description
특정 대기
다음 쿼리는 반환 비 버퍼 래치 정보 을 선택 * sys.dm_os_latch_stats를에서 latch_class & LT의 리소스 작업 wait_time_ms에 의해 DESC
는 열 지침을 반환 :
설명 대기 시간 Latch_class
래치 유형 Waiting_requests_count
현재 래치 유형이 발생 < /div> Wait_time_ms
현재 래치 유형 합 대기 시간을 발생
Max_wait_time_ms
현재 래치 형 발생한 가장 긴
=
래치 일반적인 시나리오 경합을 <기다리는 동안/div>
데이터 마지막​​ 페이지 삽입 경합
, 그것은 경쟁을 래치 될 수 있습니다 . 이 시나리오에서
테이블은 거의 아카이브 삭제 및 업데이트 작업 할 때를 제외하고 적용되지/div>
인덱스에 데이터를 삽입 :
1 B- 트리를 검색, 새로운 페이지로 이동하여 저장하는 것입니다
이 페이지 플러스 전용 래치 (PAGELATCH_EX)에 2 ,. 다른 작업이 동시에이 페이지를 수정하지 마십시오. 모든 비 리프 페이지 플러스 공유 래치 (PAGELATCH_SH).
때때로 페이지가 직접 비 리프 페이지에 영향을 개로 나누어 독점 래치, 비 리프 페이지에.
3.이 행이 변경되었음을 나타냅니다 로그 파일에 기록을 작성
4. 페이지에 새 행을 작성하고 더러운 페이지로 표시 5. 릴리스 모든 래치. 线程获取到页上排他Latch。假设A获取EX Latch,则B就需要等待。则B就会在 sys.dm_os_waiting_tasks表现出等待类型为PAGELATCH_EX的等待。
, 새로운 라인이 페이지는 가득 찰 때까지, B- 트리의 마지막 페이지에 삽입됩니다. 높은 동시로드, 그것은 B- 트리가 가장 오른쪽 페이지 경합이다 집계 및 비 클러스터형 인덱스로 이어질 것입니다. 일반적으로이 메인 페이지와 밀도 인덱스를 삽입하는 동시성 경합이 발생합니다. sys.dm_db_index_operational_stats으로 상황은 라스 페이지 경합와 B 트리 리프 페이지에게 중앙 아프리카 래치 경합을 관찰 할 수있다.
예를 들어
동시에 스레드와 스레드 B는 새 행 (예 : 1999 등) Last (마지막)로 삽입합니다. 논리적으로, 둘 다 동시에 해당 행 수준의 행 마지막 페이지 단독 잠금을 얻을 수 있습니다. 그러나, 메모리의 무결성을 유지하기 위해
  • 하나는 하나의
  • 스레드 페이지에 배타적 래치를 획득 할 수있다. 이 EX 래치를 얻기 가정, 다음 B 기다릴 필요가있다. 그런 다음 B가 sys.dm_os_waiting_tasks에 전시된다 타입 PAGELATCH_EX 대기를 기다립니다. 작은 테이블의 임의 삽입에 리드
  • (32)
이 클러스터되지 않은 인덱스 래치 경합
임시 큐 구조는 일반적으로이 시나리오를 발생으로 테이블을 사용합니다. 다음 조건 (EX와 SH 포함) 래치 경합이 발생할 수 있습니다 사항 :
높은 동시 INSERT, DELETE, UPDATE 및 Operations (작업) 페이지 밀도, 좁은 라인 테이블의 행의 수는 적게, 그래서 B-나무도 등급 2-3 인덱스 깊이 얕은입니다. 페이지 분할을 일으킬 가능성이 INSERT의 임의의 실행의 를 필터링 ( o.name), i.name, 지수는 스크립트 다음 테이블의 깊이를 관찰 할 수있다 : 선택 o.name 으로 - 모든 인덱스 키 범위에 기존 데이터 분포를 사용하는 열은 테이블 ] , i.name 으로
SomeInt [ 인덱스 ] HashValue INDEXPROPERTY 으로 변경
OBJECT_ID 테이블 ' indexDepth + [ INDEXPROPERTY 차 TINYINT INDEXPROPERTY OBJECT_ID (o.name), i.name, ' isClustered
( SomeInt 등 깊이, 변경 리프 수준을 계산하지 않습니다보고 클러스터 된 인덱스 깊이 테이블 [ 행 ] , i.origFillFactor 차 모드 2 이동 CPU 코어는 TransactionId 번호 제 키 인덱스로 모듈로 사용하여, 삽입 작업이보다 균일하게 분산 된 테이블로된다. ( [ 행 ]
, i.origFillFactor ( BIGINT [ FILLFACTOR ] 그대로 의 경우 INT INDEXPROPERTY
( INT (o.name), i.name 널 (null) isClustered ] <그 속도를 대량로드 기술을 사용하는 것이 좋습니다span> 다음 때 '
1 (32) 다음 NULL ' - o.id 때 i.id
0 기능 [ 12 -
클러스터되지 않은 latch_contention_table 다른 )
와 통계
' 끝 - 표 입력 할 때 < /span> IX_Transaction_ID
SYSINDEXES에서 나는 가입 sysobjects의 O hash_col ' = '
여기서 ) = ( ' U '와 ') 파티션 구성표 )), ( (o.name), i.name, NOT isHypothetical '
) 의 사용을 필요로한다. 제 키의 지수는 일반적으로 선택된 열 또는 해시 열을 산출하고, 다른 열을 형성하도록 함께 결합 된 후 일부 열을 식별한다. 유일한 ID 열 값이 너무 과도 키 간격의 결과는 데이터 테이블의 물리적 구조를 만들기 때문에 열 열화를 이용한 해시 연산이 우수하다. 이하 해시 계산 열 인덱스 키 범위가 있지만, 래치 경합 INSERT 부하를 분산시키기 위해 감소된다하더라도, 충분하고있다. 예를 들어, 판매 시스템은하면 해시 값 모듈로서 CPU 코어 STORE_ID 번호를 사용할 수있다. 0 ' 가상 인덱스 ') INDEXPROPERTY OBJECT_ID ' isStatistics
' =
0
  • o.name
래치 PFS 경합 페이지
이 그것은
병목
상황을 할당에 속한다. PFS 레코드 공간 이용 데이터 페이지. 바이트 (바이트) 페이지의 PFS 페이지의 사용을 나타냅니다을 사용합니다. PFS 페이지 정도로 모든 8088 개의 데이터 페이지가 PFS 페이지가있을 것이다, 8088 데이터 페이지를 나타낼 수있다. 두 번째 페이지의 데이터 파일 PFS 페이지이다 (된 pageid = 2). 새 개체 또는 데이터 조작을위한 공간을 할당해야하는 경우
, SQL Server는 SH 래치를 사용할 단순한 대상 페이지가 있는지 여부를 확인 PFS 페이지에 사용할 수 있습니다. 존재하는 경우, 그것은 PFS 래치를 얻고, 해당 페이지 공간 사용량 정보를 업데이트한다. 유사한 프로세스는 SAM, GSAM 페이지에 발생합니다. 멀티 CPU 시스템, 파일 그룹, 몇 데이터 파일, 과도한 PFS 페이지 요청에, 그 래치 경합을 초래할 수있다. tempdb의 가장자리 장면은 몇 가지 비교적 흔한 것입니다. PFS 나 SGAM 페이지에 나타나면
Tempdb를 더 PATHLATCH_UP 대기, 당신은 래치 경합을 제거하기 위해 다음과 같은 방법을 수행 할 수 있습니다
임시 데이터베이스 데이터 파일은 코어 = CPU 번호의 수를 증가시키기 위해 < strong> 추적 플래그 (TF) 1118 사용
래치 Tempdb를 테이블 반환 ​​함수이 때문에 PFS와 래치 경합이 같은 발생
충돌로 이어집니다. 모든 다중 문 테이블 반환 ​​함수는 항상 래치 경합의 원인, 쿼리에 다중 문 테이블 반환 ​​함수를 생성하고 테이블을 삭제하는 많은 변수를 탄생 될 수있는 다수의 참조 테이블 변수를 생성하고 삭제할 호출 .
다른 모드가 경합을 래치 해결 은행 ATM 시스템에서 ATM_ID 장면의 사용을 고려하여 처리합니다 INSERT 작업 테이블은 모든 주요 범위로 배포됩니다. 동시에, 사용자는 단지 하나의 ATM을 사용할 수 있기 때문이다. 이러한 장면은 Checkout_ID STORE_ID 열 또는 열을 사용하여 고려할 수, 시스템을 판매 할 예정이다. 이 방법은 고유 지수

이 방법은, 인덱스 조각화를 증가 스캔 성능의 범위를 감소시킬 것이다. 또한, 이러한 절 새로운 인덱스 구조에 따라 조정해야 WHERE 같이, 애플리케이션 아키텍처를 수정할 필요가있다. 예 : 트랜잭션 테이블에서 32 코어 시스템에서 원래의 테이블 구조 : 생성 테이블 표
( 왼쪽 는 TransactionId BIGINT 없습니다
널 (null) ( 아이디 INT 하지

널 (null)
에 대한 < /span> INT
없습니다 널 (null) )
표 추가

제약
pk_table1 < /span> 키

클러스터 (는 TransactionId, 아이디) 이동 1. 모든 데이터가 사용자 ID 첫 번째 키를 사용하기 위해 인덱스와 방법, 작업을 삽입하기 위해 배포됩니다 페이지. 주 : 인덱스 변경, 모든 선택이 방정식 ID와는 TransactionId를 지정해야합니다 WHERE합니다. 테이블
표 VALUES 는 TransactionId BIGINT 없습니다
널 (null) 표 아이디 INT 없습니다
없습니다
널 (null)
0 INT
없습니다 널 (null) )
이동 표 추가

제약
pk_table1 키

클러스터 (사용자 ID,는 TransactionId)
테이블 널 (null) 는 TransactionId 없습니다
int 아이디
(

널 (null) 1
SomeInt 없습니다
) 이동 - ( 표 추가 [ 2 ] TINYINT AS ALTER < /span> ( CONVERT 9 [] ] 3 ABS [< /span>
는 TransactionId ) %
( ))) PERSISTED NOT
변경 테이블 표
추가
제약
pk_table1
  表分区能减少Latch争用。使用计算列对表进行Hash分区,一般的步骤:
  1. 클러스터
  2. (HashValue,는 TransactionId, 아이디)
이동
첫 번째 키 인덱스로 GUID 열을 사용하여
이 나는 난 아주 많이 여기의 무결성을 유지 플러스, 그것을 분석하고 싶지 않아, 동의하지 않습니다. 레디 스 제품을로드, 서브 테이블, 파티션을 배포 또는 사용하는 등 극단적 인 방법을 필요로 할만큼 심각한 동시로드 및 래치 경합 GUID는 더 나은 방법입니다. 테이블 해시 파티션의 계산 열을 사용하여 테이블 파티셔닝은 래치 경합을 줄일 수 있습니다. 테이블 해시 파티션의 계산 열, 일반적인 단계를 사용하여
새 또는 지구를 호스팅 기존의 파일 그룹을 사용하여 새 파일 그룹을 사용하는 경우, 당신은 데이터 입출력 서브 시스템 최적화 및 파일 그룹을 고려할 필요가 문서의 합리적 분배. INSERT 부하 비율이 높은 경우, CPU 코어의 1/4의 데이터 파일 그룹 추천 수 (또는 1/2와 같은 경우, 혹은 등전위가 될 수있다).
표는 N 개의 파티션으로 분할되어 파티션 함수를 만들 사용. N 값은 스텝 데이터 파일의 수와 동일하다. 파일 그룹에 결합 파티션 구성표를 만들 파티션 기능을 사용하고 해시 열의 SMALLINT 또는 TINYINT 유형을 추가 한 다음 해당 해시 분포 값 계산 (예를 들어 HashBytes 값 모듈에 대한 또는 Binary_Checksum 값을). 샘플 코드 : 파티션 방식과 기능을 생성, CPU 코어의 수를이 정렬 1 : 1까지 에 ( 코어 컴퓨터 ) 16 코어 시스템에 정렬이 아래에 대한 CREATE 있도록 파티션 pf_hash16
] (, ) , 범위 , , , (, , , , , , , 9, 4 , 5 , 6 , 7 , 8 , , ]
, 10 , 11 , , 13 [, (14) (15) CREATE ( 를 ps_hash16 ] < /span>

그대로 파티션
[ pf_hash16
] 모든 ] ( [ ALL_DATA 을 속도를 대량로드 기술을 사용하는 것이 좋습니다 ) -
(이 오프라인 작업입니다) 기존 테이블에 계산 된 열을 추가 ALTER ( DBO AS 0 [, ] 추가 [ HashValue [ ( CONVERT ( [
TINYINT ] ABS
(binary_checksum (Create the index on the new partitioning scheme
[ ] % (16) CREATE IX_Transaction_ID )))
PERSISTED CLUSTERED NULL - 새로운 분할 방식에 인덱스를 생성 ] < /span> UNIQUE ([ INDEX [, [ ON )
DBO ]
.
[
latch_contention_table
]
(
  • [
  • T_ID
  • ]

ASC

,

[

HashValue

]


Posted by Sumin Family

퍼온곳,   https://support.microsoft.com/ko-kr/kb/2551928


Excel 문서를 새 창에서 여는 방법 [Step by Step]




소개
기본적으로 Excel 프로그램은 여러 개의 Excel 문서가 하나의 창에서 실행됩니다. Windows XP에서는 파일 옵션을 변경하는 방법으로, Windows 7 및 Windows Vista에서는 레지스트리를 수정하는 방법으로 새 Excel 문서를 새 창에서 열어서 사용할 수 있습니다.


경우 1: Windows XP인 경우
Windows XP에서 Excel 2007을 사용하는 경우를 예시로 설명합니다.
  1. [시작][내 컴퓨터]를 차례대로 클릭하세요.



  2. 내 컴퓨터 화면에서 [도구][폴더 옵션]을 차례대로 클릭하세요.



  3. 폴더 옵션 화면에서 [파일 형식]확장명이 XLSX인 [Microsoft Office Excel 워크시트][고급]을 차례대로 클릭하세요.



  4. 파일 형식 편집 화면에서 [새로 만들기]를 클릭하세요.



  5. 새 명령 화면에서 명령에는 적절한 이름을 입력하세요. 명령을 실행할 응용 프로그램에는 "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" "%1"을 입력한 후 [확인]을 클릭하세요(이 문서에서는 예시로 명령에는 새 창으로 열기를 입력하였습니다).


    주의1. "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" "%1"을 입력할 때 따옴표까지 같이 입력해야 합니다.

    2. Excel 2010인 경우 명령을 실행할 응용 프로그램에 "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" "%1"을 입력합니다.

  6. 파일 형식 편집 화면에서 [새 창으로 열기][기본값 설정][확인]을 차례대로 클릭하세요.



  7. 폴더 옵션 화면에서 [닫기]를 클릭하세요.



  8. 새 창으로 열고자 하는 Excel 파일의 아이콘을 두 번 클릭하여 실행시키면 새 창에서 열리는 것을 확인할 수 있습니다.



경우 2: Windows 7 및 Vista인 경우
Windows 7에서 Excel 2010을 사용하는 경우를 예시로 설명합니다.

주의이 방법에는 레지스트리 수정 방법이 설명되어 있습니다. 레지스트리를 잘못 수정하면 심각한 문제가 발생할 수도 있으므로 다음 단계를 주의하여 수행해야 합니다. 추가 보호 조치로 레지스트리를 수정하기 전에 해당 레지스트리를 백업하는 것이 좋습니다. 이렇게 하면 문제가 발생하는 경우 레지스트리를 복원할 수 있습니다. 레지스트리 백업 방법에 대한 자세한 내용은 다음 문서를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오. 

레지스트리 백업



단계 1: 레지스트리 키 이름 바꾸기

  1. [시작]을 클릭하고 검색 창에 regedit를 입력하세요. 상단의 프로그램 목록에서 [regedit]를 클릭하세요.


    주의사용자 계정 컨트롤 메시지가 나타나면 관리자 암호를 입력하거나 [예]를 클릭합니다.

  2. 레지스트리 편집기 화면에서 HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open 경로로 이동하세요. [Open]을 마우스 오른쪽 단추로 클릭하고 [이름 바꾸기]를 클릭하세요.



  3. Open을 다른 이름으로 적절하게 변경하세요(이 문서에서는 예시로 Open-1로 변경하였습니다).



  4. 레지스트리 편집기 화면에서 HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open 경로로 이동하세요. [Open]을 마우스 오른쪽 단추로 클릭하고 [이름 바꾸기]를 클릭하세요. 



  5. Open을 다른 이름으로 적절하게 변경하세요(이 문서에서는 예시로 Open-1로 변경하였습니다).



  6. 레지스트리 편집기를 닫고 컴퓨터를 다시 시작하세요.

단계 2: 레지스트리 키 추가하기

  1. [시작]을 클릭하고 검색 창에 메모장을 입력하세요. 상단의 프로그램 목록에서 [메모장]을 클릭하세요.



  2. 메모장에 다음 명령어를 복사하여 붙여 넣으세요. 

    Windows Registry Editor Version 5.00
     
    [HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open]
    @="열기(&O)"
     
    [HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command]
    @="\"C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE\" /m \"%1\""

  3. 메모장 화면에서 [파일][다른 이름으로 저장]을 차례대로 클릭하세요.



  4. 다른 이름으로 저장 화면에서 원하는 파일 저장 위치를 지정하고 확장명이 .reg로 된 파일 이름을 입력한 후 [저장]을 클릭하세요(이 문서에서는 예시로 파일 저장 위치를 바탕 화면으로 지정하고 파일 이름을 sheet12.reg로 입력하였습니다).



  5. 바탕 화면에서 [sheet12.reg]를 두 번 클릭하여 실행하세요.


    주의1. 사용자 계정 컨트롤메시지가 나타나면 관리자 암호를 입력하거나 [예]를 클릭합니다.

    2. 레지스트리 편집기 메시지가 나타나면 [예]를 클릭합니다.

  6. 레지스트리 키가 추가되면 [확인]을 클릭하세요.



  7. [시작] 을 클릭하고 검색 창에 메모장을 입력하세요. 상단의 프로그램 목록에서 [메모장]을 클릭하세요.



  8. 메모장에 다음 명령어를 복사하여 붙여 넣으세요.

    Windows Registry Editor Version 5.00
     
    [HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open]
    @="열기(&O)"
     
    [HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\command]
    @="\"C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE\" /m \"%1\""

  9. 메모장 화면에서 [파일][다른 이름으로 저장]을 차례대로 클릭하세요.



  10. 다른 이름으로 저장 화면에서 원하는 파일 저장 위치를 지정하고 확장명이 .reg로 된 파일 이름을 입력한 후 [저장]을 클릭하세요(이 문서에서는 예시로 파일 저장 위치를 바탕 화면으로 지정하고 파일 이름을 sheet8.reg로 입력하였습니다).



  11. 바탕 화면에서 [sheet8.reg]를 두 번 클릭하여 실행하세요.


    주의1. 사용자 계정 컨트롤메시지가 나타나면 관리자 암호를 입력하거나 [예]를 클릭합니다.

    2. 레지스트리 편집기 메시지가 나타나면 [예]를 클릭합니다.

  12. 레지스트리 키가 추가되면 [확인]을 클릭한 후 컴퓨터를 다시 시작하세요.



  13. 새 창에서 열고자 하는 Excel 파일의 아이콘을 두 번 클릭하여 실행시키면 새 창에서 열리는 것을 확인할 수 있습니다.



추가 정보
기존의 열려진 Excel 창에서 [파일], [열기]를 차례대로 클릭하여 Excel 문서를 열었을 경우에는 기존의 창에서 실행되고, Excel 프로그램을 새로 실행하고 [파일][열기]를 차례대로 클릭하는 방법으로 Excel 문서를 열었을 경우에는 새 창에서 열 수 있습니다. 




동영상 보기
 
동영상 재생 중 화면을 두 번 클릭하면 "전체 화면 보기"로 크게 보실 수 있습니다.

이 동영상은 방법에서 설명된 모든 과정을 표현하고 있습니다. 


경우 1: Windows XP인 경우






경우 2: Windows 7 및 Windows Vista인 경우






의견 보내기
의견 보내기
Microsoft 고객지원 사이트에서는 고객님의 소리를 귀담아 듣습니다. 아래 의견 보내기로 소중한 의견 보내주시기 바랍니다.
속성

문서 ID: 2551928 - 마지막 검토: 06/04/2014 09:13:00 - 수정: 2.4

  • Microsoft Office Excel 2007
  • Microsoft Excel 2010
  • kbstepbystep kbhowto kbvideocontent KB2551928


Posted by Sumin Family


물물 교환의 새로운 방법..




Posted by Sumin Family

1. SQL Error Log 발생한 에러 

2012-11-27 17:16:55.590 spid3477     Error: 7886, Severity: 20, State: 1.2012-11-27 17:16:55.590 spid3477     A read operation on a large object failed while sending data to the client. A common cause for this is if the application is running in READ UNCOMMITTED isolation level. This connection will be terminated.

 


[그림 1-1]


- 어떤 쿼리(프로시저) 에서 발생하는 에러 인지를 찾기 에러가 주로 발생하는 시간 주기적 (15분 ~ 20분 사이) 발생하여 
   발생 후 10분 뒤부터 10분 동안 sp_trace_create 를 사용하여  Trace 수집

-  SQL Error Log 시간대의 TRC 파일 비교 분석 하여 에러 원인 분석 



- 원인 및 해결 방법  


[그림 1-2]

이 프로저의 에서 호출하는 1개의 ROW  Image 데이터 형식으로 라는 marshaled_data 필드를 가지고 있다. [그림 1-1] 601 에러가 먼저 발생 우 Error: 7886, Severity: 20, State: 1 가 발생한것을 알수 있다. [그림 1-2] SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 으로 인해 테이블 접근시 NOLOCK 로 커밋되지 않는 읽기르 우선 데이터를 읽어서 LOB 영역의 marshaled_data 데이터를 읽으려고 했으나 실제 marshaled_data 필드에 접근해 보니 일부 데이터의 위치가 변경되어 데이터를 찾지 못하게 되어  클라이언트에 데이터를 보내는 동안 큰 개체에서 읽기 작업이 실패 하게 되었고 클라이언트와 연결이 종료 된것으로 에러가 SQL LOG 에 찍히게 된것이다. 

해결 방법은 프로시저에 적용 하였던 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 를 제거 후 해결 되었다. 



Posted by Sumin Family

의료실비보험비교사이트 동부화재의료실비보험 의료실비보험추천 메리츠화재의료실비보험 실비보험추천 동부화재 실비보험 현대해상실비보험 실손보험비교사이트 lig실비보험 실손보험추천 메리츠실비보험 의료실비보험 삼성화재 실비보험 실손의료보험 실비보험가입조건 비갱신형의료실비보험 실손보험 메리츠화재실비보험 실비보험비교 실손보험보장범위 실비보험 실비보험가격 lig의료실비보험 보험비교사이트 실손의료보험추천 현대해상의료실비보험 화재보험비교 흥국화재실비보험 실비보험비교사이트 운전자보험비교사이트 실비보험추천상품

실손의료비 의료실비보험 가입요령  노후실손의료보험 흥국화재해상보험 의료실비보험순위 lig실손보험 메리츠화재보험 동부화재 운전자보험 의료보험 보험 비교 의료실비보험이란 메리츠의료실비보험 흥국화재보험 운전자보험추천 실손 보험료 인상 lig손해보험 의료실비 실손보험 자기부담금 의료실비보험가격비교 노후실손보험 암보험추천 한화실비보험 의료실비보험추천상품 메리츠화재 실비보험 청구 실비보험순위 실비보험청구방법 암보험비교사이트 동부화재해상보험 한화화재보험 삼성화재해상보험 보험료인상 메리츠화재운전자보험 실손보험자기부담금인상 실손의료비자기부담금 실손보험 인상 흥국화재암보험 

의료실비보험 순위비교

 

의료실비보험 순위 비교

 

의료실비보험은 질병이나 사고로 인해 병원에 방문해서 발생하게 되는 병원비를 보험사에서 대신 지급해 주는 보험입니다.

병원에 방문해 진단이나 수술을 받게 되면 의료비가 발생하게 되는데요.

 

이 중 국민건강보험공단에서 정한 항목은 급여항목이라고 해서 국민건강보험공단에서 지급해 줍니다.

그 외 발생하게 되는 병원비, 즉 비급여항목을 보장해 주는 보험이 바로 의료실비보험입니다.

 

의료실비보험에서 보장해 주는 항목은 거의 대부분의 질병 및 사고로 인한 수술비를 보장해 줍니다.

의료실비보험에 가입할 때 정하는 자기부담금이라는게 있는데, 일반적으로 10%와 20% 중에서 선택하게 됩니다.

보장을 많이 받기 위해 대부분 자기부담금은 90%로 책정하는 경우가 많습니다.

 

예를 들어 어떤 질병으로 인해 병원비가 100만원이 나온 경우 자기부담금 10%인 10만원을 제외한 90만원을 보험사에서 지급해 주는 것입니다.

 

의료실비보험에 대해서는 대부분 익히 알고 있는 보험이다보니 가장 인기있는 보험부터 대략적인 보험료 및 보험기간 등을 정리해 보겠습니다.

 

(무)실손의료비보험1501


다른보장없이 실손의료비만 간편하게 가입가능 
가입자 필요에 따라 보장내용 및 보험료 수준 선택
15년단위 재가입으로 100세까지 보장가능
 

의료실비보험 순위비교

 

갱신없는의료실비보험 한화실비보험 태아보험 가입시기 화재보험비교 동부화재해상보험 lig손해보험 실손 보험료 인상 실손보험보장범위 노후실비보험내용 5년 동안 보험금 덜 받았다 

(무)훼밀리라이프종합보험1501(의료종합)


아직도 병원비 걱정으로 병을 키우고 계신가요? 병원비를 돌려주는 의료실비보험으로 부담없이 치료받으세요! 
우리나라 국민 1인당 평생 지출하는 의료비가 1억 원을 넘어 섰습니다.
 

의료실비보험 순위비교

 

메리츠화재해상보험 삼성화재다이렉트자동차보험 실손 보험 자기 부담금 20 자동차보험견적 실손보험 중복가입자 의료보험료 보험 비교 다이렉트자동차보험가장싼곳 lig보험홈페이지 다이렉트자동차보험 

(무)LIG닥터플러스건강보험(L15.01)

 

암 진단비 보장강화(해당특약가입시)
장애관련 위험률까지 보장(해당특약가입시)
 

의료실비보험 순위비교

 

내년보험료인상 암보험 인상 실손의료비자기부담금 동부화재 운전자보험 흥국화재암보험 실손의료비보험 자기부담금 메리츠보험 암보험 가입요령 손해보험협회 실비보험 중복가입 

(무)MG원더풀통합보험2종(1501)


실손의료비보장,질병수술비,화상진단비,골절진단비등 보장(해당특약가입시) 
보험료 납입면제
 

의료실비보험 순위비교

 

우체국실비보험 롯데손해보험 우체국실손보험 삼성실비보험 롯데화재보험 자동차비교견적 어린이실비보험 자동차비교 동부화재다이렉트자동차보험 lig실손보험 

(무)행복을다주는가족사랑통합보험1501[의료종합]


의료실비보험이란 부담금에 해당되는 의료비 중 80%~90%까지 보장해주는 보험. 민영의료보험, 실비보험, 실손의료보험 등으로도 불리운다 
 병원에 입원, 통원 치료시 치료비 부담을 덜어주는 의료실비 보장! (해당특약가입시)
 

의료실비보험 순위비교

 

실손보험 변경 책임보험 보상범위 lig자동차보험 건강보험관리공단 의료보험공단홈페이지 실비보험청구방법 현대화재해상보험 자동차보험가장싼곳 흥국화재해상보험 메리츠화재운전자보험 

(무)알파Plus보장보험 1505


실손의료비 특약으로 치과, 한방병원 통원 보장 
Life Cycle에 맞춘 활동기 집중 보장 / 최장 100세까지 보장가능
중도인출제도 및 보험료납입 일시중지제도 운영
 

의료실비보험 순위비교

 

의료실비 자기부담금 보험가입 자동차보험비교견적사이트 국민의료보험 엘아이지손해보험 보험설계사 실손자기부담금 lig의료실비보험청구 암보험 가입요령 의료보험공단 

(무)퍼펙트스타종합보험(Hi1501)


의료실비보험  l 현대해상
 

의료실비보험 순위비교

 

자동차다이렉트보험비교 직장의료보험 노후실손보험 현대해상 실비보험 청구 보험비교사이트 lig암보험 실손보험추천 자동차보험비교견적 어린이보험 5년 동안 보험금 덜 받았다 

(무)삼성화재건강보험NEW플러스(1501.12)


의료실비보험  l 삼성화재
 

의료실비보험 순위비교

 

롯데손해보험 실비보험청구기간 실비인상 삼성실비보험 한화손해보험 흥국화재실비보험 lig실비보험청구서류 노후실손의료보험가입자격 어린이보험인기순위 실손의료보험이란 

(무)메리츠 건강보험 백년해로 1501


4대중증질환 진단비로 든든한 보장(특약가입시) 
신개념 납입면제를 통해 혜택은 길게!!
피보험자가 종합병원 내 건강검진센터에서 건강검진을 받은 경우 본인이 부담한 건강검진 비용을 10만원 한도로 지원(매3년마다 1회 제공)
 

의료실비보험 순위비교

 

실비보험 변경 운전자보험추천상품 의료보험공단 실손보험 갱신폭탄 자동차비교 삼성화재 노후실손보험 자동차보험견적 실손의료보험추천 실손의료비 개정 보험설계사 

(무)메리츠The넓은건강보험1501

 

암, 2대질병 보장 (특약 가입시)
보험기간(10년/15년)동안 합리적인 보험료로 보장 (1종 가입시)
 

의료실비보험 순위비교

 

lig화재보험 자동차보험료계산 실비보험인상 메리츠화재 메리츠실비보험청구방법 자동차보험료비교견적 노인실비보험 메리츠화재 의료실비보험 노후실손의료비보험 

비갱신형 실손보험 순위 비교

보험회사 실손의료비 어린이보험비교사이트 보험비교사이트 lig암보험 의료실비보험이란 한화화재보험 실손보험 변경 lig화재보험 보험가입 
책임보험 보상범위 한화손해보험 실비보험청구방법 동부화재 노후실손보험 실손보험손해율 다이렉트보험 실비보험 흥국화재 운전자보험 운전자보험추천상품 현대해상 태아보험


 

비갱신형실손보험 순위 비교

 

실손의료비 인상 실손의료보험 실손의료보험 갱신폭탄 손해보험협회 보험개발원 의료실비보험순위 현대해상암보험 보험설계사 다음다이렉트자동차보험 mg손해보험 
보험비교사이트 라이나생명암보험 건강보험료 인상 라이나생명암보험 흥국화재보험 롯데손해보험 라이나생명암보험 실손의료보험 보험 비교 한화실손보험


 

비갱신형실손보험 순위 비교

 

실비보험가입조건 mg암보험 실손보험가격비교 국민건강보험 실비보험 중복가입 의료보험공단 메리츠화재운전자보험 직장의료보험 실손의료보험 자기부담금 실손보험 인상 
자동차보험비교견적 노후실손의료보험 가입조건 메리츠손해보험 운전자보험추천 의료실비보험 인상 현대해상보험 실비보험비교 실손의료비 현대해상자동차보험 흥국화재해상보험


 

비갱신형실손보험 순위 비교

 

동부화재 자동차보험 자동차보험가장싼곳 비갱신형보험 의료보험료 현대해상자동차보험 한화화재보험 한화보험 흥국화재 운전자보험 자동차보험료비교사이트 자동차보험비교견적사이트 
노후실손의료보험 실손보험자기부담금인상 실손보험추천 삼성화재실손보험 의료실비보험 가입요령 실비보험 중복가입 의료실비보험순위 의료보험료 인상 흥국생명암보험 삼성운전자보험


 

비갱신형실손보험 순위 비교

 

노후 실손 의료 보험이란 동부화재 운전자보험 동부화재 운전자보험 lig의료실비보험청구 lig의료실비보험 실손의료보험어디가좋은가요 실손보험 중복가입자 노후 실손 의료 보험이란 삼성생명 실비보험 lig실손보험 
의료실비보험이란 건강보험료율 흥국화재암보험 자동차보험료비교 암보험비교사이트 실손 보험 자기 부담금 20 동부화재 실비보험 청구서류 실손의료비 다음다이렉트자동차보험 자동차보험조회


 

비갱신형실손보험 순위 비교

 

실버보험 실비보험추천상품 현대해상 실비보험 청구 삼성화재의료실비보험 실손의료보험추천 자동차보험료 인상 실손보험 변경 동부화재다이렉트 라이나생명암보험 메리츠실비보험청구방법 
현대해상 의료실비 lig보험홈페이지 의료보험종류 의료보험공단 의료실손보험추천 화재보험비교 암보험비교사이트 암보험가입순위 실손의료보험추천 자동차보험


 

비갱신형실손보험 순위 비교

 

자동차보험추천 실손보험비교사이트 자동차보험조회 aia암보험 의료실비보험 실손의료비자기부담금 메리츠자동차보험 보험회사 순위 lig실손보험 실손보험추천상품 
노인실비보험 현대해상어린이보험 실비보험 한화생명보험 현대해상운전자보험 lig자동차보험 메리츠화재암보험 자동차보험비교 비갱신형실손보험추천 실손보험 인상


 

비갱신형실손보험 순위 비교

 

동부화재의료실비보험 lig화재보험 자동차비교 메리츠화재실비보험 aia뉴원스톱암보험 실비보험청구방법 실손보험손해율 실손자기부담금 흥국화재보험 의료실손보험추천 
실손보험 변경 실비보험청구기간 자동차보험비교견적사이트 의료실비보험 인상 자동차보험비교견적사이트 실비보험추천상품 자동차보험 노인실비보험 의료실비보험 인상 삼성운전자보험


 

비갱신형실손보험 순위 비교

 

의료실비보험추천 자동차보험견적 암보험가입순위 동부화재 운전자보험 실손보험 인상 한화손해보험 실손보험손해율 실손보험 중복가입자 자동차보험료비교사이트 화재보험비교 
실손보험추천 동부화재보험 엘아이지손해보험 보험 비교 메리츠의료실비보험 의료보험인상 동부화재 자동차보험 실비보험순위 lig자동차보험 실손의료비보험


 

비갱신형실손보험 순위 비교

 

mg손해보험 노후실비보험내용 실손보험청구서류 흥국화재보험 의료실비보험비교 메리츠자동차보험 삼성화재의료실비보험 자동차보험료비교사이트 2015년 건강보험료 인상 건강보험료 인상 
인터넷자동차보험 암보험 가입요령 현대해상실비보험청구방법 일상생활배상책임보험 인터넷자동차보험비교견적 lig실비보험 우체국실비보험 운전자보험비교 의료실비 자기부담금 실손의료비 인상


 

비갱신형실손보험 순위 비교

 

 

현대해상 실비보험 청구 삼성화재암보험 책임보험 보상범위 자동차보험료계산 의료보험종류 자동차보험가장싼곳 운전자보험이란 현대해상암보험 의료보험료 인상 자동차보험추천 
lig손해보험 보험회사 순위 동부화재 노후실손보험 실비보험 변경 의료실비보험비교사이트 실손의료보험어디가좋은가요 실손의료보험추천 lig자동차보험 실비보험 자기부담금 현대해상 실비보험 청구


 

 

 [무료 보험비교사이트]

 

[보험비교닷컴] 선호도 1위 브랜드 대상 수상(첫회 보험료 50% 할인)

 

[보험비교샵] 20개 보험사의 보험료 비교 견적(첫회 보험료 50% 할인)

 

[실비보험비교닷컴] 최저가보험 비교 견적(첫회 보험료 50% 할인)

 

 

어린이실비보험 삼성화재보험 노후 실손 의료 보험이란 의료보험종류 메리츠화재 자동차보험 삼성화재의료실비보험 태아보험 lig자동차보험 의료실비보험이란 실손보험비교사이트 


Posted by Sumin Family

퍼온곳.    http://blog.daum.net/sdenver/423



마이크로소프트 오피스 제품군 완전 삭제 방법

 

오피스 2003, 2007, 2010, 2013 업그레이드나 신규 설치시 문제가 생겨서 설치가 중간에 멈추거나 하는

경우에 설치가 안되는 경우가 종종 있습니다.

 

이런 경우에 오피스를 완전 걷어 내고 새로이 설치를 해야하는데.. 그럴때 사용하는 도구입니다.~

 

Ms 에서는 이미 이 문제에 대해서 예전부터 알고 있었던듯 싶네요..

 

Microsoft Office 2013 제품군을 제거하는 방법 : http://support.microsoft.com/kb/2739501/ko 

 office2013_Remove.diagcab<- 요 파일을 저장한다음 실행(더블클릭) 실행하셔도 됩니다.

 

 

Microsoft Office 2010 제품군을 제거하는 방법 : http://support.microsoft.com/kb/290301/

 office2010_Remove.msi  <- 요 파일을 받아서 실행하셔도 됩니다.

 

 

Microsoft Office 2007 제품군을 제거 하는 방법 : http://support.microsoft.com/kb/928218/ko

 office2007_Remove.msi<- 요 파일을 받아서 실행하셔도 됩니다.

 

 

Microsoft Office 2003 제품군을 제거 하는 방법 : http://support.microsoft.com/kb/2639197/ko

 office2003_Remove.msi<- 요 파일을 받아서 실행하셔도 됩니다.

Posted by Sumin Family

2009-11-22 03:20:39.810       로그온   오류: 17806, 심각도: 20, 상태: 2.

2009-11-22 03:20:39.810       로그온   SSPI handshake failed with error code 0x80090311 while establishing a connection with integrated security; the connection has been closed. [클라이언트: IP]


 

배포자에서 위와 같은 에러

네트워크 문제로

Active Directory서버(Domain Controller라 부름)와의 통신상에 문제가 발생하였을 경우 생성됨

Posted by Sumin Family





SQL서버 성능카운터 활용을 위한 팁

 


원문링크 : http://www.sql-server-performance.com/performance_monitor_counters_sql_server.asp

번역 : 종균 (jkkim@techdata.co.kr)

 
 


SQL서버에서 과도한 I/O의 원인 중 하나는 페이지 분할 입니다페이지 split은 인덱스나 데이터 페이지가 꽉 찰 경우에 발생하며현재 페이지와 새로이 할당되는 페이지 사이에서 분할이 이루어 집니다.  가끔 발생하는 페이지 분할은 정상입니다만과도한 페이지 분할은 과도한 디스크 I/O를 유발하게 되며이는 느린 성능을 야기합니다.

SQL서버가 과도한 페이지 분할을 일으키고 있는지를 찾기 원한다면 성능카운터에서 SQL Server Access Methods 개체의 Page Splits/Sec 항목을 모니터 하십시오만일 과도한 페이지 분할이 발생하고 있다면인덱스의 채우기 비율을 높게 설정하시는걸 고려하십시오채우기 비율을 높게 설정하시면 데이터가 가득 차거나페이지 분할이 발생하기 전에 데이터 페이지에 보다 더 많은 여유 공간이 있으므로페이지 분할을 감소시킬 수 있습니다

높은 Page Splits/sec 은 무얼 의미하는가이것은 운영하는 시스템의 I/O하부 시스템에 따라 다르므로 이에 대한 간단이 답을 할 수 없습니다그러나 만일 당신이 평상시에 디스크 I/O의 성능 문제가 발생하고이 카운터 값이 100을 초과한다면채우기 비율을 높여서 성능이 호전 되는지 그렇지 않은지 실험해 보는 것도 좋을 것 입니다.

 

*****

물리적인 메모리를 SQL서버 Data캐시에 얼마나 할당되었는지 알고 싶다면SQL Server Buffer Manager Object: Cache Size (pages) 항목을 모니터링 하십시오이 수치는 페이지 수로 표시되므로이 값에 8K(8192 bytes)를 곱하면, Data캐시로 사용되고 있는 총 메모리의 사용량을 알 수 있습니다.

일반적으로이 수치는 서버의 총 메모리 량에 근접해야 합니다. SQL서버로 운영하는 시스템에서 OS커널이나, SQL서버 그리고 기타 유틸리티 프로그램이 사용하는 메모리 량을 최소화 하십시오.

만일 Data캐시 용도로 할당된 메모리 양이 여러분이 생각하는 것 보다 훨씬 작다면왜 그런지 원인을 찾으셔야 합니다아마도, SQL서버가 메모리를 동적으로 할당하도록 설정하지 않고대신에 뜻하지 않게 SQL서버가 적은 메모리를 사용하게 구성 하셨을 겁니다. SQL서버가 가용할 수 있는 Data캐시의 총량은 SQL서버 성능에 아주 큰 영향을 미치기 때문에 원인이 무엇이든 간에 여러분은 해결방안을 찾아야 합니다.

실제로는, SQL서버가 메모리가 부족한지 아닌지를 알기 위해 보다 많은 카운터들이 존재하고더 효율적이기 때문에 저는 이러한 카운터(SQL Server Buffer Manager Object: Cache Size (pages))를 모니터 하는데 많은 시간을 사용하지 않습니다.  (그래서 어쩌라고.ㅜㅜ)

 

*****

SQL서버가 얼마나 바쁜지 알기 위해서SQLServer: SQL Statistics: Batch Requests/Sec 카운터를 모니터 하십시오이 카운터는 초당 SQL서버가 받는 배치 요청 수를 측정하고일반적으로 서버의 CPU들이 얼마나 바쁜지 나타냅니다말하자면초당 1000배치가 넘어서면, SQL서버가 매우 바쁘다는 것을 나타내며, CPU병목 현상이 아직 나타나지 않고 있다면조만간 CPU병목 현상이 나타날 것임을 알 수 있습니다물론 이 수치는 상대적인 것이며여러분의 하드웨어가 고 사양이라면보다 더 많은 초당 배치요청 수를 커버할 수 있을 것입니다.

네트워크 병목의 관점에서 보자면, 100Mbps 네트워크 카드는 초당 3000 배치 요청을 처리 할 수 있습니다만일 네트워크 병목이 심한 서버를 운영하고 계시다면네트워크 카드를 2개이상 늘리거나, 1Gbps 네트워크 카드로 교체 할 필요가 있을 것입니다.

몇몇 DBA들은 전체 SQL서버활동량을 측정하기 위해서 SQLServer: Databases: Transaction/Sec: _Total 카운터를 모니터 하는데이는 좋은 방법이 아닙니다. Transaction/Sec 카운터는 전체 활동량이 아닌 한 트랜잭션의 내부활동을 측정하며왜곡된 값을 나타냅니다대신에, SQL서버의 전체 활동량을 측정하는 SQLServer: SQL Statistics: Batch Requests/Sec 카운터를 사용하시기 바랍니다

 

*****

TSQL코드의 컴파일은 SQL서버의 일반적인 동작입니다그러나이 컴파일이 CPU와 다른 리소스들을 많이 잡아 먹기 때문에, SQL서버는 가능한 많은 실행계획을 캐시에 저장해서 실행계획이 컴파일 되지 않고 재사용되도록 시도합니다(실행계획은 컴파일이 발생할 때 생성됩니다). 보다 더 많은 실행계획이 재 사용 되어지면서버에 대한 부담은 더 적어지게 되며전체적인 성능은 더욱 더 향상 됩니다.

SQL서버가 얼마나 많은 컴파일을 하고 있는지 확인 하려면SQLServer: SQL Statistics: SQL Compilations/Sec 카운터를 모니터 하십시오여러분이 기대하시는 것처럼이 카운터는 초당 얼마나 많은 컴파일이 SQL서버에 의해서 실행되었는지를 측정합니다.

말하자면이 카운터의 수치가 초당 100을 넘어서면불필요한 컴파일 오버헤드를 경험하고 계신 것 입니다이러한 높은 수치는 여러분의 서버가 매우 바쁨을 나타내거나불필요한 컴파일들이 실행되고 있다고 볼 수 있겠습니다예를 들어오브젝트의 스키마가 변경되거나병렬로 실행계획이 잡혀있던 것이 직렬로 실행되어야 하거나통계가 다시 계산되었다거나 하는 등의 이유로 SQL서버로부터 재 컴파일 하라는 지시를 받았을 수도 있습니다어떤 경우에는불필요한 컴파일을 줄이기 위해서 여러분의 노력이 필요할 수 도 있습니다. (역주잘 아시듯이, adhoc 쿼리를 저장프로시져로 만들면 컴파일 이슈가 없어지죠)

만약여러분의 서버가 초당 100회 이상의 컴파일을 수행한다면이 원인이 여러분이 조절할 수 있는 것인지 아닌지 찾기 위해 애 쓰셔야 합니다너무 많은 컴파일은 SQL서버의 성능에 악영향을 끼칩니다.

 

*****

SQLServer: Databases: Log Flushes/sec 카운터는 초당 플러쉬 된 로그 수를 나타냅니다이 카운터는 데이터베이스 별로 측정되거나단일 SQL서버의 전체 데이터베이스에 대한 값으로 측정 될 수 있습니다.

로그 플러쉬란 무엇일까요이해를 쉽게 하기 위해서 예를 들어 설명 하는 게  좋을 것 같습니다. 10개의 INSERT명령이 있는 트랜잭션을 시작한다고 가정하겠습니다트랜잭션이 시작되고그리고첫 번째 INSERT가 실행되고새 데이터가 데이터 페이지로 삽입 되어질 때필수적으로 동시에 두 가지의 일이 발생합니다버퍼캐시의 데이터페이지는 새로이 삽입된 데이터로 변경됩니다그리고 이 단일 INSERT명령에 대한 적당한 로그용 데이터가 로그캐시에 쓰여집니다이 과정은 트랜잭션이 완료 될 때까지 계속 됩니다이때로그캐시에 기록된 트랜잭션을 위한 로그 데이터는 즉시 로그파일에 기록됩니다그러나 버퍼캐시에 있는 데이터는 다음 체크포인트 프로세스가 실행되기 전까지 버퍼캐시에 머무르게 됩니다그리고그때 데이터베이스는 새로이 삽입된 행으로 업데이트 됩니다.

여러분은 로그캐시에 대해서 한번도 들어보지 못했을지도 모릅니다이것은 SQL서버가 로그파일에 쓰여질 데이터를 기록하는 메모리의 한 영역입니다.  로그캐시의 목적은 트랜잭션이 커밋 되기 전에 특정상황이 발생하여 롤백 해야 하는 상황에서 트랜잭션을 롤백 하는 용도로 사용되기 때문에 매우 중요합니다그러나트랜잭션이 완료되면 (완료되면 절대 롤백 되지 않음), 로그 캐시는 즉시 물리적인 로그파일로 플러시 됩니다이것이 정상적인 절차입니다. SELECT쿼리는 데이터를 수정하지도 않고 트랜잭션을 생성하지도 않고로그 플러시를 발생하게 하지도 않음을 명심 하십시오.

본질적으로로그캐시에 있는 데이터가 물리적인 로그파일로 쓰여질 때 하나의 로그 플러시가 발생합니다따라서하나의 트랜잭션이 완료될 때마다로그 플러시는 발생하며많은 수의 로그 플러시 발생은 SQL서버로부터 수행되는 많은 수의 트랜잭션과 관련이 있습니다그리고짐작하시는 것처럼 로그 플러시(얼마나 많은 데이터가 로크 캐시로부터 디스크에 기록 되어졌는가의 크기는 트랜잭션에 따라 다릅니다이 내용이 도움이 되었나요?

우리가 디스크 I/O 병목현상을 격 고 있고그 원인을 확신하지 못하고 있다고 가정합시다디스크 I/O에 대한 병목을 해결하기 위한 하나의 방법은 Log Flushes/sec 카운터 데이터를 수집하고이 과정을 처리하는데 얼마나 바쁜지 보는 것입니다여러분의 서버에 많은 트랜잭션이 발생하고 있다며로그 플러시 양은 당연히 많을 것입니다따라서 이 카운터 항목으로 보는 값은 트랜잭션을 발생하는 활동 형 쿼리가 얼마나 바쁜가에 따라 서버마다 다양할 것입니다이 카운터 정보로써 여러분은 초당 발생하는 로그 플러시 수가 운영하는 서버에서 예상되는 트랜잭션의 수 보다 확연하게 높은가에 대한 상황 판단에 도움을 줄 것이다.

예를 들어매일 1,000,000행을 한 테이블로 삽입하는 작업을 한다고 가정합시다이 행들이 삽입되어질 수 있는 방법은 다양합니다첫째각 행은 따로따로 삽입되어 질 수 있습니다각 INSERT는 단일 트랜잭션 내부에 감싸집니다둘째모든 INSERTS는 단일 트랜잭션 내에서 수행되어 질 수 있습니다마지막으로, INSERTs 1 1,000,000사이의 어딘가에 여러 개의 트랜잭션으로 나누어 질 수 있습니다각 형태의 처리는 다르며, SQL서버와 초당 플러시 되는 로그 수에 매우 다른 영향을 미칩니다더구나프로세스가 멀티 트랜잭션으로 처리되고 있는데단일 트랜잭션으로 처리되고 있다고 착각할 수 도 있다많은 사람들이 단일 프로세스를 단일 트랜잭션으로 생각하고 있는 경향이 있습니다.

첫째의 경우에서만일 1,000,000행이 1,000,000개의 트랜잭션으로 삽입되어진다면, 1,000,000번의 로그 플러시가 발생할 것입니다그러나두 번째 경우에는단일 트랜잭션에서 1,000,000행이 삽입되어 질 것이고단지 하나의 로그 플러시가 발생할 것입니다그리고세 번째  경우 에는 플러시 되는 로그의 수는 트랜잭션의 수와 같을 것입니다명백히로그 플러시의 크기는 1,000,000트랜잭션이 1트랜잭션보다 훨씬 클 것입니다그러나대개의 경우 성능의 관점에서 여기서 언급한 내용은 그다지 중요하지 않습니다.

어떤 옵션이 가장 좋은가요모든 경우에서많은 디스크 I/O를 유발할 것입니다. 1,000,000행을 핸들링 할 경우에는 I/O양을 줄일 묘안이 없습니다그러나하나 혹은 적은 수의 트랜잭션을 사용함으로써 로그 플러시 양을 많이 줄일 수 있을 것이고이는 디스크 I/O양을 줄이게 되어, I/O병목 감소와 성능을 높여줄 것입니다.

우리는 두 가지 포인트를 배웠습니다첫째는여러분이 플러시 되는 로그 양을 가능한 많이 줄이길 원할 것이라는 것과둘째여러분의 서버에서 발생하는 트랜잭션의 수를 줄이는 것입니다.

 

*****

SQL서버를 사용하는 많은 수의 사용자는 성능에 영향을 미치기 때문에여러분은 SQL Server General Statistics Object: User Connections 카운터에 관심을 가질것입니다이 카운터는 사용자 수가 아닌, SQL서버에 현재 연결된 사용자 연결 수를 나타냅니다

이 수치를 해석할 때하나의 단일 사용자는 여러 개의 연결들로 열릴 수 있음을 유념하십시오그리고 또한여러 명의 사람이 하나의 단일 사용자 연결을 공유할 수 도 있습니다이 수가 실제 사용자수를 나타낸다고 가정하지 마십시오대신에서버가 얼마나 바쁜가에 대한 상대적 척도로 사용하십시오여러 시간에 걸쳐서 이 수치를 모니터 해보시면서버가 많이 사용되고 있는지적게 사용되고 있는지 느낄 수 있을 것 입니다.

 

*****

만약 여러분들의 데이터베이스들이 데드락 문제로 괴로워하고 있다면SQL Server Locks Object: Number of Deadlocks/sec 카운터를 통해서 추적할 수 있습니다그러나이 값이 상대적으로 높지 않다면이 값은 초단위로 측정되기 때문에 여러분은 더 많이 보기 원할 것입니다그리고눈에 띄게 보여지기 위해서는 다량의 데드락이 있어야 합니다. (ㅜㅜ)

그러나여전히 이 카운터는 여러분이 데드락 문제를 가지고 있는지 확인하기 위해서 가치있는 항목입니다차라리데드락을 추적하기 위해서 프로필러를 이용하십시오이는 보다 상세한 정보를 제공할 것입니다데드락 문제를 발견하기 위해서 Number of Deadlocks/sec 카운터를 활용하시고좀 더 세부적인 분석을 위해서 프로필러를 사용하십시오.

 

*****

만약에사용자들이 트랜잭션의 완료를 위한 대기시간 때문에 불만을 나타낸다면여러분은 개체 잠금이 이 문제가 되고 있는지 찾고 싶을 것 입니다문제점을 찾기 위해서SQL Server Locks Object: Average Wait Time (ms) 카운터를 사용하십시오이 카운터는 database, extent, key, page, RID, table의 다양한 잠금에 대한 평균 대기 시간 정보를 측정합니다.

DBA로써여러분은 평균 대기 시간이 얼마 정도까지 허용될 수 있는지 결정해야 합니다한가지 방법으로써개별 잠금 종류에 대해서 장시간 동안 이 카운터 항목을 모니터 하시고각 잠금 별 평균을 파악하시는 겁니다그리고 그 평균값을 참고 자료로 활용 하시는 거죠예를 들어, RID의 평균 잠금 대기시간이 500ms 라면, 500보다 큰 대기시간을 가지는 개체들은 , 잠재적인 문제점을 가지고 있다고 판단할 수 있을 것입니다특히 500보다 훨씬 크거나장시간 동안 연장되는 개체들은 더 쉽게 판단할 수 있습니다.

여러분이 트랜잭션 지연에 의한 단일 혹은 다양한 종류의 잠금을 확인 할 수 있다면어떤 트랜잭션들이 잠금의 원인이 되었는지 확인할 수 있는지 알기 위해서 조사하길 원할 것 입니다.

 

*****

그런데 가끔 인덱스 탐색보다 테이블 스캔이 빠른 경우에일반적으로 적은 테이블 스캔이 보다 많은 테이블 스캔 보다 좋다여러분의 서버에서 얼마나 많은 테이블 스캔이 발생하는지 알아보기 위해서SQL Server Access Methods Object: Full Scans/sec 카운터를 사용하십시오.이 카운터는 단일 데이터베이스가 아닌 전체 서버에 대한 값이라는 사실을 염두에 두셔야 합니다이 카운터 값으로 알게 될 사실 하나는 가끔씩 예측이 가능한 스캔 형태를 나타낸다는 것 입니다대부분의 경우에 이 값들은 SQL서버가 내부적으로 사용하는 것 들입니다.

여러분의 응용프로그램에서 나타나는 불규칙적인 테이블 스캔들을 파악하길 원하실 것입니다과도한 테이블 스캔이 발생될지를 고려하기 위해서 프로필러 데이터를 수집하고 인덱스 튜닝 마법사를 통해서어떤 것이 원인이 되는지 결정 할 수 있게 도움을 받을 수 있습니다그리고 몇몇 인덱스를 추가함으로써 테이블 스캔을 줄일 수 있을 것 입니다물론 SQL서버는 이 작업을 훌륭하게 수행할 것이고더 효율적이라면인덱스를 사용하는 것 대신에 테이블 스캔을 수행 할 것입니다그러나 내부적으로 어떤 일이 발생하는지 찾아 보지 않는 한 여러분은 알지 못 할 것입니다.

*****

만일 백업 및 복원 명령이 최적이 아닌 속도로 수행된다면SQL Server Backup Device Object: Device Throughput Bytes/sec 카운터를 이용해서이 문제를 확인 할 수 있습니다이 카운터는 여러분의 백업이 얼마나 빨리 수행되는지 알려 줄 것입니다또한 문제에 대한 의구심을 해결하기 위해서 Physical Disk Object: Avg. Disk Queue Length 카운터를 같이 조사해 볼 수 도 있습니다대부분의 경우에 백업과 복원의 성능 문제가 있다면, I/O 병목에 의한 것들입니다.

DBA로써 경험하고 다루게 되는 I/O병목에 대한 판단의 작업 또한 수행할 것입니다예를 들면느린 백업 또는 복원의 원인이 같은 시점에 수행되는 단순한 DTS작업 때문일 수 있으며작업에 대한 일정의 재조정으로 문제를 해결 할 수 있습니다.

 

*****

여러분이 트랜잭션 복제를 사용하고 계신다면로그 리더가 트랜잭션들을 데이터베이스의 트랜잭션 로그로부터 배포 데이터베이스로 옮겨질 때까지의 지연시간을 모니터하길 원하실 것입니다.

또한 배포 에이젼트가 트랜잭션들을 배포데이터베이스에서 구독자 데이터베이스로 옮기는데 소요되는 시간을 모니터 하길 원할 것입니다.이 두 지연시간의 합은 하나의 트랜잭션이 게시 데이터베이스에서 구독 데이터베이스로 전달되는 총 소요시간입니다.

이 두 카운터는 SQL Server Replication LogReader: Delivery Latency  SQL Server Replication Dist.: Delivery Latency 입니다.

만약둘 중의 하나의 과정중에 과도한 지연시간 증가를 발견한다면이것은 어떤 새로운 변화가 발생하여 지연 시간을 증가 시켰는지 살펴봐야 한다는 신호입니다.

 

*****

관찰하여야 할 주요한 카운터는 SQL Server Buffer Manager Object: Buffer Cache Hit Ratio 입니다이것은 SQL서버가 데이터를 액세스 하기 위해 하드디스크가 아닌 버퍼를 얼마나 자주 참조하는가를 나타냅니다보다 높은 이 수치는, SQL서버가 데이터를 가져오기 위해서 하드디스크에 아주 가끔 액세스한다는 것이며이는 SQL서버의 성능을 극대화 시킵니다.

SQL서버를 모니터하는 다른 카운터들과는 달리이 카운터는 SQL서버가 다시 시작한 시점 이후부터의 버퍼 캐시 히트율의 평균 값입니다다른 말로이 카운터는 현재 시점의 측정 값이 아니라 SQL서버가 시작된 이후의 모든 날들의 평균값입니다현재 시점의 버퍼캐시에서 어떤일이 발생하고 있는지 정확한 자료를 얻기 원한다면여러분은 SQL서버를 중지 했다가 다시 시작해야만 하고정확한 버퍼 캐시 히트율을 확인하기 위해 SQL서버를 여러 시간 동안 일반적인 활동을 하게 내버려 둬야 합니다.

만약 최근에 SQL서버를 재 시작 하지 않았다면여러분이 보고 있는 버퍼 캐시 히트율은 아마도 현재 발생하는 버퍼 캐시 히트율을 위해서는 정확한 정보가 아닐 것 입니다또한 버퍼 캐시 히트율이 좋아 보일지라도오랜 시간의 평균값으로 계산되었기 때문에 실제로는 좋지 않을 지도 모릅니다.

OLTP 응용프로그램 환경에서이 수치는 90~95% 이상이어야 합니다그렇지 않다면여러분은 성능 향상을 위해서 서버에 RAM을 추가할 필요가 있습니다.

OLAP 응용프로그램 환경에서는, OLAP작동하는 기본특성 때문에 이 수치는 OLTP 보다 더 작을 수 있습니다어떤 경우라도더 많은 RAM SQL서버의 OLAP 활동의 성능을 증가 시킬것입니다.

 

*****

이 두 카운터를 관측하는걸 고려하십시요. SQLServer:Memory Manager: Total Server Memory (KB) and SQLServer:Memory Manager: Target Server Memory (KB)첫번째 카운터 SQLServer:Memory Manager: Total Server Memory (KB)  mssqlserver서비스가 메모리를 얼마나 사용하고 있는가를 말해줍니다이것은 SQL서버 Bpool영역으로 커밋된 전체 버퍼수를 포함하고, ‘OS in Use’ 로 표시되는 OS버퍼들도 포함합니다.

두번째 카운터, SQLServer:Memory Manager: Target Server Memory (KB) SQL서버가 얼마나 많은 메모리를 가용할 수 있는가를 나타냅니다이는 SQL서버가 시작시에 예약한 버퍼수에 기초합니다.

만약, Total Server Memory (KB)이 Target Server Memory (KB)보다 작다면이는 SQL서버가 충분한 메모리를 가졌고효율적으로 사용하고 있다는 것을 의미합니다반면에 Total Server Memory (KB)이 Target Server Memory (KB)보다 크거나 같다면이는 SQL서버가 메모리 압박을 받고 있고더 많은 물리적 메모리에 액세스 하고 있음을 나타냅니다.

 

*****

디스크로부터 데이터를 읽는 대신에 버퍼 캐시로부터 데이터를 가져온다면 SQL서버는 보다 적은 자원으로 보다 훨씬 더 빠르게 수행합니다몇몇 경우에메모리 집중적인 명령들로 인해 데이터 페이지들이 이상적으로 플러시 되기 전에 캐시 밖으로 밀려 나가기도 한다이는 버퍼 캐시가 충분히 크지 않거나 메모리 집중적인 명령의 작업을 위한 더 많은 버퍼 공간 요구에 의해  발생할 수 있습니다이런 경우에는 버퍼에 추가 적인 공간을 만들기 위해서 플러시 된 데이터 페이지들은 디스크로부터 읽혀지게 되며성능에 안 좋은 영향을 미치게 됩니다.

여러분들의 SQL서버가 이러한 문제를 가지고 있는지 확인 하기 위한 3개의 SQL 서버 카운터가 있습니다.

·  SQL Server Buffer Mgr: Page Life Expectancy 이 성능 카운터는 데이터 페이지가 얼마나 오랫동안 버퍼공간에 머무르는지를 평균적으로 나타내 줍니다만약 이 값이 300초 보다 작은 값을 보인다면여러분의 SQL서버는 성능의 극대화를 위해서 추가적인 메모리가 필요함을 잠재적으로 나타내는 것입니다.

·  SQL Server Buffer Mgr: Lazy Writes/Sec 이 카운터는 버퍼 공간을 비우기 위해서 지연기록기 프로세스가 더티 페이지들을 버퍼공간에서 디스크로 초당 얼마나 많이 옮겼는지 나타냅니다일반적으로 말하자면이 항목은 높은 값(초당 20정도)이어서는 안됩니다이상적으로, 0에 가까워야 합니다만약 이 값이 0이라면여러분의 SQL서버는 아주 큰 버퍼 공간을 가지고 있고일정한 체크 포인트가 발생하여 더티페이지가 반환되기를 기다리는 대신에더티페이지 반환을 하지 않아도 됨을 나타냅니다만약 이 값이 높다면보다 더 많은 메모리가 필요함을 나타냅니다.

·  SQL Server Buffer Mgr: Checkpoint Pages/Sec체크포인트가 발생할 때모든 더티 페이지들은 디스크에 쓰여 집니다이것은 일반적인 절차이며체크포인트가 처리되는 동안에 이 카운터가 발생하는 근원이 됩니다시간에 걸쳐서 이 카운터의 높은 값을 보길 원치 않으실 것입니다이는 SQL서버의 귀중한 자원을 많이 사용할 수 있는 체크포인트 프로세스가 보다 더 자주 실행됨을 나타냅니다만약 이 값이 높은 값을 가진다면빈번한 체크 포인트 발생을 줄이기 위해서 더 많은 RAM을 추가할 것을 고려하시거나, SQL서버의 구성옵션 중에 복구 간격(recovery interval)’ 옵션 값을 늘려주십시오.

이러한 성능 모니터 카운터들은 메모리 부족의 잠재적인 진단을 위해서 고려되거나고도화하거나정제하기 위해 사용되어야 합니다.

 

*****

래치는 본질적으로 경량 잠금” 입니다기술적인 관점에서래치는 가볍고짧은 동기화 개체입니다래치는 마치 잠금 처럼 동작하고예상치 않은 변화로부터 데이터를 보호하기 위한 목적을 가지고 있습니다예를 들면하나의 행이 버퍼로부터 SQL서버의 저장소 엔진으로 이동될 때이 매우 짧은 시간 동안의 이동 중에 행 내부의 데이터 변형을 방지하기 위해서 SQL서버에 의해서 래치가 사용되어 집니다.

마치 잠금과 같이래치는 데이터베이스의 행들에 대해 접근하지 못하게 SQL서버를 방해 할 수 있고이는 성능에 안 좋은 영향을 줍니다이러한 이유 때문에 여러분은 래치 시간을 최소화하길 원하실 것입니다.

SQL서버는 래치의 활동을 측정하기 위한 3가지 다른 방법을 제공합니다.

·  Average Latch Wait Time (ms)래치 요청들을 위해 대기해야 하는 시간입니다이는 오직 대기해야 하는 래치 요청들에 대한 측정값입니다대부분의 경우에 대기가 없습니다따라서이 값은 모든 래치에 대한 것이 아니라대기 해야 하는 래치에 대해서만 적용된 값임을 유념하십시오.

·  Latch Waits/sec이 값은 즉시 승인 받지 못한 래치 요청수입니다다시 말해서, 1초 동안에 대기 해야 했던 총 래치의 수입니다따라서이는 Average Latch Wait Time으로 부터 측정된 래치들 입니다.

·  Total Latch Wait Time (ms)이는 지난 초 동안의 총 래치 대기 시간 (ms) 입니다.

이 값을 읽을 때성능카운터에서 배율을 정확히 읽었는지 확인하십시오배율은 카운터 값마다 다르게 표시될 수 있습니다.

제 경험에 비추어 볼 때, Average Latch Wait Rime 카운터는 거의 변함이 없습니다반면에 다른 두 개의 카운터(Latch Waits/sec , Total Latch Wait Time (ms) SQL서버가 뭘 하느냐에 따라서 큰 변동폭을 보일 수 있습니다.

각각의 서버가 약간씩 다르기 때문에래치 활동도 각 서버마다 다릅니다전형적인 작업부하가 있을 때이 카운터에 대한 기준 값을 확보해 두시는 것은 아주 좋은 생각입니다이는 현재 어떤 일이 발생하고 있는가에 대해서 래치 활동이 평상시 보다 많은지 적은지에 대한 비교자료가 될 것입니다.

래치 활동이 기대치 보다 높다면이는 종종 하나 혹은 두 개의 잠재적인 문제점들을 나타냅니다첫째여러분의 SQL서버가 보다 많은 메모리를 사용할 수 있음을 의미할지도 모릅니다래치 활동이 높다면버퍼 캐시 히트 비율이 어떤지 확인하십시오이 값이 99% 이하라면보다 더 많은 양의 메모리가 서버의 성능에 도움을 줄 것입니다만약 99% 이상이라면문제를 유발하는 것은 IO시스템일수도 있습니다빠른 IO시스템은 서버 성능에 유리합니다.

래칭에 대해서 보다 더 많이 배우고실험해보고 싶으시면여기 두 개의 명령이 있습니다.

SELECT * FROM SYSPROCESSES WHERE waittime>0 and spid>50

이 쿼리는 현재 대기상태에 있는 waittype, waittime, lastwaittype, waitresource, SPID들을 표시해 줍니다. lastwaittype은 래치 종류를, waitresource SPID가 어떤 개체를 위해 대기 중인지를 알려줍니다이 쿼리를 실행하게 되면실행 시점에 대기가 발생하고 있지 않다면아무런 결과도 얻지 못 할 지도 모릅니다그러나 계속해서 실행하다 보면결국 몇몇 결과를 얻게 될 것입니다.

DBCC SQLPerf (waitstats, clear)      --대기 통계초기화 
DBCC SQLPerf (waitstats)      -- SQL
서버 재시작(대기 통계 초기화이후의 대기 통계정보

이 쿼리는 대기유형대기시간과 함께 현재의 래치들을 나타내줍니다여러분은 아마도 통계정보를 초기화하길 원할 겁니다그런 다음에는 어떤 래치가 가장 많은 시간을 차지하는지 알기 위하여, DBCC SQLPerf(waitstats)명령을 짧은 시간에 걸쳐서 정기적으로 실행하십시오.

Posted by Sumin Family

^^

 

 

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/50sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:33

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/50sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:35

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/50sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:35

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/50sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:37

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/50sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:37

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/50sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:38

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:42

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:42

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:43

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:51

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:53

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:53

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:54

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:56

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:40:58

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:02

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:05

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:05

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:07

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:13

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:13

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:16

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:16

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:17

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:17

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:18

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:19

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:19

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:33

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:37

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:38

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:43

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:44

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:41:47

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:07

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:08

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:09

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:09

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:10

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:10

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:15

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:17

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:21

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:22

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:22

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:23

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:25

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:29

 

 

 

 

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:32

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:32

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:33

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:34

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:34

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:35

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:36

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:36

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:43

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:54

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:56

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:42:57

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 154.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:43:00

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 78.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:16

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 78.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:24

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 78.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:28

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:30

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:30

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:32

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:33

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:35

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:36

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:36

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:37

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:37

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:38

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:43

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:44

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:45

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:47

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:48

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:48

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:58

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:58

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:59

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:59

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:44:59

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:00

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:01

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:01

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:02

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:02

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:04

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 134.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:07

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 134.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:07

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 134.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:07

 

 

 

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 173.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:08

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:09

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:10

 

Canon | Canon EOS Kiss Digital X | Manual | Average | 1/40sec | F/8.0 | 0.00 EV | 134.0mm | ISO-1600 | Off Compulsory | 2014:10:25 15:45:11

 

 

 

^^

 

Posted by Sumin Family

http://yoonsy.tistory.com/29


여기 참고, 


동적 awe 관련 참고. 


http://ddoung2.tistory.com/244


http://technet.microsoft.com/ko-kr/library/ms190730(v=sql.105).aspx

Posted by Sumin Family


티스토리 툴바