이슈 및 버그 관리 툴리 필요하던 참에..

Jira 를 쓰고 싶었으나 유료임으로 패스하고.. 그나마 검증된 Mantis 를 사용하기로 결정.

 

윈도우용 Mantis 에 대한 자료가 그리 많지 않아..

설치하면서 이슈가 되었던 부분 몇 가지 정리합니다.

 

1. PHP for IIS 패키지 설치

   ==> 그냥 설치만 하면 다 되는 줄 알았는데.. IIS 의 풀에서 32비트 호환 모드로 설정해 주어야만 동작

  그 이후로는 일반적인 설정 작업하면 됨

 

2. Mail 설정 (GMail로 사용)

  Config_inc.php 화일에서 아래와 같이 설정

$g_phpMailer_method  = 2;

$g_smtp_host   = 'smtp.gmail.com';

$g_smtp_port   = 587;

$g_smtp_username  = 'g-mail ID';   /

$g_smtp_password  = 'g-mail PW';

$g_smtp_connection_mode = 'tls';

 

윈도우즈 폴더에서 php.ini 화일 열어서 아래의 주석 해제

 

;extension=php_openssl.dll  =>  extension=php_openssl.dll

 

별것 아니긴 하지만.. 사소한 부분이 엄청 시간을 소비하기에 포스팅 합니다.

 

 

2015.1 추가 내용

Mantis 를 이용시 외부 메일 서버를 통해 메일 발송하려 할 때 원인을 알수 없는이유로 메일이 발송되지 않는 경우가 발생,

Cron으로 메일 발송하게끔 수정 후 윈도우 잡스케쥴러에서 아래의 작업을 반복적으로 실행하게끔 설정하니 깔끔하게 해결됩니다.

php.exe -f scripts\send_emails.php

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

베뉴 8 Pro Windows 10 업그레이드  (0) 2016.06.29
택배 조회 URL 모음  (0) 2016.04.06
VI Editor 단축키  (0) 2015.05.27
Eclips 단축키 모음  (0) 2015.05.27
Windows용 Mantis 설치  (0) 2015.05.27


징가의 최근 이야기.

원문

http://media.daum.net/digital/game/newsview?newsid=20150526211305699



'화무십일홍'. '열흘 붉게 핀 꽃은 없다'라는 뜻이다. 아무리 흥한 것도 시간이 지나면 반드시 쇠한다는 교훈을 담고 있는 이 말은 인생의 덧없음을 말하기도 하지만, 많은 기업과 경영인들에게 '성공은 오래가지 못한다'는 큰 울림을 주는 격언이기도 하다.

이는 빠르게 변화하고 있는 IT 시장도 마찬가지다. 불과 10년 만에 스마트폰이 사람들의 필수품이 되어버렸고, 소셜네트워크서비스(이하 SNS)가 하나의 문화로 자리잡을 정도로 급변하는 시장을 선점하기 위해 수 많은 기업들이 시장에 뛰어들어 성공했고 또 실패하여 사라져갔다.

스마트폰 시장의 폭발적인 증가를 바탕으로 한 모바일 게임 역시 초창기 캐주얼게임의 장르에서 시작해 이제는 콘솔과 PC, 온라인게임 플랫폼에 이어 게임 시장의 중심으로 떠오르는 등 기존의 그 어떤 플랫폼 보다 빠르게 성장세를 이어가고 있는 상황이다.

↑ 징가

이 같은 시대의 흐름 속에서 변화하는 게임 시장을 먼저 선점하여 대세로 떠올랐지만 불과 2년만에 곤두박질 친 회사가 있다. 바로 신생 게임 기업의 신화로 통하는 '징가'가 그 주인공이다.

한 때 창립 후 불과 5년만에 10억 달러(한화 약 1조 원)의 매출을 기록하며 새로운 게임 플랫폼 등장의 신호탄을 알렸다는 평가를 받았던 '징가'. 미국 나스닥에까지 상장하며 영원한 성장을 이어갈 것만 같았던 '징가'는 현재 연이은 인력감축으로 수 많은 게임 스튜디오가 폐쇄되고 회사의 존폐가 위험할 정도로 끝 모른 추락을 이어가고 있는 중이다. '게임 역사상 가장 엄청난 성장을 거둔 회사'로 불리던 '징가'는 왜 이런 위기에 처하게 된 것일까?

2007년 4월 창업자 '마크 핀커스'는 게임회사인 'Presidio Media'을 창업했고 3개월이 지난 7월 자신이 기르던 불독의 이름인 'Zynga'에서 이름을 따 회사의 이름을 '징가'로 변경하여 지금의 회사 기틀을 갖췄다.(회사의 로고 역시 이 불독의 이미지를 그대로 사용한 것) 당시 미국 IT 시장은 페이스북과 트위터의 대성공으로 인해 창업 열풍이 불고 있었고, '징가' 역시 이러한 분위기에 힘입어 미국의 여러 벤처 캐피탈(BC)회사에서 투자를 받아 설립된 수 많은 회사 중 하나였다.

↑ 징가

비록 여러 신생 회사를 설립한 경험이 있었지만 게임회사를 처음 창립한 '마크 핀커스'는 트위터와 함께 엄청난 성공을 거두고 있던 소셜네트워크서비스 '페이스북'에 주목했다. SNS의 열풍으로 나나 할 것 없이 소셜 요소에만 집중하던 시기. '징가'의 창립 멤버들은 SNS을 통해 끝없이 전파되는 정보의 움직임에 주목했고, 이에 자신들의 게임을 페이스북에 서비스하기 위한 작업에 착수한다.

사실 징가의 게임들은 이미 웹으로 서비스되는 게임의 상당수를 그대로 도입해 만든 경우가 많았으며, 회사에서 선보인 최초의 게임인 '텍사스 홀덤 포커' 역시 이전에 있었던 카지노 게임과 별반 차이가 없었다.

하지만 징가는 이러한 게임에 여러 사람과 함께 할 수 있는 지금의 소셜 요소를 도입했고, 2007년 5월 페이스북이 자신들의 플랫폼에 적용할 수 있는 API(운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지 형식- 두산백과)를 공개하자 이를 발 빠르게 적용하여 페이스북에 입점하기에 이른다.

↑ 페이스북 회사 로고

SNS를 통해 기존의 메신저 서비스 이상의 콘텐츠를 찾던 페이스북 역시 게임이라는 콘텐츠를 SNS에 접목시킨 '징가'의 입점을 환영했고, 이 두 회사는 소위 말하는 '악어와 악어새'와 유사한 공생 관계를 맺게 된다.

농작물 키우기 혹은 라이트한 카지노 게임과 같은 간편한 게임 시스템, 그리고 혼자서 하는 게임이 아닌 SNS 친구들과 함께하는 '소셜 요소'까지 '징가'는 일반적인 웹기반의 게임에 SNS를 더하면서 게임에 관심이 없던 일반인들까지 자신들의 게임에 집중하게 만드는데 성공했다.

사람들이 원하는 것이 무엇인지 정확하게 꿰뚫어 본 '징가'는 페이스북에 입점한 지 불과 1년만인 2008년 월 사용자 90만명이라는 엄청난 기록을 세우며 자신들의 선택이 옳았음을 증명했다. 더욱이 2009년 전세계에 소셜네트워크게임(SNG)이라는 하나의 장르를 만들어낸 게임 '팜 빌리지'를 출시하며 이 같은 성공은 더욱 가속화된다. 2009년 하반기 일 사용자 2천 만 명, 월 사용자 2억 명이라는 유례없는 기록을 세운 '징가'는 이러한 성장을 바탕으로 지속적인 투자를 유치하고 성장해 나가며 그야말로 SNG의 전성기를 활짝 열어 놓았다.

이러한 '징가'의 성공을 본 많은 게임사들은 앞다투어 SNG을 선보이며 점차 시장이 활성화 됐고, 거대 게임 회사들을 소셜 게임에 뛰어들게 만드는데 일조 했으며, EA는 플레이 피쉬, 팝캡 게임즈 등을 인수하고, 마이크로소프트도 소셜 게임 개발사 '크라우드스타'를 인수했다. 특히, 징가와 경쟁 관계에 있던 플레이 피쉬를 인수한 EA는 단숨에 징가에 이어 페이스북 게임 2위로 올라서는 기염을 토하기도 했다.

이에 시장을 선점한 '징가' 역시 일본과 중국의 개발사들을 인수하는 방식으로 후발주자들을 따돌리며 계속 앞으로 나아갔다.

2010년 페이스북이 페이스북 플랫폼에서 서비스되는 게임들의 유료 콘텐츠를 자신들의 수익으로 돌리기 위해 도입한 '페이스북 크레딧'으로 대체한다는 방침을 발표하자 이에 '징가'가 반발하며 둘의 사이는 틀어지는 듯 했다.

하지만 게임과 광고를 포함해 매출의 12%를 담당할 정도로 비중이 커져버린 '징가'를 페이스북은 완전히 외면하지 못했고, '장가' 역시 새로운 플랫폼을 찾지 못한 상황에서 페이스북과 관계를 청산하는 것에는 위험부담이 너무 높았다. 때문에 '징가'는 2015년까지 '페이스북 크레딧'을 사용하는데 합의했고, 페이스북 역시 지속적인 서비스 제공을 약속하며 둘의 관계는 다시 원만해졌다.

↑ 징가

쉽고 간편한 소셜 게임으로 성공을 거뒀지만, 동종 장르의 게임들과 표절 논란을 끊임없이 겪던 '징가'. 이러한 논란을 해결하기 위해 '징가'의 수뇌부는 막강한 자본력을 바탕으로 논란을 겪던 다수의 모바일게임사를 인수해버리는 엄청난 방식을 채택한다. 이 과정 속에서 수 많은 게임 스튜디오가 생기게 된 징가는 2010년 말 출시한 '시티빌'이 다시 대성공을 거두면서 월 사용자 1억명이라는 기록을 세우게 되며, 더욱 큰 규모의 게임사로 발돋움 하게 된다.

조그만 스타트업에서 시작한 회사가 불과 4년만에 2천 여명이 넘는 직원과 각 국에 게임 스튜디오를 거느리며 세계 유수의 게임기업들과 어깨를 나란히 하게 된 셈이다.

2011년 연 매출 11억 달러를 넘는 거대 회사로 성장한 '징가'는 많은 게임사들도 시도하지 못한 주식 상장을 '골드만삭스'와 '모건스탠리'를 통해 시도하며 주당 12달러라는 기록을 세우게 된다. 바야흐로 '징가'가 세계 게임사들 사이에 우뚝 선 순간이었다.

하지만 징가의 몰락은 가장 영광스러운 순간부터 시작됐다. 해를 지난 2012년 페이스북의 소셜 게임이 급격히 증가하자 소셜 게임들의 스팸성 광고가 사회적인 문제로 대두되기 시작했고, 이에 페이스북은 소셜 게임에 대한 안티 스팸 정책을 실시하기에 이른다. 이에 신규 가입자를 유치해 수익을 올리던 상당수의 소셜 게임사들이 무너지기 시작했고, 이는 점차 시장의 축소로 이어져 징가 역시 매출 감소에 시달린다.

또한, 이미 시대는 소셜 게임을 넘어 모바일 게임으로 전환되기 시작했지만 징가는 이에 적절히 대처하지 못했다. 흐름을 읽어 성공한 회사가 급격히 바뀌어 버린 환경에 적응하지 못한 셈이다.

이 같은 '징가'의 모습에는 경직된 회사 분위기와 기업 윤리의 실종을 기반으로 하고 있었다. 너무나 급격히 성장한 '징가'는 과도한 성과급 위주의 경영과 내부 경쟁을 우선시 하는 분위기 탓에 과중한 업무가 가중되는 분위기였고, 이에 직원들은 엄청난 스트레스에 시달리고 있었으며, 내부불만이 극에 달해 있었다. 더욱이 기업매출과 내부의 생산을 데이터화하여 평가하는 '징가'의 정책은 경직된 사고와 성과만이 우선시 되는 대기업 형태로 흘러갔고 내부 분위기는 급격히 경직됐다. 기업문화의 영향력을 완전히 무시한 결과가 서서히 드러나고 있던 것이다.

또한, 빠르게 성장하는 회사의 방향성을 잡아주어야 할 임원진들 역시 스스로의 성공에 취해 나태해 지고 있는 것도 문제였다. 너무나 빠르게 성장을 거듭하면서 관리직 임원들을 급하게 채용한 '징가'는 서서히 회사의 신념이나 원칙보다는 돈과 매출에만 이들이 늘어나면서 분위기가 퇴색되기 시작했다.

↑ 징가

더욱이 일정 수익을 거두면 제공되는 인센티브 정책을 없애버리며 직원들의 사기를 꺾은 것에 이어 주식 상장 이후 자신의 주가 전부를 팔아버린 '마크 핀커스' CEO의 행동은 징가의 기업 가치를 떨어뜨리는데 큰 영향을 미쳤다.

내부 경쟁이나 일삼으며 매출 위주로 흘러가는 경직된 분위기, 덩치는 커졌지만 이미 생산력을 잃어버린 개발진들, 그리고 경영진들의 과도한 탐욕까지 '징가'는 빠른 성공 이후 그 어떤 게임회사보다도 빠르게 경직되며 성장 동력을 잃어버렸다.

사실 '징가'는 모바일 게임의 대두에 따른 대처를 완전히 포기한 것은 아니었다. '징가'는 2011년 이미 '앵그리버드'로 유명한 '로비오'를 비롯한 여러 모바일게임사들을 인수하기 위한 작업에 착수했다. 하지만, 이들 회사들 상당수는 '징가'의 경직되고 비효율적인 내부 분위기를 우려하며 이 제안을 거절하고 만다.(이중 '로비오'에 제안한 인수 금액은 무려 '22억 달러' 한화 약 2조에 달한다. 하지만 이러한 제안도 거절할 만큼 '징가'의 내부 경쟁과 업무 스트레스는 유명했다)

계속되는 실적 악화와 경직된 회사 분위기. 내부 경쟁 탓에 수 많은 게임 스튜디오의 인재들을 제대로 활용하지 못하던 '징가'는 덩치는 불렸지만 속은 병들어가는 소위 '대기업병'에 걸린 회사들과 같은 길을 걸어가기 시작한다. 실적 악화를 이유로 대규모 구조조정을 감행한 것에 이어 전세계에 흩어져 있던 게임 스튜디오를 정리하기 시작했다.

하지만 이런 노력에도 불구하고 징가의 주식은 반토막을 넘어 곤두박질 쳤고, 14달러에 이르던 징가의 주식은 2달러 선에 머물고 있는 상황이다. 현재 징가는 한 번의 큰 구조조정을 거친 이후 다시 제기를 위해 모바일게임 산업에 뛰어들고 있지만 지금까지 이렇다 할 성과를 거두지 못하고 있는 중이다. 한 때 전세계 게임사들과 어깨를 나란히 했던 회사 치고는 너무도 초라한 모습이라고 할 수 있다.

'징가'의 성공 요인에는 시대의 흐름을 읽은 과감한 시도와 새롭게 대두되던 플랫폼을 통해 시장을 먼저 선점했으며, 다양한 게임을 통해 게이머들의 입맛을 충족시켜 주었다는 것에 있었다. 이러한 징가의 시도는 엄청난 성공으로 이어져 유례없이 기록적인 성장을 거둔 징가의 신화에 큰 영향을 미쳤다.

하지만 변화하는 시대에 대처하지 못해 뒤쳐진 회사의 정책과 급격한 성장에 따라 빠르게 진행된 대기업화를 통한 경직된 내부 분위기. 그리고 기업윤리가 실종된 경영진의 태만까지 기업의 성장통을 이겨내지 못하며 성공을 이어가지 못하고 주저앉고 말았다. 시대의 흐름을 타 성공한 기업이 계속 흐름을 타지 못하면 어떻게 되는지 똑똑히 보여준 사례라고 할 수 있다.

이러한 '징가'의 실패는 국내 게임사들에게도 좋은 반면교사가 될 수 있다. 더욱이 세계 스마트폰 시장 3위를 기록할 정도로 많은 매출이 발생하는 국내 모바일게임 시장의 성장과 함께 커온 모바일게임사들 역시 '징가'의 실패와 같은 모습을 겪지 않으리라는 보장은 없다.

한 때 세계 최고의 게임사를 꿈꿨지만 3일 천하가 되어버린 '징가'의 추락. 과연 징가는 다시 예전의 위상을 되찾을 수 있을까?

급변하는 게임시장의 흐름 속에 성공을 거둔 국내 게임사들 역시 이러한 전철을 밟지 않기를 바라며 글을 마친다.

글 / 게임동아 조영준 기자 <june@gamedonga.co.kr>

사용자 중심의 게임 저널 - 게임동아(game.donga.com)

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

vi 명령어 요약

1.시작
vi file vi를 시작하여 지정한 파일 편집
vi -R file 읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집
view file 읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

2.종료
:wq 데이터를 저장하고 종료
:q! 데이터를 저장하지 않고 종료

3. 시스템이 다운된 후에 되살리기
vi -r 되살릴 수 있는 모든 파일 이름 보여주기
vi -r file vi를 시작하여 지정한 파일 되살리기

4. 디스플레이 제어하기
^L 현재 화면을 다시 디스플레이하기
:set number 내부 줄 번호 디스플레이
:set nonumber 배부 줄 번호 디스플레이 않기

5. 마지막으로 지운 것 복사하기
p 마지막으로 지워진 것을 커서의 뒤/아래에 삽입
P 마지막으로 지워진 것을 커서의 앞/위에 삽입
xp 두 문자를 바꿈
deep 두 단어를 바꿈
ddp 두 줄을 바꿈

6. 패턴 검색
/rexp 지정된 정규 표현식에 대해 앞으로 이동
/ 이전의 패턴에 대해 앞으로 검색을 반복
?rexp 지정된 정규 표현식에 대해 뒤로 이동
? 이전의 패턴에 대해 뒤로 검색을 반복
n /나 ?명령에 대해 같은 방향으로 반복
N /나 ?명령에 대해 반대 방향으로 반복

7. 약어의 사용
:ab short long short를 long에 대한 약어로 변경
:ab 현재 약어 목록을 표시
:una short 약어 short를 표시

8. 줄 길이의 조정
r 문자를 뉴라인으로 변경
J 줄의 결합
:set wm=n 오른쪽으로 n문자 위치에서 자동적으로 줄 나눔

9. 커서 이동
h 커서를 한 칸 왼쪽으로 이동
j 커서를 한 줄 아래로 이동
k 커서를 한 줄 위로 이동
l 커서를 한 칸 오른쪽으로 이동
커서를 한 칸 왼쪽으로 이동
커서를 한 칸 오른쪽으로 이동
- 커서를 이전 줄의 처음으로 이동
+ 커서를 다음 줄의 처음으로 이동
커서를 다음 줄의 처음으로 이동
0 커서를 현재 줄의 맨 앞으로 이동
$ 커서를 현재 줄의 맨 끝으로 이동
^ 커서를 현재 줄의 첫글자(공백이나 탭이 아닌)로 이동
w 커서를 다음 단어의 첫 글자로 이동
e 커서를 다음 단어의 끝 글자로 이동
b 커서를 이전 단어의 첫 글자로 이동
W w와 같음(문장 부호 무시)
E e와 같음(문장 부호 무시)
B b와 같음(문장 부호 무시)
( 다음 문장의 처음으로 이동
) 이전 문장의 처음으로 이동
{ 다음 문단의 처음으로 이동
} 이전 문단의 처음으로 이동
H 커서를 화면 맨 위로 이동
M 커서를 중간으로 이동
L 커서를 맨 아래로 이동

10. 편집 버퍼를 통한 이동
^F 한 화면 아래로 이동
^B 한 화면 위로 이동
n^F n화면 아래로 이동
n^B n화면 위로 이동
^D 반 화면 아래로 이동
^U 반 화면 위로 이동
n^D n줄만큼 아래로 이동
n^U n줄만큼 위로 이동

11. 셸 명령 실행
:!command vi를 중단하고 지정한 셸 명령을 실행
:!! vi를 중단하고 이전의 셸 명령을 실행
:sh vi를 중단하고 셸을 실행
:!csh vi를 중단하고 새로운 C-셸을 실행

12. 패턴에 의한 치환
:s/pattern/replace/ 현재 줄의 치환
:lines/pattern/replace/ 지정한 줄의 치환
:line,lines/pattern/replace/ 지정한 범위의 치환
:%s/pattern/replace/ 모든 줄의 치환
1,$s/aaaaa/bbbbb/g 모든줄의 치환

13. 데이터 읽기
:liner file file의 내용을 지정한 줄 다음에 삽입
:r file file의 내용을 현재의 줄 다음에 삽입
:liner !command command의 결과를 지정한 줄 다음에 삽입
:r !command command의 결과를 현재의 줄 다음에 삽입
:r !look pattern 지정한 pattern으로 시작된 단어 삽입

14. 정규 표현식을 사용하기 위한 특수 기호
. 뉴라인을 제외한 모든 단일 문자와 대응
* 영 또는 그 이상의 선행 문자와 대응
^ 줄의 시작과 대응
$ 줄의 끝과 대응
\< 단어의 시작과 대응
\> 단어의 끝과 대응
[ ] 묶여진 문자중의 하나와 대응
[^ ] 묶여진 문자를 제외한 아무것하고나 대응
\ 이어지는 기호를 문자 그대로 해석

15. 줄 번호
nG 줄번호 n으로 건너뛰기
1G 편집 버퍼의 첫 줄로 건너뛰기
G 편집 버퍼의 마지막 줄로 건너뛰기
:map g lG g가 lG와 같도록 매크로 정의

16. 삽입
set noautoindent set nocindent
i 입력 모드로 전환, 커서 위치 앞에서 삽입
a 입력 모드로 전환, 커서 위치 뒤에서 삽입
I 입력 모드로 전환, 현재 줄의 앞에 삽입
A 입력 모드로 전환, 현재 줄의 끝에 삽입
o 입력 모드로 전환, 현재 줄의 아래에 전개
O 입력 모드로 전환, 현재 줄의 위에 전개

17. 편집하고 있는 파일을 바꾸기
:e file 지정한 파일의 편집
:e! file 지정한 파일의 편집, 자동 점검의 생략

18. 내용 고치기
r 단지 한 글자만 변경(입력 모드로 바뀌지 않음)
R 입력하는 대로 겹쳐 써서 변경
s 삽입에 의해 한 단어의 변경
C 커서의 위치로부터 줄 끝까지 삽입에 의한 변경
cc 전체 줄을 삽입에 의한 변경
S 전체 줄을 삽입에 의한 변경
cmove 커서부터 move까지 삽입에 의해 변경
~ 대,소문자 바꾸기

19. 고치기의 취소 또는 반복
u 편집 버퍼를 수정했던 마지막 명령을 취소
U 현재 줄을 저장
. 편집 버퍼를 수정했던 마지막 명령 반복

20. 문자 삭제
x 커서가 있는 문자 삭제
X 커서의 왼쪽 문자 삭제
D 커서부터 줄의 끝까지 삭제
dd 현재 줄의 전체 삭제
dmove 커서부터 move까지 삭제
dG 커서부터 편집 버퍼의 끝까지 삭제
d1G 커서부터 편집 버퍼의 맨 앞까지 삭제
:lined 지정한 줄의 삭제
:line, lined 지정한 범위의 삭제

21. 여러 줄의 복사와 이동
:linecotarget 지정한 줄을 복사하여 target 줄 밑에 삽입
:line, linecotarget 지정한 범위를 복사하여 target 줄 밑에 삽입
:linemtarget 지정한 줄로 이동하여 target 줄 밑에 삽입
:line, linemtarget 지정한 범위로 이동하여target 줄 밑에 삽입

22. 데이터를 처리하기 위한 셸 명령의 사용
n!!command n번 줄에서 command의 실행
!move command 커서부터 move까지 command 실행
!move fmt 커서부터 move까지 줄들을 형식 맞추기

23. 데이터 저장하기
:w 원래의 파일로 데이터를 저장
:w file 지정한 파일로 데이터를 저장
:w>> file 지정한 파일에 데이터를 추가

출처 : http://www.jointclub.net/about_unix/vi.html


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

베뉴 8 Pro Windows 10 업그레이드  (0) 2016.06.29
택배 조회 URL 모음  (0) 2016.04.06
Windows용 Mantis 설치  (0) 2015.05.29
Eclips 단축키 모음  (0) 2015.05.27
Windows용 Mantis 설치  (0) 2015.05.27

+ Recent posts