'전체 글'에 해당되는 글 30건

  1. 2012.07.30 SQL Server DBCC CHECKDB
  2. 2012.07.26 SQL Server COALESCE 함수
  3. 2012.07.26 SQL Server KILL WITH STATUSONLY 옵션
  4. 2012.07.19 링크
  5. 2011.03.25 CPU, I/O Bottleneck 찾기
  6. 2011.03.25 tempdb 공간 사용 현황
2012. 7. 30. 11:07

DBCC CHECKDB문은 운영중인 서버에서 실행하지 않는 것이 권고사항입니다.(, SQL Server 2005이상)

SQL Server 2000이하는 테이블 레벨에서 스키마 잠금이 일어납니다.

테이블에 대한 DML, DDL 작업이 차단됩니다… 덜덜

그렇기 때문에 SQL Server 2000 버전에서 운영 중 실행은 절대 금지사항입니다.

 

SQL Server 2005에서는 왜? 실행하지 않는 게 권고사항일까요?

눈치 빠른 분들은 아시겠지만 2005부터 스냅숏이 생겼죠~

그래서 엔진 내부에서 읽기 전용 데이터베이스 스냅숏을 만들어 동작하기 때문에

DBCC CHECKDB가 실행될 때 블로킹(차단) 및 동시성 문제를 방지할 수 있습니다.

 

“어 그럼 DBCC CHECKDB를 실행해도 되잖아요?

“안됩니다!

 

DBCC CHECKDB의 동작 매커니즘을 잠깐 살펴보자면…

해당 DB 내 모든 개체의 무결성 및 일관성을 확인하기 위해

페이지(DB파일의 최소단위 8KB)를 디스크에서 메모리로 퍼 올립니다.

 

메모리가 왕창 크면 좋겠지만 우리의 메모리는 데이터 보다 작아요..ㅠㅠ

그래서 데이터 중 일부를 tempdb로 스풀링하게 됩니다.

그때 tempdb가 위치한 디스크에서 IO 작업 병목현상이 발생하게 됩니다.(tempdb는 저 혼자 쓰는게 아니니까요~)

또한 CheckDB 실행 시 디스크에서 데이터를 최적화해서 읽으려 하기 때문에 같은

디스크(파일그룹) 부분에 Access하는 쿼리는 위와 같은 이유로 느려질 수 있습니다.

 

지금까지 DBCC CheckDB에 대해서 알아보았습니다.

 

~


Reference : http://msdn.microsoft.com/ko-kr/library/ms176064.aspx


'SQL Server > Tips' 카테고리의 다른 글

SQL Server 복합 인덱스 설정 시 주의사항  (2) 2012.08.13
SQL Server Truncate Table's minimally logged  (0) 2012.08.07
SQL Server COALESCE 함수  (0) 2012.07.26
SQL Server KILL WITH STATUSONLY 옵션  (0) 2012.07.26
링크  (0) 2012.07.19
Posted by 니노G
2012. 7. 26. 11:37

이번에 얘기할 내용은 COALESCE 함수 입니다.

일단, MSDN에서는….

- 해당 인수 중에서 Null이 아닌 첫 번째 식을 반환합니다.

라고 하는데요. 무슨 뜻이죠? -_-a 직접 보시죠~ Check this out!

 

WITH PlatformTeam

AS (

             SELECT '김해' as Name, '010-테이크-빵빵빵꾸' as cell_phone, '02-집전화-빵꾸똥꾸' as phone, '툴파트' as [Group]

             UNION all

             SELECT '원미' as Name, Null, '031-집전화-빵꾸꾸빵', '디비파트'

             UNION all

             SELECT '백승' as Name, '010-갤럭시-똥똥꾸꾸', Null, '디비파트'

             UNION all

             SELECT '서일' as Name, Null, Null, '디비파트'

             )

SELECT Name, cell_phone, phone, COALESCE(cell_phone, phone) as '둘중있는번호'

FROM PlatformTeam

 

 

 

위와 같이 cell_phonephone 컬럼에서 Null 아닌 값을 확인가능 합니다.

 

사실 오늘 하려던 얘기는 이게 아니라 COALESCE 함수를 이용한 Pivot 입니다.

다시 테이블에서 누가 어느 파트에 속해 있는지 확인해 보겠습니다.

 

SELECT Name, [Group]

FROM PlatformTeam

---------------------------------

 


그럼 디비파트분들 이름을 Pivot 해보겠습니다.

여러가지 방법이 있겠지만 이번엔 COALESCE 함수가 주인공이니…

 

DECLARE @name VARCHAR(100)

 

SELECT @NAME = COALESCE(@NAME, '') + Name + ' | '

FROM PlatformTeam

WHERE [Group] = '디비파트'

 

SELECT @NAME as 'Pivot'

-------------------------------------------------------------------



 

위와 같이 디비파트분들이 Pivot된 것을 확인 가능합니다.


Reference : http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/

 

~

'SQL Server > Tips' 카테고리의 다른 글

SQL Server Truncate Table's minimally logged  (0) 2012.08.07
SQL Server DBCC CHECKDB  (0) 2012.07.30
SQL Server KILL WITH STATUSONLY 옵션  (0) 2012.07.26
링크  (0) 2012.07.19
CPU, I/O Bottleneck 찾기  (0) 2011.03.25
Posted by 니노G
2012. 7. 26. 10:52

DB를 운영하다 보면 Lock이나 기타 이유로 해당 세션을 KILL하는 경우가 가끔 있는데요.

트랜잭션 양이 많은 세션을 KILL할 경우

Rollback 시간이 얼마나 소요되는지 확인하는 옵션을 공유합니다.

 

★ 테스트 GoGo!

 

1. 임시 테이블을 만들고 10만건을 입력!(트랜잭션은 열어두세요롤백해야죠…)

 

 

 

2. 해당 세션을 죽인 다음 제대로 죽었는지 확인해 볼까요?

KILL 60;

SP_WHO2

 


 

! KILL했으면 60번은 안나와야 되는데…(Rollback할 데이터양이 많아서 표시가 되고 있네요)

 

 

3. 언제 끝날껀지 만이라도 알려줘~

KILL 60 WITH STATUSONLY;

 

 


 

500...기다리라고 하네요ㅠㅠ

WITH STATUSONLY 옵션은 상태만을 나타냅니다롤백상태를 종료하거나 하지 않아요~

 

 

4. 결론

KILL하고 세션이 바로 안 죽으면 WITH STATUSONLY 옵션으로 확인하세요~

 

사실 단어하나 설명하는 건데 길어졌네요.


Reference는 어디다 뒀는지...ㅠㅠ

 

 

~

 

'SQL Server > Tips' 카테고리의 다른 글

SQL Server DBCC CHECKDB  (0) 2012.07.30
SQL Server COALESCE 함수  (0) 2012.07.26
링크  (0) 2012.07.19
CPU, I/O Bottleneck 찾기  (0) 2011.03.25
tempdb 공간 사용 현황  (0) 2011.03.25
Posted by 니노G
2012. 7. 19. 15:46
2011. 3. 25. 01:44

SQL Server 2005 이후 버전은 DMV를 이용해서 간단하게 Bottleneck을 일으키는 쿼리를 찾을 수 있다.

 

--CPU Bottleneck 상위50

select top 50

           qs.total_worker_time / execution_count as avg_worker_time,

           substring(st.text, (qs.statement_start_offset/2)+1,

           ((case qs.statement_end_offset

           when -1 then datalength(st.text)

           else qs.statement_end_offset

           end - qs.statement_start_offset)/2) + 1) as statement_text,

*

from

           sys.dm_exec_query_stats as qs

           cross apply sys.dm_exec_sql_text(qs.sql_handle) as st

order by

           avg_worker_time desc

          

 

--I/O Bottleneck 상위50

select top 50

           (total_logical_reads + total_logical_writes) as total_logical_io,

           (total_logical_reads/execution_count) as avg_logical_reads,

           (total_logical_writes/execution_count) as avg_logical_writes,

           (total_physical_reads/execution_count) as avg_phys_reads,

           substring(st.text, (qs.statement_start_offset/2)+1,

           ((case qs.statement_end_offset

           when -1 then datalength(st.text)

           else qs.statement_end_offset

           end - qs.statement_start_offset)/2) + 1) as statement_text,

*

from

           sys.dm_exec_query_stats as qs

           cross apply sys.dm_exec_sql_text(qs.sql_handle) as st

order by

           total_logical_io desc


'SQL Server > Tips' 카테고리의 다른 글

SQL Server DBCC CHECKDB  (0) 2012.07.30
SQL Server COALESCE 함수  (0) 2012.07.26
SQL Server KILL WITH STATUSONLY 옵션  (0) 2012.07.26
링크  (0) 2012.07.19
tempdb 공간 사용 현황  (0) 2011.03.25
Posted by 니노G
2011. 3. 25. 01:23

DMV를 사용해서 tempdb 공간 사용 현황을 확인할 수 있다.

 

SELECT

           SUM (user_object_reserved_page_count)*8 AS user_objects_kb,

           SUM (internal_object_reserved_page_count)*8 AS internal_objects_kb,

           SUM (version_store_reserved_page_count)*8 AS version_store_kb,

           SUM (unallocated_extent_page_count)*8 AS freespace_kb

FROM

sys.dm_db_file_space_usage

WHERE

database_id = 2;

GO

'SQL Server > Tips' 카테고리의 다른 글

SQL Server DBCC CHECKDB  (0) 2012.07.30
SQL Server COALESCE 함수  (0) 2012.07.26
SQL Server KILL WITH STATUSONLY 옵션  (0) 2012.07.26
링크  (0) 2012.07.19
CPU, I/O Bottleneck 찾기  (0) 2011.03.25
Posted by 니노G