MS가 리눅스 제단에 합류했다는 뉴스와 동시에 윈도우 환경에서만 동작하던 MSSQL 을 드디어 리눅스 버젼으로도 발표했다.


Redhat 과 Ubunto 를 지원하는 MSSQL !!!

아직은 Preview 상태인지라 당장 시장에 영향을 주지는 않겠지만 GA된 이후부터는 시장에서의 반응이 어떻게 될지 궁금해진다.


사실 리눅스를 사용하는 주된 이유는 모든 솔루션을 비싼 라이센스 비용을 내지 않으면서 수평확장(Scale-out)을 지원할 수 있는 방안을 찾다보니 리눅스 기반에 MySQL 을 주로 사용하지 않았나 싶다.


물론 DBMS 자체로만 보면 MSSQL의 안정성과 만족도가 훨씬 높겠지만..

수백, 수천만원의 라이센스 비용을 모든 회사가 감당하기란 쉽지 않았기에 그 대안으로 선택했던 영역으로 사람들이 몰리기 시작했고 그 결과 리눅스와 MySQL 의 조합도 매우 안정적이고 유연한 확장이 된다는것들이 증명되고 있는 상황이라 여겨진다. 

또한 NoSQL + Redis 조합 역시 RDBMS를 벗어나기엔 휼륭한 조합이니.



어찌되었든 MS에서는 이제라도 리눅스 진영에 발을 담갔기에 하나씩 리눅스 환경에서의 장점들을 포함하겠지만 다소 늦은감이 들기도 하지만.. 어떻게 발전해 나갈지 궁금해 진다.


MSSQL for Linux


Visual studio for Mac


ASP.NET Core 1.0


마지막으로 MS의 개발 환경 및 운영 환경이 나디아 집권 이후 오픈 플랫폼을 적극 지원하는 자세로 바뀌는것에 대해서는 찬사를 보낸다.




리눅스에서 MSSQL 설치 방법

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-ubuntu



핸즈온랩 - 설치해보기 

=> 한번 해보면 리눅스 환경이 익숙하지 않은 분들도 쉽게 따라 하실 수는 있습니다.

https://vlabs.holsystems.com/vlabs/technet?eng=VLabs&auth=none&src=vlabs&altadd=true&labid=29101&lod=true




본 문서의 내은 아래 사이트의 내용을 번역한 내용 위주로 작성된 글입니다.
http://qnimate.com/overview-of-redis-architecture/




Redis in-memory,  key-value 데이터 저장소이다. Redis 가장 유명한 key-value 데이터 저장소이다. 또한 Redis 세상의 모든 대형 IT 회사들이 사용한다. Amazon Elastic Cache Redis  매우 강력하고 Key-value 데이터 저장소 기술로 활용된다. 포스트에서 redis. 아키텍쳐에 대해 소개한다.

 

In- Memory, Key-value 저장소란 ?

-밸류 저장소는 Key  Value 쌍으로 저장된 저장소이다. 우리가 흔히 In-memory key-value 저장소라 함은 메모리상에 key-value 쌍으로 저장됨을 의미한다.  Redis 역시 이러한 구조이다.

Redis에서 key string이미지만 value string, list, sorted set 또는 hash 값을 갖을 있다.

이러한 몇가지 key-value 예는 아래와 같다.

 

name="narayan"

profession=["web", "mobile"]

 

여기에서 name profession key 해당한다. 그리고 오른쪽에는 그에 해당하는 값들을 의미한다.

 

DBMS위에 Redis 장점과 단점

 

데이터베이스 시스템은 쓰기 명령을 기반으로 매우 느리게 기록되는는 이차(Secondary) 저장소이다. 하지만 redis 모든 것을들 매우 빠른 속도로 읽기 저장하는 1 저장소이다.

Primary memory 크기는 제한적이다. 오직 작은 문자형 정보형들만 저장가능하다. 만약 우리가 메모리보다 데이터를 쓰고자 하면 에러를 받을 것이다.

 

 

Redis Single Instance Architecture

 

Redis 크게 2가지 client server 구성 프로스세로 나뉜다.



Redis client server 단일 머신이나 또는 다른 2대의 computer에서 동작할 있다.

Redis server 메모리상에 데이터를 저장하는 책임을 갖는다. Redis client console client 또는 Redis API 이용하여 다른 어떠한 프로그래밍 언어로도 사용 가능한다.

 

Redis Persistance

데이터를 저장하는데에는 크게 3가지 다른 방법이 존재한다. : RDB, AOF 그리고 SAVE

 

RDB Mechanism

RDB 메모리상에 모든 데이터를 복사하고 그것들을 2 저장소(디스크) 저장한다. 이러한 행동들은 정해진 간격을 두고 행해진다. 그리고 RDB 마지막 스냅샷을 기록한 이후부터는 데이터를 잃을 있는 가능성이 있다.

 

AOF

AOF 모든 쓰기 명령들을 서버로부터 수신하여 기록한다. 그렇기 때문에 모든것들이 영구적이다. 다만 AOF 모든 쓰기 명령들에 대해 기록하기 때문에 비용이 비싸며 RDB  파일보다 사이즈가 크다.

 

SAVE Command

사용자들은 언제든지 redis console clinet상에서 SAVE 명령을 이용하여 RDB 스냅샷을 강제 생성할 있다. 또한 최적의 결과를 얻기 위해 AOF RDB 사용할 수도 있다.

 

Backup And Recovery Of Redis DataStore

Redis 데이터 백업과 복원을 위해서는 어떠한 매커니즘을 제공하지 않는다. 그렇기에 하드디스크의 충돌(Crash) 다른 어떠한 장애 상황을 대비해서 3rd party 서버 백업 솔루션이 필요할 것이다. 만약 당신이 redis 복제 환경을 구성했다면 백업 솔루션은 필요 없을 것이다.

 

Redis Replication

복제는 무장애를 만들 있는 기술이다. 복제환경상에서 많은 컴퓨터들을 동일한 데이터를 상호 교환함으로 만약 대의 컴퓨터가 다운된다 하더라고 모든 데이터는 이용가능하다.

 



Persistance In Redis Replication

지금까지 예상치 못한 장애나 백엔드 단에서 안전하게 운영 유지하는 방안에 대해 살펴보았지만 경우 모든 복제 환경이 다운되었을 데이터를 잃을 있는 상황이 있다.

이러한 상황이 발생할 있는 이유는 모든 데이터가 Primary  메모리 상에 올라가기 때문에 발생한다. 그렇기에 우리는 마스터 또는 슬레이브 장비 하나에 대해 저장 속성(AOF 또는 RDB) 속성을 이용할 있다. 이러한 기능을 사용함으로 완전하게 안전하게 데이터를 저장 복제 운영할 있다.

Clustering In Redis

클러스터링 기술은 여러 컴퓨터들에데 데이터를 Shard (분산)하는 방식이다. 것의 가장 장점으로는 컴퓨터들의 조합으로 인해 많은 데이터들을 저장 있다는 것이다.

예를 들어 우리가 하나의 redis server 64GB 메모리가 있다면 우리 데이터는 64GB max 이다. 하지만 만약 우리가 10대의 컴퓨터에 클러스터링을 구성한다면 640GB 데이터를 저장할 있게 된다.

 



위에는 4개의 노드로 샤드되어진 데이터를 있다 .각각의 노드에서는 closter node 처럼 redis server 구성되어져 있다.

만약 노드 하나의 노드가 멈추게 된다면 전체 클러스터가 멈추게 것이다.

 

 

Persistance In Cluster

데이터는 노드들의 primary  memory 상에서 저장되어져 있다. 여기서는 각각의 노드들에 persistance 설정할 필요가 있다. 앞에서 언급했듯이 AOF 또는 RDF 이용하여 모든 노드에서 persistance 구정할 있다.

 

 

Clustering And Replication Together

 

디스크에서 Crash 발생하고 노드 하나가 멈추는 상황이 발생하면 전체 클러스터는 멈추게 되고 결코 되살아 나지 않을 것이다. 데이터들은 완전하게 잃을것이고 데이터를 복수 있는 상황을 없게 된다.

이러한 상황을 피하기 위해 각각의 노드들을 정기적으로 수동 백업을 있지만 매우 터프하고 부적절한 작업이 될것이다. 그렇기에 복제 기술로 문제를 해결할 있을 것이다.

 


 

그림에서 각각의 노드 서버들을 마스터 서버로 전환했다그리고 모든 마스터 노드들을 위한 slave 유지했다. 그럼으로 만약 어느 노드라도 실패를 하게 되면 클러스터는 slave 이용하여 클러스터 명령들을 수행할 것이다.

 

 

Redis Client

If you are first time getting yourself into redis then these links will be very helpful to install redis and learn redis client.

  1. Try Redis: This is a awesome online Redis console client which will help you to learn how to use Redis console client.
  2. Redis Quick Start: This article will help you to install redis and get started with it.
  3. FAQ’s: You can see the frequently asked questions about redis on this link.

 

 

 

닷넷에서 활요 가능한 Redis Client

 




출처: <http://redis.io/clients#c>

 

공식 페이지상에 여러 개의 3rd library 소개되어 있지만 개인적으로는 StackExchange 가장 쓰기 편한듯 싶다.

'IT 이야기 > DataBase' 카테고리의 다른 글

MSSQL for Linux  (0) 2016.11.18
MSSQL 상위 50개의 SQL 문장 확인하기  (0) 2015.05.27
SQL Server Performance Monitor Counter Part 1  (0) 2015.05.27
MS-SQL 성능 개선 - Index rebuild  (0) 2015.05.27
MSSQL File Size 구성  (0) 2015.05.27

SQL Server 가 설치된 서버의 CPU 사용율이 급등하고 있다면..

대부분의 경우에는 디스크 IO를 많이 유발시키거나 아니면 인덱스를 잘 못 타고 있어서 발생하고 있는 경우가 대 부분입니다.

그런데 이러한 경우 프로필러로 보면 어떤 쿼리에서 문제가 되는지 일부는 쉽게 확인 할 수 있지만..

CPU의 과도한 사용 때문에 응답이 늦는 경우에는 발견하기 어려운 경우도 종종 발생합니다.

 

이럴 때 확인 할 수 있는 쿼리는 아래 와 같습니다.

 

1. 실행 가능 작업의 값 확인 하기


SELECT
Scheduler_ID,
Current_Tasks_Count,
Runnable_Tasks_Count
FROM
SYS.DM_OS_SCHEDULERS
WHERE
Scheduler_ID < 255

 

2. CPU를 많이 사용하는 상위 50개의 SQL 문 확인하기

 

SELECT TOP 50 (a.total_worker_time/a.execution_count) AS [Avg_CPU_Time],
Convert(Varchar,Last_Execution_Time) AS 'Last_execution_Time',
Total_Physical_Reads,
SUBSTRING(b.text,a.statement_start_offset/2,
(case when a.statement_end_offset = -1 then len(convert(nvarchar(max), b.text)) * 2
else
a.statement_end_offset end - a.statement_start_offset)/2) AS Query_Text,
dbname=Upper(db_name(b.dbid)),
b.objectid AS 'Object_ID'
FROM sys.dm_exec_query_stats a
CROSS APPLY
sys.dm_exec_sql_text(a.sql_handle) AS b
ORDER BY
[Avg_CPU_Time] DESC

 

요즘 DB 에 대해 조금 깊이 있게 공부를 하고 있는데..

알면 알 수록 재미 있는 부분들이 많이 있네요. ^^

'IT 이야기 > DataBase' 카테고리의 다른 글

MSSQL for Linux  (0) 2016.11.18
Redis Architecture (번역문)  (0) 2016.06.27
SQL Server Performance Monitor Counter Part 1  (0) 2015.05.27
MS-SQL 성능 개선 - Index rebuild  (0) 2015.05.27
MSSQL File Size 구성  (0) 2015.05.27

 본 글은 Brad McGehee 님이 기고한 글을 번역한 문서입니다.

작성된지는 조금 오래(2005년) 되었지만 DB 서버의 성능을 측정하는 지표로 활용하는데에는 전혀 부족함이 없어 보입니다.

물론 SQL Server 버젼별로 성능 카운터가 더 많이 추가 되어서 버젼별로 상세한 상태를 확인 하는 부분에 대해서는 MSDN 의 On-Line 문서를 확인 하시는 것도 좋을 것 같습니다.

 

 번역 내용에 오역이 있더라도 널리 양해를 구합니다. (본문도 첨부합니다. )

 

Tips for Using SQL Server Performance Monitor Counters

By : Brad McGehee
Aug 24, 2005

 

 

SQL Server Access Methods object: Page Splits/sec

 

SQL Server 에서 I/O  초과하는 이유  하나는 page splitting이다. Page splitting  index data page  찾을  현재 page 새로 할당  page 사이에서 발생한다.  일반적으로 page splitting  일어 나는 동안 디스크 I/O 초과할  있고 성능을 저하 시키게 된다.

만약 서버상에서 많은 수의 page splits  발생하는 것을 확인하길 원한다면 SQL Server Access Methods object: Page Splits/sec 으로 모니터링   있습니다만약 page splits  높다면 index 들의 fill factor  증가시키는 것을 고려   있습니다. Fill factor  증가는 데이터를 채우기 전의 (pages)  많이 만든 다음 page split  발생되기 때문에 성능의 향상을 가져올  있습니다.

높은 수치의 Page Splits / sec  무엇을 의미하는가 ? 거기에 대한 간단한 답은 없습니다그것은 시스템상의 I/O subsystem상의 무엇인가로부터 영향을 받는 다는 것입니다하지만 일반적인 기본 조건에서 디스크 I/O 성능의 문제를 발견한다면  카운터는 보통 100 이상의 수치를 나타낼 것이고   Fill factor  증가가 성능의 향상을 가져올  있습니다.

*****

QL Server Buffer Manager Object: Cache Size (pages)

만약 서버상에 얼마나 많은 물리적인 RAM  SQL 서버의 data cache  할당되었는지 보고 싶다면 SQL Server Buffer Manager Object: Cache Size (pages) 으로 확인   있습니다 수치는 page 안에서 표현됩니다그렇기 때문에 8K(8,192) 단의로 확인할  있으며 이것으로 RAM  K 할당되어져 있는지 확인   있습니다.

일반적으로  수치는 서버 전체 RAM  사이즈와 유사한 것이 좋고 NT, SQL Server 기타 다른 유틸리티들의 ram 보다 작습니다.

만약 특정 양의 RAM 데이터 캐시에 할당하였다면 당신이 예상하는 것보다  사이즈는 작을 것입니다이럴  당신을  원인을 찾기 위해 확인을   필요가 있습니다아마도 당신은 SQL Server 동적 RAM 할당하거나 SQL Server 순간적으로 성능 최적화을 위해 적은 양의 RAM으로  사용되는 것을 원하지 않을 것입니다어떤 이유에서건 이것에 대한 해결책이 필요하고 데이터 캐시의 양이 SQL Server SQL Server 성능에 영향을 미친다는 사인이   있습니다.

실제로는 다른 항목으로 SQL Server 메모리가 부족하지 않는지 확인 하는  좋은 방법이 있기 때문에  카운터를 보기 위해 많은 시간을 허비하지는 않습니다.

 

*****

 

SQLServer: SQL Statistics: Batch Requests/Sec 

SQL Server 얼마나 바쁜지 피부로 느끼기 위해 확인하는 카운터는 SQLServer: SQL Statistics: Batch Requests/Sec  입니다 카운터는 SQL Server 초당 수신한 batch request들의 수를 나타내고 일반적으로 서버의 CPU 얼마나 busy 한지를 측정하는 용도로 이용합니다일반적으로 말하지만 초당 1000 batch request  넘는다면 이것은 매우 busy  상태의 SQL Server 나타내고 있고 만약 CPU 병목현상을 이미 경험하지 못하였다면  그러한 상황이 닦칠  있다는 의미이기도 합니다물론 이것은 상대적은 수치이고  좋은 하드웨어를 갖고 있다면  많은 수의 batch request  처리   있습니다.

네트웍 병목 현상으로는 일반적으로 100 Mbps 네트웍 카드는 일반적으로 초당 3000 batch request  가능합니다만약  서버가  정도로 busy 상태를 유지한다면 네트웍 카드를 하나  추가하거나 1 Gbps 네트웍 카드로 변경하는 것이 필요합니다.

일부 DBA 들을 SQLServer: Databases: Transaction/Sec: _Total   SQL Servver  전체 활동량을 측정하기 위해 이용합니다.  하지만 이것은 그리 좋은 생각이 아닙니다Transaction/Sec   모든 activity  측정하지 않고 Transaction 안에 있는 activity 만을 측정하게 됩니다그렇기 때문에 Transaction/Sec  대신에 항상 SQLServer: SQL Statistics: Batch Requests/Sec 카운터를 이용하여 측정하는 것이 좋습니다.

*****

SQLServer: SQL Statistics: SQL Compilations/Sec

Transact-SQL 코드의 SQL 컴파일이 발생하는 것은 SQL Server 수행하는 정상적인 영역의 일부입니다하지만 컴파일은 CPU  기타 리소스를 많이 사용하기 때문에 SQL  가능하면 캐시 안의 수행 계획 (execution plan)안에서 재수행   있도록 작성하는 것이 좋습니다. (execution plan 컴파일이 발생할  생성됩니다.)   많은 실행 계획들이 이용됐다는 것은 서버상의  적은 오버헤드를 유발시키고 성능을 더욱 향상시키게 됩니다.

서버상에서 얼마나 많은 compilation 발생했는지 확인하기 위해서는 SQLServer: SQL Statistics: SQL Compilations/Sec 카운터를 이용할  있는습니다.  예상할  있듯이  카운터를 초당 얼마나 많은 컴파일이 발생했는지는 나타냅니다.

일반적으로 초당 100 compilation 이상 발생한다면 서버상에 불필요한 오버헤드를 발생하고 있다는 것입니다수치가 높다는 것은 서버가 의미없이 바쁘거나 수행중에 불필요한 재컴파일이 발생한다는 것입니다예를 들어 object 스키마가 변경되었거나 병렬 실행 계획이 질렬로 수행된다거나통계가 재계산되었거나 다른 일들이 발생하였다면 SQL Server 강제적으로 재컴파일   있습니다어떤 경우에는 불필요한 컴파일을 숫자를 줄일  있습니다 곳에서 page   자세한 내용을 확인   있습니다.

*****

 

SQLServer: Databases: Log Flushes/sec counter 

SQLServer: Databases: Log Flushes/sec counter   초당 로그가 디스크에 쓰여지는 (flush) 되는 수치를 나타냅니다이것은 데이터베이스 레벨별로 또는 전체에 대해서 측정할  있습니다.

정확히 log flush  무엇일까요 ? 이것을 설명하는 가장 좋은 방법은 예를 드는 방법입니다예를 들어 당신이 10 개의 INSERT 문을 수행하는 트랜잭션을 시작한다고 가정해 본다면  번째로 INSERT  실행되고 새로운 데이터가 데이터 페이지로 삽입됩니다이것은 동시에 2가지가 발생됩니다  버퍼 캐시 안에 있는 데이터 페이지는 새로운 INSERT Row 데이터로 갱신되는 것과 그리고 로그 파일을 위해 데이터를 책정합니다 것은 트랜잭션이 완료될 때까지 계속됩니다동시에 로그 캐시로부터의  트랜잭션을 위한 데이터는 즉시 log file  기록합니다하지만 버퍼 캐시에 머물고 있는 데이터는 다음  checkpoint 프로세스가 실행되기 전까지 남아 있게 되고 checkpoint  실행될  데이터 베이스는 새로운 INSERT row들이 갱신합니다.

 동안 log cache 라는 부분에 대해서 전혀 들어보지  했을 수도 있지만 log cache SQL Server  데이터를 log file  쓰기 위해 기록하는 메모리 위치입니다. Log cache  목적은  트랜잭션을 commit 하기 전에 roll back 하는데 이용하기 위해 사용 하는 것으로 매우 중요합니다.  하지만 단지  트랜잭션이 완료되면 ( 이상 롤백은   없음) log cache  물리적 로그 파일로 즉시 방출(flush) 하게 됩니다이것은 일반적인 처리입니다. SELECT 쿼리들은 데이터를 수정할   없고 트랜잭션을 생성할  없고 log 방출 역시 하지 않는 다는 것을 기억하십시요.

본질적으로 로그 방출(Log Flush) log cache 로부터 물리적인 log file  기록될  발생합니다.  그래서 기본 성질은 log flush  트랜잭션이 완료될 때마다 발생되게 되고 여러 개의 트랜젼션의 수와 관련되어 SQL Server 의해서 발생되게 됩니다그리고 예상하듯이 log flush  사이즈 (얼마나 많은 데이터를 물리적 디스크로 기록할 것인가에 대해 트랜잭션에 따라 매우 다양해 집니다 정보는 어떤 의미를 우리에게 전달할까요 ?

 

이미 우리는 disk I/O  병목에 대해서 경험하고 있다고 가정해 봅니다하지만 우리는 그에 대한 원인을 전혀 모르고 있는 상태이구요디스크 I/O 병목에 대해서 문제 해결을   있는  가지 방법은  초당 기록되는 log flushed 카운터(Log Flushes/sec counter) 캡쳐 하고 얼마나 busy 상태인지 확인 하는 것입니다이미 예상할  있듯이 만약 서버가 많은 수의 트랜잭션을 처리하고 있다면 그것은 또한 많은 수의 log flush  발생하고 있다는 의미이고  수치는 트랜잭션을 생성하는 action-type 쿼리들이 얼마나 busy 상태인지를 나타내는 서버들간의 수치로 확인 됩니다당신이  정보로 하고자 하는 것은 당신의 서버에서 예상했던 것보다  많은 수치의 log flush  발생한다는 상황입니다.

 

예를 들어  테이블에 매일 백만건의 INSERT  발생하고 거기에는 insert 하는 여러 가지 다른 방법이 있습니다.   번째로 각각의 row 개별적으로 insert   있고  INSERT 문장은 sinlgle transaction 으로 wrapped 되어 있습니다 번째는 모든 INSERT 문장은 하나의 transaction 문장 안에 포함되어 있습니다그리고 마지막으론 INSERT 문장이 다중 트랜잭션(multiple transaction) 문장안에 나뉘어져 들어가 있고 어디선가 1에서 1,000,000 까지의 INSERT 하게 됩니다  가지의 경우는 옵션이 다르고 SQL Server 상에서 작용하는 효과 역시 다르게 나타나고 초당 log flush   역시 다르게 나타납니다덧붙이자면 이것은 그렇게 생각하던 아니던 당신의 프로세스에서 하나의 트랜잭션만 발생한다고 착각하기 쉬운 경우입니다대부분의 사람들은 하나의 프로세스는 하나의 트랜잭션만 유발한다고 생각하는 경향이 있습니다.

 

..  번째 경우 백만건의 row  백만번 트랜잭션으로 INSERT 하게 되면 거기에는 또한 백만번의 log flush  발생합니다하지만  번째의 경우에는 백만건의 row   하나의 트랜잭션안에서 INSERT 하게  것입니다그리고  경우에 log flush   번만 발생하게 됩니다그리고  번째의 경우에는 log flush  수치는 트랜잭션의 수와 동일하게 됩니다.  사실 log flush  크기는  트랜젹션으로 처리하는 것보다는 백만 건의 트랜젼션으로 처리하는  보다 커질 것이다하지만 대부분의 경우에 이것은 여기에서 설명하듯이 성능을 측정하는 것에는 중요하지 않다.

 

.. 어느 옵션이 가장 좋을까 ? 모든 경우에서 당신은 여전히 많은 disk I/O  유발시킬 것입니다백만건의 row 처리  것이라면  상황을 개선시키는 확실한 방법은 없을 것이다하지만 하나 또는  개의 트랜잭션으로만 처리한다면 log flush  수치를 줄일  있고 이로 인해 disk I/O  상당 부분 줄임으로 인해 I/O 병목에 대해 개선할  있을 것입니다.

 이것으로 우리는 이것을 통해 2가지를 확인   있었습니다..  번째는 최대한 log flush  줄이기를 원한다는 것이고 이는 결국 당신의 서버상에서 트랜잭션의 수를 줄이는 것이 성능 개선의 방법이라는 것이다.

*****

SQL Server General Statistics Object: User Connections

 

SQL Server 여러 명의 사용자들이 이용하기 시작한 이후부터 성능을 확인 하기 위해 SQL Server General Statistics Object: User Connections 수치를 눈여겨  것이다 것은 현재 SQL Server 연결된 사용자의 수를 나타낸다. ( 전체 유저들의 수를 의미하는 것이 아니다. )

 

 수치를 관찰할   유저가 여러 개의 연결(connection)  유지할  있고 여러 명의 사람들이  사용자의 connection  공유할  있다는 것을 주의해라 수치가 실제 유저의 수치를 나타낸다고 착각하자 말아라 !! 대신 연관되어 측정할  있는 얼마나 “busy” 인가를 확인해라.   수치는 과거에 비해 서버가 얼마나  많이 이용되고 있는지 또는 얼마나  적게 이용되고 있는지만을 느끼는 정도로 이용해라.

 

만약 당신의 데이터베이스가 데드락(deadlocks) 으로 어려움이 있다면 SQL Server Locks Object: Number of Deadlocks/sec 값으로 측정할  있다하지만  수치가 상대적으로 높지 않다면 측정은  단위로 진행되고 인지할  있는 단지  개의 데드락만을 측정   있기 때문에  많은 정보를 보기를 원할 것이다.

 

하지만 여전히  것은 데드락 문제를 갖고 있는지 확인 하는  유용하다 구체적으로 확인하기 위해서는 SQL 프로필러의 데드락 추적 능력을 이용해라프로필러는  많은 상세한 정보를 제공할 것이다Deadlocks/sec counter  수치를 확인해서 일반적인  그림을 그리는데 사용하고  정보를 기초로 어떤 부분에 문제가 있는지 확인하기 위해서는 프로필러의   상세한 분석을 통해 문제점의 “drill” down   있도록 이용해라.

'IT 이야기 > DataBase' 카테고리의 다른 글

Redis Architecture (번역문)  (0) 2016.06.27
MSSQL 상위 50개의 SQL 문장 확인하기  (0) 2015.05.27
MS-SQL 성능 개선 - Index rebuild  (0) 2015.05.27
MSSQL File Size 구성  (0) 2015.05.27
MSSQL Transaction Log Full  (0) 2015.05.27

데이타 라는 것은 쌓이면 쌓일수록 고통스러워 합니다.

나를 좀 줄 맞춰 달라고...

애초 설계에서부터 잘 설계 하였다면..

시간이 지남에 따른 Maintenance 계획까지도 고려해서 개발했겠지만 그렇지 않은경우는..

주기적으로 상태를 확인하고 관리 해 줘야지만 클릭 = 응답 이라는 결과를 가져올 수 있겠지요.

 

전 지금 회사에서 DBA는 아니지만 부득이 DBA Role의 일부를 대신 해고 있는 관계로 DB쪽의 전문가는 아니지만..

개발자로서 DB에 대해 아는 부분만큼 정리합니다.

혹시 부족한 부분이 있으면 꼭 지적 해 주는 센스 ! 그렇다고 무시하진 말아주시공. ㅋ

----

1. 인덱스 단편화 확인

dbcc showconfig( 테이블명, '인덱스명') 으로

 

2. 인덱스 Re-build

  실행시키는 명령어에는 여러 가지가 있을지 모르겠지만 인덱스 Re-build 하는 방법은 2 가지가 있습니다.

그 절대 기준은 Lock 을 유발하느냐 안 하느냐

 

 2.1 Lock 유발 하는 rebuild

    - DBCC DBREINDEX( 테이블명, 채우기비율 )

    - ALTER INDEX 인덱스명 ON 테이블명 REBUILD WITH ( 각종 옵션들 )

 

 2.2 Lock 을 유발하지 않는 rebuild

    - DBCC INDEXDEFRAG( DB명, 테이블명, 인덱스명 )

 

3. 통계 업데이트

   UPDATE STATISTICS 테이블명

 

4. 성능 개선 확인

  위 작업을 하기 전에 현재 시스템의 Base line 이 어느 정도인지 정리하는 작업이 무엇보다 가장 중요하다 할 수 있겠습니다.

 우리의 현 상황을 제대로 알지 못하면 개선의 여지도 없기 때문에..

 특히나 엔지니어라면 '좀 느린데~~' 라는 추상적인 말 보다는 구체적인 수치로 정량화 할 수 있는 능력을 갖추어야 할 것 같습니다.

 어쨌든 위 1 ~ 3 번까지의 작업을 완료 후에는 Stored Procedure 의 실행 상태를 모니터링 하면서 작업 전 대비 얼마나 향상되었는지 확인 및 정리하시면 되겠습니다.

 

 

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

2005 부터는 ALTER INDEX 명령문을 사용해서도 On-line 서비스 중에 rebuild 할 수 있다고 해서 찾아보니...

약간의 제약 사항이 있네요.

Tech-net (http://technet.microsoft.com/ko-kr/library/ms188388.aspx)에서 퍼 온 내용입니다.

 

-----

ALL

인덱스 유형에 관계없이 테이블이나 뷰에 연결된 모든 인덱스를 지정합니다. ALL을 지정하면 하나 이상의 인덱스가 오프라인 또는 읽기 전용 파일 그룹에 있거나 지정한 작업이 하나 이상의 인덱스 유형에 대해 허용되지 않을 경우 해당 문이 실패합니다. 다음 표에서는 인덱스 작업과 허용되지 않는 인덱스 유형을 나열합니다.

이 작업에 ALL 지정

테이블에 다음 인덱스가 하나 이상 있으면 실패함

REBUILD WITH ONLINE = ON

XML 인덱스

공간 인덱스

큰 개체 데이터 형식 열: imagetextntextvarchar(max)nvarchar(max)varbinary(max) 및xml

REBUILD PARTITION = partition_number

분할되지 않은 인덱스, XML 인덱스, 공간 인덱스 또는 비활성 인덱스

REORGANIZE

ALLOW_PAGE_LOCKS가 OFF로 설정된 인덱스

REORGANIZE PARTITION =partition_number

분할되지 않은 인덱스, XML 인덱스, 공간 인덱스 또는 비활성 인덱스

IGNORE_DUP_KEY = ON

공간 인덱스

XML 인덱스

ONLINE = ON

공간 인덱스

XML 인덱스

 

---

'IT 이야기 > DataBase' 카테고리의 다른 글

Redis Architecture (번역문)  (0) 2016.06.27
MSSQL 상위 50개의 SQL 문장 확인하기  (0) 2015.05.27
SQL Server Performance Monitor Counter Part 1  (0) 2015.05.27
MSSQL File Size 구성  (0) 2015.05.27
MSSQL Transaction Log Full  (0) 2015.05.27

+ Recent posts