기본 콘텐츠로 건너뛰기

DBMS 튜닝(tuning)시 유의 점

DBMS의 튜닝의 70% 이상은 SQL튜닝과 Index튜닝으로 해결 됩니다. 하지만 예외적인게 조금 있지요. 얼마 전에 옆에서 이상하게 속도가 느려진 쿼리가 있어서 봐달라고 쿼리를 보여주었습니다. 힌트를 주어 강제로 인덱스를 태우고 있었습니다. 이 힌트는 왜 주었냐고 물어보니 원래 그렇게 되어 있어서 사용중이었다고 합니다. 아마 초기에 만든 사람이 사라지고 그냥 그 동안 문제 없이 쓰고 있었던 것 같네요. 그냥 잘 모르면 힌트를 없애고 돌려보세요. 라고 가이드를 했더니 3초 이상 걸렸던 쿼리가 0.01초로 끝났습니다. 이유는 뭘까요? 대부분의 인덱스는 초기 개발자가 개발하면서 만든 인덱스 외에는 나중에 추가 되는 경우가 많지 않습니다. 대부분 한 번 만들면 그게 최적이라고 생각하는 경우가 대 부분이고, 지금 처럼 초기에 만든 사람들이 사라지고 물려받은 사람들은 이유를 모르고 사용하는 경우도 있습니다. 테이블 설계시의 예상 데이터 축적량을 보고 아무리 DB 전문가가 Index를 걸어준들 사용자의 성향이나 시대에 따라 데이터는 전혀 달리 쌓이게 되는게 보통입니다. 예를 들어, 한국형 게시판은 대 부분 글이 많고 댓글이 적은 편입니다. 이유는 튀기 좋아하는 한국인들은 자기가 돋보여야 하기 때문에 댓글에 달 글 조차도 글쓰기로 올라와서 많은 사람들이 보게 하길 원하는 경우가 많기 때문이지요. 하지만 이 게시판으로 일본에서 서비스를 해보면 글은 얼마 안올라오는데 댓글이 수천에서 수만개가 쌓입니다. 즉 유저의 성향에 따른 데이터의 편중이 달라지는데, 이 때 게시글 옆에 댓글을 카운트 하는 경우 subquery를 이용해서 카운트 하는 경우도 많고, group by 를 이용해서 한 번 카운트 한 댓글 통계를 join하는 경우도 있습니다. 전자의 경우는 댓글 수가 적은 한국에서는 좋은 쿼리이나, 댓글이 너무 많아진 일본에서는 group by에 비해 많은 양의 카운트를 nested loop로 처리하게 되므로 효율이 많이 떨어집니다.

WIndows Batch파일에서 다른 bat파일을 호출 할 때

배치(Batch)파일에서 다른 bat파일을 호출 할 때 그냥 aaa.bat 처럼 입력해주면 된다. 하지만 call aaa.bat 이란 명령도 있다. aaa.bat은 include된 것 처럼 aaa.bat을 실행하고 그 다음 terminate될 수가 있다. 하지만 call aaa.bat을 하면 그냥 메인 배치 파일에서 aaa.bat을 호출만 한 것이므로 실행 결과는 같지만 terminate되거나 하지 않는다. 물론 둘 다 include는 아니기 떄문에 변수를 공유하거나 하지는 않는다. 가급적 호출한 batch파일의 상황에 좌우되지 않으려면 call을 써주는 것이 영향도가 적어 좋은 것 같다. Do not login your server any more! giip :: Free server management tool! https://giipasp.azurewebsites.net/

스테이징, 본 서버와 소스 관리를 일원 화! Azure + Github !

1999년도 부터 서버쪽 일을 계속 하면서 느꼈는데, github등의 공동 작업 서비스들이 발전하면서 엄청난 진화를 했는데, 현재까지도 기존의 방식을 사용하고 있는 기업이 너무 많습니다. 게다가 클라우드면 다되는줄 알고 전부 클라우드에 올렸다가 막대한 비용을 내고 있는 기업들도 있지요.. 규모에 따라 여러가지 어렌지는 필요하지만, 제가 사용하는 방법을 공개합니다. 1. Github계정을 생성, 소스 마스터는 유료 계정으로 설정(월 $7). * 소스 마스터가 유료이면 Contributor를 무제한으로 늘릴 수 있으나 무료 계정이면 2 명까지 밖에 못늘림(언젠가 부터 바뀐 정책). 게다가 워크 그룹이나 오거나이저를 생성하면 계정당 비용을 내야 함. 2. Azure에서 F1(Free) 티어로 App Service등록 * giipasp : 서비스용 App service * giipaspstg01 : 스테이징 1 * giipaspdev01 : 개발 1 3. DB서버 역시 클라우드로 만들어도 되고, 자체 서버에 DB를 설치해도 됨. 이번엔 Azure의 sql cloud 를 사용함. * giipdb DB생성. (10DAU로 설정하면 고정 SQL라이선스를 내지 않아도 됨) * 참고로 S1등의 스탠다드 DB로 만들면 사용을 안해도 1서버당 25만원 정도의 라이선스 비용이 별도로 과금 됨. (처음에 몰랐다가 지불을.....) 4. Github에서 Repository를 Dev, Real 두 개를 생성 * Real은 위의 유료 계정이 아닌 다른 관리 계정으로 만듬.   유료 계정은 개발 및 기타 여러가지 Repository를 잔뜩 만들기 때문에 나중에 deploy관리시 아주 많이 어려움. Deploy는 Contributor가 필요 없으니 차라리 새로 생성해서 Deploy전용 repository만 관리. * Dev : https://github.com/LowyShin/giipasp.git * Stg : https://github.com/

UiPath로 ANSI파일 실행.. 결국 포기 - giip RPA

UiPath를 이용한 giipAgentUIP 를 받아서 실행. wsf를 호출하는건 문제가 없는데.. 디렉토리명이 일본어로 되어 있는 wsf를 호출하니 문제가!! wsf를 실행하는 것도 UiPath는 모르는 확장자라고 내뱉어서 우선 wsf파일로 저장후 wsf파일을 실행하는 batch파일을 저장, Start Process Activity를 이용하여 CMD.exe 를 실행하여 batch파일을 실행하도록 함. 이렇게 했으나, 결국 자동으로 UTF-8로 저장된 wsf파일은 열어보면 잘 보이지만 더블클릭하면 일본어가 깨짐. 이걸 ANSI로 저장하여 더블클릭해서 실행하면 정상 실행이 되었다. 그래서 Write Text File Activity에서 Endoding을 "shift_jis"로 저장하였더니 열어보면 ANSI로 되어 있다. 더블클릭하면 정상 실행, 하지만 UiPath상에서는 에러가.. 아직 해볼 법한 내용들은 몇 개 더 있지만, 소스에서 shift_jis를 박을 수 없고, 그렇다고 giipAgent에서 각각 스크립트마다 언어코드를 가져오도록 사양 변경은 쉽지 않은 상태. 기본은 UTF-8통신을 시키고 있다. UTF-8로만 할 수 있도록 모든 것을 맞추는 것이 나중에도 큰 불편함이 없으리라 생각해서 일단 언어 변환은 포기하고 우선 UiPath에서 일본어 디렉토리를 인식하여 처리하는 xaml파일을 만들어 invoke로 호출하는 것으로 대처함. UiPath : https://uipath.com giip로 Orchestrator없는 UiPath 자동화를! RPA를 생각한다면 다양한 툴은 많지만, 툴들의 장단점을 살려 의존을 줄인 giip에서 컨트롤을! Do not login your server any more! giip :: Free server management tool! https://giipasp.azurewebsites.net/

리눅스에서 특정 디렉토리의 일정 기간이 지난 파일을 다른 곳으로 이동 - Linux shell script

리눅스에서 로그성 데이터들이 쌓이는 곳들이 몇 곳이 있다. 그 중에서 일정 기간 지나면 자동으로 지워지지 않는 파일들이 있는데, 이를 매일 들어가서 지우는 것도 일이다. 삭제도 좋고, 데이터를 이동하는 것도 좋은데, 파일을 이동하는 스크립트로 만들어 봤다. mkdir -p /data1/expdata/partitions for   i   in   `find /oracle/expdata/partitions -mtime +4 -type f` ;  do  mv  $i  /data1/expdata/partitions;  done 이렇게 하면 4일이 지난 해당 디렉토리의 파일을 /data1/expdata/partitions 로 이동한다. 이걸 크론에 등록 하면 (crontab -l ; echo "1 0 * * * sh /data1/DBA/LowyWorks/arrange_oldfiles.sh")| crontab - 쉘에서 이걸 실행하면 자동으로 crontab에 등록 된다. 물론 등록 할 때의 로그인 계정으로 등록되니 crontab에 등록할 때 여기저기 계정으로 등록되지 않게 주의해서 등록하기 바란다. 위의 find 는 일반적인 find문을 그대로 쓸 수 있기 때문에 | grep -v .sh 처럼 이동하고 싶지 않은 파일들을 제외할 수도 있지만, 관리를 위해서는 로그성 데이터는 모두 한 곳으로 이동해 놓는 것을 추천한다. 더 많은 정보를 보고 싶다면, https://github.com/LowyShin/KB-KnowledgeBaseHome/wiki/Shell

오라클에서 테이블 생성 쿼리 작성 - ORACLE Management by SQL

Oracle의 관리 툴은 대부분 비용이 비싸서 가급적 무료툴로 관리를 한다. 그러다보면 기능들이 부족해서 SQL로 해결해야 하는 것들이 생기는데, 그 중에서 많이는 사용하지 않으나 있으면 관리하기 편한 하나가 바로 테이블이나 Procedure의 생성쿼리 이다. Oracle에서는 기본으로 제공해주는 쿼리이므로 주기적으로 select * from all_tables where owner = '<owner>' 로 테이블 명을 가져와서 아래 쿼리로 테이블 생성 쿼리를 업데이트 해주면 변경이력 관리가 필요없게 된다. select dbms_metadata . get_ddl ( ' TABLE ' , ' TableName ' , ' Owner ' ) from dual; select dbms_metadata . get_ddl ( ' Procedure ' , ' ProcedureName ' , ' Owner ' ) from dual; 추가로 Procedure작성쿼리도 추가함.. select * from all_objects 로 검색해서 Procedure나 Function도 가져오면 편할 듯.. Do not login your server any more! giip :: Free server management tool! https://giipasp.azurewebsites.net/

한국어, 일본어 대응 가능한 DBMS Query Tool - ORACLE MySQL SQL Server ODBC 지원

A5MK2라는 일본인이 만든 무료 툴이 있다. 그 동안은 Orange라는 국내 유료 소프트를 사용했는데, 너무 고가다 보니 회사에서는 대체 툴을 희망하였고, 이것저것 찾아보다보니 일본인 스탭에게서 추천을 받아 사용을 해보게 되었다. 공식 홈페이지 :  https://a5m2.mmatsubara.com/ 공식 홈페이지(개인 이지만..)에 들어가도 일본 특유의 이뿌지 않고 실용적이기만 한 페이지가 뜨고.. 다운로드 및 과거 버전 다운로드가 가능하다. 사용하면서 느낀 점으로 보아 Orange의 DBA툴(Orange의 메뉴명)은 보기가 좋은 장점이 있는데, 그 외의 기능들을 보면 A5MK2는 떨어지지 않는 훌륭한 툴이다. 그래도 Orange의 장점을 들어보자면 DBA에서 Tablespace기능이나 AWR추출 기능등은 보기도 편하고 클릭 한 번으로 쉽게 확인 및 처리가 가능하다. 하지만, 사이즈가 큰 경우 Processing... 이라고 표시되면서 몇 시간이고 사용을 못하게 되는 단점은 있다. 그 부분에서 본다면 그냥 필요한 부분을 모두 SQL로 보관하고 처리하면 A5MK2에서도 별로 문제 없이 사용할 수 있으므로 그 부분은 좋았다. A5MK2만의 장점을 들자면.. 접속가능한 DBMS가 많다! Oracle OCI 및 직접 접속 IBM DB2 Microsoft SQL Server Interbase/Firebird PostgreSQL MySQL Mariadb SQLite AccessDB ADO(OLE, ODBC) 지원이 안되는 것이 있다면 ODBC로 연결후에 접속을 해버리면 된다! 아쉽게도 최신 버전에는 강제 UTF Encoding이 걸려있어 과거 버전의 Encoding을 할 수 없는 커넥터로 연결하면 글자깨짐이 발생할 수가 있다. 처음부터 UTF8로 만들어진 경우는 전혀 문제 없으나 예전에는 ANSI로 해당 국가 전용으로 만든 케이스가 있다보니 이러한 소수의 케이스에는 과거 버전인 2.9